Partage
  • Partager sur Facebook
  • Partager sur Twitter

lecture et placement dans un fichier texte

    28 mai 2007 à 12:18:55

    bonjour bonjour!

    mon fichier texte est de la forme:
    91234.25           23412.50           234           BCN,10

    J'ai besoin de lire les 3 premières coordonnées de la première, seconde et dernière ligne d'un fichier texte. Puis de revenir au début pour lire tout le fichier cette fois ci.
    J'aimerais faire quelque chose d'un peu optimisé. Après quelque recherche sur internet j'ai fais ceci

            // ouverture du fichier
            ifstream fichierInput( "../../data/Balise.xyzb" );
           
            // verification
            if (!fichierInput)
                    cout << "\nt'es dans le caca avec ton fichier\n";
            else
            {
                    // on tente un truc rapide -> on met tout dans un buffer
                    stringstream buff;
                    buff << fichierInput.rdbuf();
                    //cout << "Taille du buffer : " << buff.str().size() << '\n';
                   
                    // plus besoin du fichier donc
                    fichierInput.close();
                   
                    // on fait la petite feinte pour choper largeur, longueur et resolution
                    //findInfo(buff);
                   
                    string  line2;
                    float x1, y1, z1, x2, y2, z2, x3, y3, z3;
           
                    //lecture de la premiere ligne
                    getline(buff, line2);
                    istringstream firstLine(line2);
                    firstLine >> x1 >> y1 >> z1;
                    cout << "\n on a " << x1 << " " << y1 << " " << z1 << "\n";
           
                    //lecture de la deuxieme ligne
                    getline(buff, line2);
                    istringstream secondLine(line2);
                    secondLine >> x2 >> y2 >> z2;
                    cout << "\n on a " << x2 << " " << y2 << " " << z2 << "\n";
                   
                    //positionnnement a la fin du fichier
                    buff.seekg(0, ios::end);
                    getline(buff, line2);
                    istringstream lastLine(line2);
                    lastLine >> x3 >> y3 >> z3;
                    cout << "\n on a " << x3 << " " << y3 << " " << z3 << "\n";

                    // du coup faut se replacer au debut
                    buff.seekg(0, ios::beg);
                   
                    // cette boucle s'arrete des qu'une erreur de lecture survient
                    while (getline(buff, line))
                    {
                            // on enregistre ligne par ligne mais evidemment faut sauter le "BCN,"
                            istringstream iss( line );
                            iss >> tmpx >> tmpy >> tmpz;
                           
                            // comment choper que l'entier apres le "," ???
                            getline (iss, bcn, ',');
                            getline (iss, bcn, ',');
                            istringstream iss2( bcn );
                            iss2 >> tmpb;
                            cout << "\n on a enregistre " << tmpx << " " << tmpy << " " << tmpz << " " << tmpb << "\n";
                    }
                   
                    // on supprime le buffer
                    buff.flush();
            }


    Mon souci est sur le positionement à la dernière ligne... j'ai l'impression que je me place au dernier caractère...
    Et après je n'arrive pas à me replacer au début du buffer...

    Merci d'avance



    EDIT: je viens de réussir à me repositionner au début du fichier
    // du coup faut se replacer au debut
    buff.seekg(0, ios_base::beg);
    je cherche toujours pour aller à la dernière ligne ;)
    • Partager sur Facebook
    • Partager sur Twitter
      28 mai 2007 à 13:23:23

      Il faut nétoyer les bits d'état du flux une fois la fin du flux atteinte si tu veux te reballader dans le flux.
      -> std::istream::clear()
      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

      lecture et placement dans un fichier texte

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown