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 :

Probleme boucle récupération mot


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    1
    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 : 1
    Points : 1
    Points
    1
    Par défaut Probleme boucle récupération mot
    Alors voilà mon problème du moment, je souhaiterais faire un programme qui aille chercher un fichier txt (contenant 6000 lignes) et récupérer certain mots. J'ai donc fait le programme en deux boucles, l'une d'abord permettant d'atteindre la partie qui nous intéresse en recherchant le mot clé/titre de cette partie puis une deuxieme boucle qui elle traitera la partie pour récupérer les mots qui nous intéresse.

    Le problème pour l'instant concerne la premiere boucle, en effet j'ai inscris vers la 4000e ligne un mot pour les tests et demander a cette boucle d'allez jusqu'ici avant que la deuxieme ne prenne le relai.
    Voici le code tout d'abord :

    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
     
    StreamReader vartext = new StreamReader(@"le chemin d'accès du fichier");
    int counter = 0;
    Boolean trouve = false;
    String ligne1;
     
     while (trouve == false) // Le premier while cherche la zone de texte utile
    	        {
    	            ligne1 = vartext.ReadLine();
                    if (ligne1.Contains("le mot clé que j'ai inscris"))
    	                {
    		                trouve = true;
                            Console.WriteLine("trouvé !");
    	                }
                    counter++;
                   Console.WriteLine(counter);
                   Console.WriteLine(ligne1);
    	        }
    Le problème qui se pose, c'est que le programme en éxecution ne trouve jamais le mot clé, il lis les 6000 lignes du fichier txt et plante. Je pense que le problème vient de la condition if, peut etre meme du contains. Mais je ne comprends pas ce qui cloche, si vous pouviez m'aider ce serait cool :/

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 647
    Points : 2 169
    Points
    2 169
    Par défaut
    Bonjour,

    bizarre en effet il devrait trouvé le mot, le problème se situe peut être ailleurs, pourrais-tu nous montrer l'intégralité du code ?

    Aussi pour être sur que ta boucle ne se répète a l'infini au cas ou elle n'a rien trouvé, je te conseillerai de faire comme ceci :

    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
                StreamReader reader = new StreamReader("C:\\fichier.txt");
     
                string ligne;
                int count = 1;
     
                while (!reader.EndOfStream)
                {
                    ligne = reader.ReadLine();
     
                    if (ligne.Contains("mot clé"))
                    {
                        Console.WriteLine("Trouvé a la ligne " + count);
                        break;
                    }
     
                    count++;
                }
     
                reader.Close();

  3. #3
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Salut Erzegot,

    Est-ce que le pattern que tu cherche contient des char culture dependent comme des accents?
    Quand tu execute "ligne1.Contains("le mot clé que j'ai inscris")" dans ton debugger, ca return quoi?
    Si ca vient de l'encoding tu peux utiliser ca plutot: https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx (avec https://msdn.microsoft.com/en-us/lib...=vs.110).aspx)
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut suite des opérations
    J'ai finalement trouvé le problème mais merci tout de même pour vos réponses.

    J'aurais une petite question cependant si vous savez comment faire
    Je rappelle donc que chaque ligne ce compose comme ceci : "chaine de caractere" unnombre* unnombre* unnombre* unnombre*

    *totalement différent selon le fichier log, il n'a pas de valeur fixe car il est le résultat des statistiques d'un outil


    J'aimerais savoir comment récupérer uniquement le premier nombre donné, de la ligne concerné (que j'ai donc trouvé avec le code précédent)

    Une idée ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur DELPHI
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur DELPHI
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Bonjour alkaz,

    Tu peux récupérer ce nombre en utilisant le Substring

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string maLigne = "1234";
    string premierNombre = maLigne.Substring(0, 1);
    Ce qui retournera 1
    Le premier chiffre correspond à l'index de départ et le second le nombre de caractères à récupérer.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup Frank !

    il y a cependant un probleme en effet je sais que le premier nombre est après l'espace qui sépare le nombre de la chaine de caractère (24 caractère pour la chaine plus précisément) mais le nombre lui peut varier entre un caractère comme quatre caractère.

    Comment faire comprendre au programme que je souhaite le premier nombre qui se trouve après l'espace séparant la chaine du nombre, et surtout je ne souhaite pas avoir les autres nombres séparer d'un espace après le premier !


    PS : Ce que je ne comprends pas dans le substring c'est qu'il n'accepte pas ce caractère "_" et plante lorsqu'il le lit. En effet je ne peut lui demander le caractère (20,21) car entre temps il y a un "_"

    Je sais pas si je me fais bien comprendre :/

  7. #7
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    peux-tu nous montrer la ligne à parser ?

    NB : Substring aime tous les caractères, le coquin
    Plus je connais de langages, plus j'aime le C.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur DELPHI
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur DELPHI
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Salut alkaz,

    Peux-tu fournir plusieurs exemples de chaîne.

    Cordialement

    Frank

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    la ligne dont je souhaite récupérer le premier nombre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /LAPK_LaSousPartie 9 0 0 0
    la ligne de code mis en place

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (lignesuite.Contains("/LAPK_LaSousPartie ") || lignesuite.Contains("/LAPK_LaSousPartie "))
                    {
                        Console.WriteLine("LSP trouvé");
                        LSP = LSP + lignesuite.Substring(19, 20);
                    }

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur DELPHI
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur DELPHI
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    C'est normal que tu aies une erreur.

    Ce n'est pas le caractère "_" qui pose problème.

    Dans ton exemple, tu dis au substring de commencer au caractère 19, et de sélectionner 20 caractères.

    Sauf que ta ligne ne fait que 26 caractères au total.

    Tu es donc en dehors du tableau

    Pour que ton exemple fonctionne, il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string maLigne = "/LAPK_LaSousPartie 9 0 0 0";
    string premierNombre = maLigne.Substring(19, 1);
    Ce qui retournera => premierNombre = 9;

    Petit récapitulatif sur le fonctionnement de la fonction substring.

    Le premier nombre indique la position dans ta chaîne de caractère.
    Dans ton cas tu te trouveras après l'espace de "/LAPK_LaSousPartie "
    Le second nombre indique le nombre de caractères à sélectionner en partant de l'index donné.
    Donc il te reste que 7 caractères sélectionnables.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    merci beaucoup ! en effet je n'avais rien compris au substring.

    Maintenant ca fonctionne, merci encore !

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur DELPHI
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur DELPHI
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    De rien

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Hum j'ai une nouvelle question (toujours concernant le même programme)

    J'ai regardé sur les tutoriels de Microsoft mais je ne comprends pas vraiment


    Je souhaiterais intégrer à mon programme un tableau qui soit construit par rapport à un fichier paramètre (permettant le programme d'etre toujours d'actualiter, et de seulement modifier le fichier parametre)

    Le tableau sur 2 colonnes comporterait d'un coté la chaine de caractère concernait (par exemple "LaSousPartie") et dans l'autre colonne le nombre récupérer.

    PS : Il y a 8 chaine de caractère

    Une idée ?

  14. #14
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Points : 336
    Points
    336
    Par défaut
    Citation Envoyé par alkaz Voir le message
    la ligne dont je souhaite récupérer le premier nombre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                string maLigne = "/LAPK_LaSousPartie 9 0 0 0";
                string[] tableau = maLigne.Split(' ');
     
                int premier;
     
                foreach (string item in tableau)
                {
                    if (Int32.TryParse(item, out premier))
                    {
                        break;
                    }
                }
    "Hope for the best, but prepare for the worst."

Discussions similaires

  1. [Upload] probleme de récupération de fichier image
    Par BernardT dans le forum Langage
    Réponses: 2
    Dernier message: 15/11/2005, 01h12
  2. probleme avec le mot const et operateur==
    Par elekis dans le forum C++
    Réponses: 4
    Dernier message: 06/05/2005, 13h21
  3. [VB.NET] Problem de récupération de variable avec une DLL
    Par ludovic85 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 19/01/2005, 11h37
  4. [LG]Problême Boucle
    Par pierrOPSG dans le forum Langage
    Réponses: 1
    Dernier message: 29/04/2004, 16h48
  5. probleme identification et mot de passe root
    Par freums dans le forum Débuter
    Réponses: 5
    Dernier message: 19/09/2003, 17h09

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