IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Stockage d'une sortie de regex


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 13
    Points : 14
    Points
    14
    Par défaut Stockage d'une sortie de regex
    Bonjour,
    je viens vers vous suite à mon blocage, je souhaite récupérer une partie du nom d'un fichier texte qui continent une date et le mettre à la date de la veille, pour ce faire j'ai utiliser une regex simple pour séparer le début du nom du fichier avec la date déja présente ( le format des fichier sont : blablablaJJMMAA donc pas de séparateur direct pour faire un split) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     while ( i != box.Length ){
     
    			 	 MessageBox.Show(" tour n° "+i);
     
    			 		System.Text.RegularExpressions.Regex myRegex = new Regex(@"\d+");	
    			 		string enCours = box[i]; 
     
    			 		string box2 = myRegex.Replace(enCours, dateNow.ToString());			 		
    			 		MessageBox.Show("retour split " + box2);
     
     
     
    			 	i++; 
    			 }
    Ici, je parcours mon tableau dans lequel j'ai récupéré mes données et je sépare chaque entré du tableau au niveau des chiffres grâce à la regex et les remplace à la date actuelle. Mais la date actuelle ne me va pas c'était une solution temporaire pour avancer.

    Je souhaite donc récupéré la partie découpé par la regex dans une variable pour pouvoir ensuite faire des conditions/calculs qui me permettront de calculer la date de la veille du fichier et réintroduire la valeur modifier dans le titre du fichier grace au replace.

    je galère sur ce point et mes tentative de stockage pour faire le calcul son rester veine --' si vous avez une solution ou une idée je prend (je sent que la solution est pas bien compliqué en plus ^^)

    Merci pour votre temps

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    il y à du mieux, grâce a ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string enCours = box[i]; 
    string[] liste = myRegex.Split(enCours);
     
    MessageBox.Show(liste[i]);
    j'avais déjà essayé et c'est tout simple mais je n'avais pas mis "liste" en tant que tableau ce qui bloquai --', le problème c'est que maintenant la regex me renvoie dans la variable non pas la date mais ce qui précède... je continue ^^

  3. #3
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut
    Bonjour ,

    tu es sur la bonne voie , tu peux penser l'inverse est récupérer seulement les "digits" qui correspondent à la date ( la partie que tu vas soustraire ensuite ) .
    Pour cela tu peux utiliser Regex.Split() qui te renvoie un tableau que tu peux facilement concaténer avec Join().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string takeDigits = String.Join("",Regex.Split(input,tonPattern));
    je te laisse le soin du pattern , attention si tu as des chiffres en milieu de chaîne .

    Edit : si tu récupères l'inverse de ce que tu veux c'est que tu as le mauvais pattern .

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    ok, et oui merci pour l'idée de prendre le problème à l’envers j'ai réussi a stocké dans un tableau en ajoutant une regex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    System.Text.RegularExpressions.Regex myRegexChiffre = new Regex(@"\D+");
    string[] liste = myRegexChiffre.Split(enCours);
    MessageBox.Show(liste[1]);
    j'ai galéré sur un truck tout bête j'avais mis "i" de ma boucle while à la place de 1 sur le "liste" forcément il me retournai un résultat qu'au deuxième passage de la boucle, mais bon j'avance malgré tout ^^ .

    nouveau petit problème, pour le calcul pour le moment je "int.parse" le tableau 'liste' mais j'obtient une suite de chiffres. ce que je pensait faire c'est la découper tout les deux chiffre dans 3 variables "jour""mois""année" pour pouvoir la calculer et faire les décrémentation sur 'mois' si 'jours<0 'et à la fin tout rassemblé. Doit y avoir une regex pour faire ca je continue mes recherches, mais si vous savez comment découper les deux première entrée d'un string je suis preneur.

    (ya peut être une logique, plus simple, avec le format 'jjmmaa' de bases mais sa me semble moins intuitif ^^ mais je planche dessus également je pourais faire : 'soustraire 10000' (pour avoir la veille) si 'madate<10000'(c'est que le jours est a 0) alors +310000 et -100(pour passer sur le mois d'avant) .... vous voyez le genre :p mais ça serait plus simple vous prendriez quel méthode ? )

  5. #5
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut
    Ce que je ferai à ta place pour pas trop me compliquer la vie , c'est de convertir ma chaîne en DateTime ( passer à hier sera alors facile ).

    pour le découpage de ta châine , la fonction Substring est ton ami .

    C'est une piste que je te donne , il y a beaucoup de manière d'y parvenir .

  6. #6
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Comme tu le précises dans ton premier message, les noms des fichiers sont du style xxxJJMMAA. Aussi, le plus simple, pour parvenir à tes fins est sans doute :
    • d'extraire les 6 derniers caractères de ta chaîne via la méthode String.Substring ;
    • convertir la chaîne extraite en DateTime via la méthode DateTime.TryParseExact ;
    • soustraire un jour ;
    • reconstruire le nouveau nom de fichier.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    ouai merci de vos réponse ca fonctionne comme je voulais en plus simple ^^
    je met le code si ca peut aidé d'autre gens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     
    // box contient ma chaine de caractère 
    string enCours = box[i]; 
    			 		MessageBox.Show(enCours+"dood"); 
    			 		//Spépare dans deux tableaux la variable 'enCours' contenant le nom du fichier
    			 		//L'élémént au deuxieme emplacement du tableau liste sont les chiffres de la dates
    			 			string[] liste = myRegexChiffre.Split(enCours);
    			 			string date = liste[1]; 
     
    						//Transpose en format date 		 			
    						string format = "ddMMyy"; 
    						DateTime dt = DateTime.ParseExact(date,format,null);
    						//Retire une journée
    						dt = dt.AddDays(-1);
     
    						//Transfert au format cours ddMMyy
    						string strDate = dt.ToString("ddMMyy");
    						MessageBox.Show(dt.ToString());
     
    						//Remplace la date de la variable initiale contenant le nom du fichier . 
    			 			string box2 = myRegexLettre.Replace(enCours, strDate);			 		
    			 			MessageBox.Show("retour split " + box2);
     
    			 		 	i++;
    voila, encore merci .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Image]Stockage d'une image sur un serveur
    Par zoby43 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 23/03/2006, 11h42
  2. Stockage d'une structure
    Par dede92 dans le forum C
    Réponses: 3
    Dernier message: 13/03/2006, 10h02
  3. Réponses: 13
    Dernier message: 16/01/2006, 15h48
  4. Stockage d'une AnsiString en mémoire
    Par Alcatîz dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2005, 21h19
  5. [String] Encodage de caractères pour une sortie HTML
    Par elitost dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 10/11/2004, 08h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo