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 :

Deplacement dans un fichier texte (accesder directement a la ligne n)


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Deplacement dans un fichier texte (accesder directement a la ligne n)
    Bonjour a tous !

    Voila mon soucis, je voudrais savoir si il est possible d'accesder a une ligne précise d'un fichier sans avoire a lire toutes les autre ?
    pour lire dans mon fichier j'utilise un ifstream

    un exemple, j'ai un fichier qui contient des nombres ranger comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    1 20 50
    2 50 70
    6 140 560
    3 70 100
    22 890 930
    Je veut connaitre le premier nombre de la 3eme ligne par exemple ...
    Je suis obliger de faire quelque chose comme ça ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    std::ifstream fichier("chemin");
    int N1, N2, N3;
     
    for (int i=0; i<3; i++)
    {
            fichier << N1 << N2 << N3;
    }
     
    std::cout N1;
    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Points : 145
    Points
    145
    Par défaut
    A ma connaisance c 'est pas possible
    par contre tu peux dumper le fichier dans un conteneur de ton choix


    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
     
    class infoligne
    {
    public:
         int N1;
         int ...
     
         infoligne(string & ligne); //remplis N1 à Nn avec la chaine ligne
    };
     
     
    vector<infoligne>V;
     
    while ( getline( file, line ) ) 
     V.push_back(infoligne(line));
    il faut implementer dans ce cas un objet qui se construit a partir d'une ligne
    et apres tu dois pouvoir jouer avec ton vecteur ou liste ou autre

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    M'est avis qu'info ligne devait prendre une référence constante

    Sinon, compte des appels à std::istream::ignore

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Points : 145
    Points
    145
    Par défaut
    tu l'utiliserais comment le ignore luc ?
    je pensais a un code de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        string s("12 23 56");
       int N1,N2,N3;
     
       istringstream is(s);
     
        if(!(is>> N1 >>N2>>N3))
         throw; //bad format
        is >> ws;
        if (!is.eof()) throw ;//bad format

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Ben, je partirai d'une très simple variation de http://c.developpez.com/faq/cpp/?pag..._compte_lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i=0 ; (i<N) && f.ignore(std::numeric_limits<int>::max(), '\n' ) ; ++i)
    { /*nop;*/ }
    if (!f)
        throw std::runtime_error("pas assez de lignes!");

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/07/2004, 09h30
  2. Réponses: 2
    Dernier message: 02/03/2004, 19h38
  3. Réponses: 3
    Dernier message: 22/02/2004, 20h09
  4. [LG]rechercher dans un fichier texte
    Par BadFox dans le forum Langage
    Réponses: 11
    Dernier message: 01/12/2003, 15h57
  5. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13

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