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

SL & STL C++ Discussion :

[Fstream] getline


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut [Fstream] getline
    Bonjour tout le monde,
    je dispose d'un fichier dont je ne connais ni le nombre de lignes, ni la longueur de chacune des lignes, qui est variable.

    Donc pour trouver le nombre de caractères, aucun problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      ifstream is;
      is.seekg (0, ios::end);
      int length = is.tellg();
      is.seekg (0, ios::beg);
    Ce que j'aimerais, c'est ensuite, faire un random entre 0 et lenght. Je tombe donc sur une des lignes du fichier, et la j'aimerais récupérer cette ligne grace à un getline. Sauf que getline récupère la ligne à partir du curseur, qui à cause du random peut se trouver en plein milieu d'une ligne.

    Donc, voila, y a t-il un moyen de récupérer une ligne complète même si l'on n'est pas au début, ou peut-on se positionner au début de la ligne sur laquelle on est?

    Merci d'avance

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Par défaut
    Le nombre de ton random indique un numéro de ligne ?

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je dirais que le plus simple serait de lire toutes les lignes dans un tableau, après les manipulations deviennent très simples. Ce que tu veux faire n'est pas possible directement, faudrait bidouiller. Sinon tu peux aussi compter le nombre de lignes du fichier (voir la FAQ), faire ton random sur ce nombre, et te positionner à la i-ème ligne ; ça c'est possible.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    Ben non sg-40, puisqu'en fait je ne connais aucune information sur le nombre de lignes, ni sur leur longueur;
    Donc je ne peux que connaitre le nombre total de caractères du fichier, et c'est donc un random sur le nombre total de caractères. C'est pour ca que je peux tomber en plein milieu d'une ligne.

    Et c'est pour cela que je voulais savoir s'il existait un moyen de récupérer toute la ligne sur laquelle on est positionné.

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Par défaut
    Une idée qui doit être loin d'etre la meilleure, c'est de te positioner ua début de fichier et de faire autant de getline que ton random, sans t'occuper du contenu récupéré. Ceci pour skipper les lignes qui ne t'interessent pas

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    Ah effectivement loulou24, j'avais pas vu qu'il était possible de compter le nombre de lignes du fichier ; à ce moment-là, ce que tu dis est good sg-40;
    J'applique un random sur le nombre de ligne, et je skippe tant que j'ai pas atteint ce nombre.
    Merci à vous

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    Sinon tu peux aussi compter le nombre de lignes du fichier (voir la FAQ), faire ton random sur ce nombre, et te positionner à la i-ème ligne ; ça c'est possible.
    Loulou24, tu fais comment pour te positionner sur une ligne précise ?

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Par défaut
    ok. Si tu veux récupérer un ligne à partir d'un nombre caractères: tu peux balayer ton fichier caractère par caractère. A chaque début de ligne tu stockes ce que tu lis dans un var temp et tu t'arretes quand (tu as dépassé ton nombre random et fin de ligne).

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Loulou24, tu fais comment pour te positionner sur une ligne précise ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ifstream File("Toto.txt");
     
    int NumLigne = 5; // se positionner à la ligne 5
     
    for (int i = 0; i < NumLigne; ++i)
        File.ignore(std::numeric_limits<streamsize>::max(), '\n');

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    merci bien loulou24

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Par défaut
    Forcément c'est plus propre de faire comme ça.

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

Discussions similaires

  1. Problème de fstream passé en paramètre
    Par Beb8 dans le forum SL & STL
    Réponses: 2
    Dernier message: 11/04/2005, 11h51
  2. Fstream en .net
    Par charliejo dans le forum MFC
    Réponses: 5
    Dernier message: 30/03/2005, 17h55
  3. getline et caracteres non imprimables
    Par traiangueul dans le forum C++
    Réponses: 3
    Dernier message: 11/03/2005, 08h19
  4. Problème avec fstream
    Par cach dans le forum SL & STL
    Réponses: 17
    Dernier message: 27/02/2005, 12h28
  5. Réponses: 11
    Dernier message: 13/10/2004, 00h58

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