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 :

lecture et placement dans un fichier texte


Sujet :

SL & STL C++

  1. #1
    Membre régulier Avatar de shams
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 210
    Points : 83
    Points
    83
    Par défaut lecture et placement dans un fichier texte
    bonjour,
    je fais suite à mon post précédent

    j'ai besoin de lire la première, la deuxième et la dernière ligne de mon fichier avant de relire tout. Pour la 1ere et la 2nde, pas de souci, mais par contre, j'arrive pas à me positionner sur la dernière (j'ai l'impression que je suis à la fin du fichier)

    Et j'ai essayé de me replacer au début... echec!

    Dernier souci, je veux vider mon buffer pour économiser ma mémoire, mais ca n'a pas l'air de fonctionner...
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    	// 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	line;
    		float x1, y1, z1, x2, y2, z2, x3, y3, z3;
     
    		//lecture de la premiere ligne
    		getline(buff, line);
    		istringstream firstLine(line);
    		firstLine >> x1 >> y1 >> z1;
    		cout << "\n on a " << x1 << " " << y1 << " " << z1 << "\n";
     
    		//lecture de la deuxieme ligne
    		getline(buff, line);
    		istringstream secondLine(line);
    		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, line);
    		istringstream lastLine(line);
    		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();
    	}

  2. #2
    Membre régulier Avatar de shams
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 210
    Points : 83
    Points
    83
    Par défaut
    bon je viens de réussir à me repositionner au début! J'etais pas loin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // du coup faut se replacer au debut
    buff.seekg(0, ios_base::beg);
    je cherche toujours pour atteindre la dernière ligne et vider le buffer...

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    J'ai l'impression que ton buffer ne sert à rien, autan travailler directement sur le fichier.

    Ensuite, ios::end permet de se positionner sur la fin du flux, ce qui n'est pas la même chose que sur la dernière ligne. Pour atteindre la dernière ligne, pas vraiment d'autre solution que de les lire toutes.
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    ifstream fichierInput( "../../data/Balise.xyzb" );
    string	line;
    float x1, y1, z1, x2, y2, z2, x3, y3, z3;
     
    //lecture de la premiere ligne
    getline(fichierInput, line);
    istringstream firstLine(line);
    firstLine >> x1 >> y1 >> z1;
     
    //lecture de la deuxieme ligne
    getline(fichierInput, line);
    istringstream secondLine(line);
    secondLine >> x2 >> y2 >> z2;
    cout << "\n on a " << x2 << " " << y2 << " " << z2 << "\n";
     
    //lecture de toutes les lignes
    string prevLine;
    while(getline(fichierInput, line))
    	prevLine = line;
    istringstream lastLine(prevLine);
    lastLine >> x3 >> y3 >> z3;
    cout << "\n on a " << x3 << " " << y3 << " " << z3 << "\n";
     
    // du coup faut se replacer au debut
    fichierInput.clear(); // repositionne l'état du flux à OK
    fichierInput.seekg(0, ios::beg);
     
    // cette boucle s'arrete des qu'une erreur de lecture survient
    while (getline(fichierInput, 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 "," ???
    	iss.ignore(INT_MAX, ',');
    	iss >> tmpb;
    	cout << "\n on a enregistre " << tmpx << " " << tmpy << " " << tmpz << " " << tmpb << "\n"; 
    }

  4. #4
    Membre régulier Avatar de shams
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 210
    Points : 83
    Points
    83
    Par défaut
    ok! Merci pour les diverses corrections...

    J'ai utilisé un buffer car il me semblait avoir lu sur un post que c'etait plus rapide...

    Pour atteindre la dernière ligne, j'avais pensé à les lire toutes, mais je me demandais s'il n'y avait pas plus rapide. D'où l'utilisation de ios::end. J'etais en train d'essayer d'augmenter le premier paramètre jusqu'à trouver le retour à la ligne ('\n') mais je bloque...

Discussions similaires

  1. [Débutant] Lecture et recherche dans un fichier texte
    Par r.morel dans le forum VB.NET
    Réponses: 4
    Dernier message: 20/02/2015, 12h48
  2. la lecture et l’écriture dans des fichiers textes en java
    Par blackhock dans le forum Général Java
    Réponses: 2
    Dernier message: 06/05/2009, 17h10
  3. [PHP 4] [CSV] Lecture des accents dans un fichier texte
    Par eloreal dans le forum Langage
    Réponses: 1
    Dernier message: 03/01/2009, 11h00
  4. Lecture de valeurs dans un fichier texte (txt)
    Par zerbault dans le forum Fortran
    Réponses: 2
    Dernier message: 22/01/2007, 10h29
  5. [Débutant] Lecture dans un fichier texte
    Par babemagus dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/07/2005, 12h17

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