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

Langage C++ Discussion :

Dernière position d'un string dans un fichier texte


Sujet :

Langage C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Dernière position d'un string dans un fichier texte
    Bonjour,

    je suis débutante et je tente de déterminer la position de la dernière string "lenght 13" dans un fichier texte. Voici mon code:


    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
    int pos;
    std::string ligne;
    int no_pos;
    vector<int> position;
    int depart;
     
      ifstream file ("Portmon.log");// Ouverture du fichier texte
      while (file.eof()) //Tant que nous ne sommes pas à la fin du fichier.
    {
          std::getline(file,ligne );//Lecture de la ligne                                  
          string::size_type loc = ligne.find("lenght 13:", 0 );
           if( loc != string::npos ) //Si on trouve un lenght 13
           {  
               pos=file.tellg(); //On trouve la position de ce lenght13 dans le fichier.
               no_pos++;// Incrémente l'indice du vecteur.
               position.push_back(pos);//Enregistre la position dans le vecteur. 
            }
                 depart = position[no_pos]// Indique la derniere position d'un lenght  
                                                      13 trouvé.
                 file.close();
    	cout<<depart;
    }
    Malheureusement, on n'arrive pas a sortir de la boucle...Donc, je suppose que cest parce que getline reste le même ???

    Merci de votre aide, c'est très apprécié!!!

  2. #2
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Bonjour,
    Utilise le code de la FAQ "Comment faire pour lire un fichier ligne par ligne ?"

  3. #3
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    Bonjour,

    lorsque vous donnez un code sur plusieurs lignes merci de le mettre dans des balises 'code' (insérées par exemple via le bouton #) afin que l'indentation soit respectée et que des séquences de caractères reconnues comme des raccourcis de smileys soient 'quotées'

    un regards rapide permet de voir que plusieurs choses ne vont pas :
    • while (file.eof()) devait être while (!file.eof())
    • lorsque vous trouvez lenght 13: vous ne sortez pas de la boucle, pourquoi
    • quoi qu'il arrive à la fin de chaque tour de boucle vous (tentez de) fermez le fichier, pourquoi ?
    • à quoi cela vous sert-il d'utiliser un vecteur pour position ?
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par bruno_pages Voir le message
    Bonjour,

    lorsque vous donnez un code sur plusieurs lignes merci de le mettre dans des balises 'code' (insérées par exemple via le bouton #) afin que l'indentation soit respectée et que des séquences de caractères reconnues comme des raccourcis de smileys soient 'quotées'

    un regards rapide permet de voir que plusieurs choses ne vont pas :
    • while (file.eof()) devait être while (!file.eof())
    • lorsque vous trouvez lenght 13: vous ne sortez pas de la boucle, pourquoi
    • quoi qu'il arrive à la fin de chaque tour de boucle vous (tentez de) fermez le fichier, pourquoi ?
    • à quoi cela vous sert-il d'utiliser un vecteur pour position ?
    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
     
    int _tmain()
    {
    int pos;
    std::string ligne;
    int no_pos;
    vector<int> position;
     
    ifstream file ("Portmon.log");
     
    while (std::getline( file, ligne ))
    { 
          string::size_type loc = ligne.find( "Length 13:", 0 );
           if( loc != string::npos ) //Si on trouve un lenght 13
           {  
                file.seekg(0, ios::cur);
                pos=file.tellg(); //On trouve la position de ce lenght13 dans le fichier.
                 no_pos++;// Incrémente l'indice du vecteur.
                  position.push_back(pos);//Enregistre la position dans le vecteur.
     
             }
     }
     
     file.close();
     cout<<position[no_pos];
     }

    J'avais posté le mauvais code au départ, celui-ci est la dernière version. En fait, le vecteur me permet de garder en mémoire toute les positions des "length 13" contenu dans le fichier texte, et donc le dernier élément du vecteur corresponderas à la dernière position trouvée. En fait, j'ai simplement tenté une astuce pour trouver la dernière position car je ne sais pas comment la trouver directement...

  5. #5
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    si seule la dernière position de la chose est importante alors il est inutile d'utiliser un vecteur, il suffit d'utiliser une simple variable qui sera écrasée à chaque fois et vous l'initialisez avec -1 par exemple pour savoir si la chose a ou non été trouvée.

    votre code lui suppose que la chose est obligatoirement trouvée car vous faites cout<<position[no_pos] sans vérification

    pour le reste votre code ne donne pas le bon résultât même sans l'essayer car une fois que vous savez que vous avez lu une ligne contenant la chose vous ne vous préoccupez plus de sa position dans la ligne, donc dans le fichier lui-même
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Mais comment bouger le curseur avec le getline ?

  7. #7
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    mais le curseur dans le fichier bouge tout seul à chaque getline, heureusement, sinon ce serait quasi inutilisable.

    attention cependant au fait que le \n est écarté, donc si getline retourne une ligne de 12 caractères c'est qu'en fait vous en avez lu 13 dans le fichier. Ceci est important pour calculer la position de la chose cherchée dans le fichier.

    maintenant vous deviez être capable de donner un programme valide
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

Discussions similaires

  1. insérer ou remplacer une ligne string dans un fichier texte ?
    Par Night_Wolf1619 dans le forum Débuter
    Réponses: 34
    Dernier message: 16/05/2013, 11h49
  2. [XL-2003] Chercher un string dans un fichier texte
    Par apnw7931 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/10/2011, 16h09
  3. Réponses: 4
    Dernier message: 26/05/2011, 22h50
  4. écrire un String dans un fichier texte
    Par Flagada dans le forum C++Builder
    Réponses: 4
    Dernier message: 22/01/2007, 16h49
  5. Comment enregistrer une string dans un fichier
    Par Dnx dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 23/09/2005, 14h52

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