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 :

Lire un fichier ligne par ligne et revenir en arrière


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 45
    Par défaut Lire un fichier ligne par ligne et revenir en arrière
    Bonjour,

    Voilà je cherche à lire un fichier un texte par ligne, donc j'utilise ifstream pour la gestion du fichier et GetLine pour récupérer les lignes.
    Mais j'ai également besoin de revenir en arrière, mais je ne sais pas comment faire.


    Est-ce quelqu'un pourrait m'aider (sachant que je débute en C++) ?

    Merci.

  2. #2
    Membre expérimenté Avatar de Dalini71
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 181
    Par défaut
    Bonjour,

    Pourquoi ne sauvegardes tu pas les lignes lues (dans un std::vector<std::string> par exemple) ?

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533

  4. #4
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    Salut,

    pour faire de manière simple, vu que tu commences, je dirais :

    -un compteur (int compteur=0; ) que tu incrémentes à chaque nouveau décalage vers une ligne
    -dès que tu veux revenir en arrière, genre de 2 lignes, tu repars du début de ton fichier, et tu effectue "compteur-2" décalage de ligne

    je sais pas si tu vois ce que je veux dire, si tu veux plus d'explication ou de code demandes et ce sera avec plaisir

    Cordialement,

  5. #5
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 45
    Par défaut
    Merci à tout le monde.

    Vos 3 réponses m'ont servi
    Pour sauvegarder les lignes lues dans un std::vector<std::string>, j'aurais besoin de plus d'aide car je ne sais pas faire çà.

    Avec ce que m'a dit Kaamui, j'ai pu un peu avancer mais après j'ai été confronté à un autre pb cette fois de string.
    En effet, je lis une ligne dans mon fichier qui est du style un libellé suivi de :: puis un autre libellé suivi de ().
    Par exemple : toto::titi()

    Et je voudrais extraire dans 2 string ce qui correspond à toto et ce qui correspond à titi.

    Est-ce que c'est possible ?

    Merci.

  6. #6
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    je ne comprends pas. tu as un objet std::string et une méthode qui renvoie un std::string dedans?

    Pour insérer un nouvel élément dans ton vector (un tableau mieux foutu) tu as la méthode push_back à utiliser comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    std::vector<std::string> maListeDePhrases;
    std::string phrase("ma phrase");
    maListeDePhrases.push_back(phrase);

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Lecture dans un tableau de ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    string line;
    vector<string> lines;
    while (getline(file, line))
    {
      lines.push_back(line);
    }
    Pour la seconde partie, plusieurs possibilités :
    - Ton compilateur supporte les regex, je te conseille de regarder là dedans
    - Faire à la main des recherches dans la string des caractères de limitation (find ou find_first_of et compagnie) puis extraire les sous-chaînes (substr)
    - Faire un parseur (par exemple avec boost.spirit), mais j'ai l'impression que dans ton cas, c'est le marteau piqueur pour écraser une mouche. Je le mentionne uniquement pour que tu aies une idée vers quoi te tourner si le format de ton fichier évolue et devient plus complexe.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 45
    Par défaut
    Merci à tous pour votre aide.

    Avec tout çà, j'ai bien avancé.

    Tapiou.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/07/2014, 18h08
  2. lire une base de donnee ligne par ligne
    Par thildouille dans le forum Langage
    Réponses: 9
    Dernier message: 03/06/2011, 00h50
  3. lire fichier .txt (NOTEPAD) ligne par ligne
    Par skambram dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/06/2009, 18h41
  4. lire un fichier de string ligne par ligne
    Par bilzzbenzbilz dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 11/02/2009, 10h44
  5. Réponses: 3
    Dernier message: 16/10/2007, 20h45

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