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 :

Récupérer une ligne via mot clé (contains)


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Par défaut Récupérer une ligne via mot clé (contains)
    Bonjour,

    Je vous explique le petit soucis que j'ai :

    lors de la lecture du fichier txt, le programme vérifie que la ligne contient tel mot clé et si c'est le cas, elle récupère le premier nombre inscrit après la ligne et le met au mot clé qui correspond, dans une liste.

    une ligne ce présente comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /quelquechose/motcletest 100 5 5 40
    ou comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /quelquechose/motcletest.uneextension 10 5 5 40
    un bout de code sur ce que je fais actuellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (LogLignes.ToLower().Contains(string.Concat(line.str.ToLower(), " ")))
                                {
                                    line.nb = line.nb + int.Parse(LogLignes.Split(' ')[1]);
                                    break;
                                }
    mais voilà le soucis avec ce if, c'est qu'il ne récupère pas le nombre de la ligne s'il y a quelque chose d'écrit APRES le mot clé, comme une extension ou meme la continuité d'un chemin d'accès, etc.

    avez vous une idée ?

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    Je ne sais pas si tu as compris ce que fait ton code ?
    Le IF permet de tester s'il y a un espace dans la ligne.
    Si oui il coupe la chaîne au niveau de l'espace et transforme tout ce qu'il y a après en nombre.

    Donc évidement s'il y a un espace dans le chemin ou dans l'extension (plus rare ) ça ne fonctionne pas.

    Moi je dirais que c'est le format du fichier qui est pourri ^^
    On n'utilise pas un séparateur aussi commun qu'un espace sinon on a ce genre de problème...

    Solution 1 : changer le format de fichier (utiliser un ';' qui n'apparait pas dans le chemin de fichier)
    Solution 2 : passer par la fin de la ligne et remonter jusqu’à trouver quelque chose qui ne correspond pas à un nombre. Ceci n'est bien sur faisable que s'il n'y a pas de chaîne après tes valeurs. Mais bon sinon le format est vraiment à mettre à la poubelle...

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
    string[] lignes = new string[]
    			{
    				"ceci est une ligne de test 01 05 69 70",
    				"ceci est une autre ligne de test 55 555 977 05 69 70"
    			};
     
    			foreach (var ligne in lignes)
    			{
    				string clef = string.Empty;
    				string nombre_s = string.Empty;
     
    				var split = ligne.Split(' ');
    				for (int i = split.Length - 1; i >= 0; i--)
    				{
     
     
    					var mot = split[i];
    					int nb = -1;
    					if (int.TryParse(mot, out nb))//c'est un nombre
    					{
    						nombre_s = nombre_s.Insert(0, mot);
    					}
    					else//c'est la clef
    					{
    						clef = clef.Insert(0, mot);
    					}
    				}
     
    				if (clef.Length == 0 && nombre_s.Length == 0)
    				{
    					Console.WriteLine("problème de format ? pas d'info sur cette ligne : {0}", ligne);
    					continue;
    				}
     
    				Console.WriteLine("Clef : {0}", clef);
    				Console.WriteLine("Nombre : {0}", int.Parse(nombre_s));//cast pour te montrer que ça passe mais inutile
     
    			}
    A+

  3. #3
    Membre Expert

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Par défaut
    Sinon, les expressions régulières sont bien adaptées pour résoudre ce type de problème...

Discussions similaires

  1. récupérer une ligne particulière d'un fichier
    Par Jasmine80 dans le forum Langage
    Réponses: 4
    Dernier message: 20/08/2007, 14h00
  2. Récupérer une ligne d'une matrice
    Par setsuko974 dans le forum Langage
    Réponses: 4
    Dernier message: 13/03/2007, 20h31
  3. Réponses: 2
    Dernier message: 15/02/2007, 22h00
  4. Récupérer une ligne aléatoire avec fgets
    Par Alexbad dans le forum C
    Réponses: 20
    Dernier message: 30/07/2006, 23h53
  5. Récupérer une ligne sur 5
    Par migol dans le forum C
    Réponses: 8
    Dernier message: 24/05/2006, 10h03

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