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 :

lecture fichier texte optimal


Sujet :

C++

  1. #1
    Membre confirmé 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
    Par défaut lecture fichier texte optimal
    bonjour!

    Et oui, je sais, encore un post sur un truc basique: lire un fichier texte.
    Je souhaite lire un fichier texte pouvant être assez gros (10Mo) le plus rapidemment possible. Les lignes sont de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    912450.25	6232401.25	28.0387096	BCN,10
    J'ai (essayé de) bien regardé tous le forum et autre sujet sur google.
    J'ai compris que scanf, eof et autres... vous etiez pas trop fana. Certains ont suggéré de passer par un buffer.

    La je bugg en plus sur comment choper le nombre après la virgule
    Sachant que je suis pas expert en c++, j'en suis la:
    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
    void mnt::load(void)
    {
    	float tmpx, tmpy, tmpz;		// le x y z de chaque ligne
    	int tmpb;			// le b correspondant x y z	
    	string line;		// contient la ligne qu'on est en train de lire
     
    	// 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();
     
    		// plus besoin du fichier donc
    		fichierInput.close();
     
    		cout << "Taille du buffer : " << buff.str().size() << '\n';
     
    		// cette boucle s'arrête dès 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 après le "," ???
    			iss >> tmpb;
     
    			cout << "\n on a enregistre " << tmpx << " " << tmpy << " " << tmpz << " " << tmpb << "\n"; 
    		}
    	}
    }
    Voilà. Qu'est ce que vous en pensez? Existe-t-il des méthodes plus efficaces? Est-ce utile de passer par un buffer?

    Merci d'avance! En attendant je continue de chercher...

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    // comment choper que l'entier après le "," ???
    tu peux appliquer ceci sur tmpb

  3. #3
    Membre confirmé 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
    Par défaut
    rah la la. C'est quand on l'a sous les yeux qu'on le voit pas! J'ai lu cette FAQ 10 fois et je suis passé a coté!!



    merci

  4. #4
    Membre confirmé 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
    Par défaut
    bon voila ca marche, mais est-ce la meilleure méthode?
    Je vous dire: est-ce que vous auriez fait comme ca? Je cherche à avoir la méthode la plus rapide et la plus efficace, donc toute critique (ou suggestion) constructive est la bienvenue!!
    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
    void mnt::load(void)
    {
    	float tmpx, tmpy, tmpz;      // le x y z de chaque ligne
    	int tmpb;                    // le b correspondant x y z	
    	string	line,                // contient la ligne qu'on est en train de lire
                     bcn;               // on récupère d'abord la chaine qu'on va bidouiller pour virer le BCN,
     
    	// 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();
     
    		// plus besoin du fichier donc
    		fichierInput.close();
     
    		cout << "Taille du buffer : " << buff.str().size() << '\n';
     
    		// cette boucle s'arrête dès 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 après le "," ???
    			getline (iss, bcn, ',');
    			getline (iss, bcn, ',');
    			istringstream iss2( bcn );
    			iss2 >> tmpb;
     
    			//cout << "\n on a enregistre " << tmpx << " " << tmpy << " " << tmpz << " " << tmpb << "\n"; 
    		}
    	}
    }

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

Discussions similaires

  1. Lecture fichier texte
    Par vince-60 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/04/2006, 14h15
  2. [VB]Probleme lecture fichier text et affichage
    Par clochardevobsy dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/03/2006, 08h46
  3. lecture fichier texte et ...
    Par Nils30 dans le forum Langage
    Réponses: 5
    Dernier message: 12/01/2006, 11h55
  4. lecture fichier text et renvoi du contenu en byte *
    Par JulienT dans le forum Réseau
    Réponses: 3
    Dernier message: 02/01/2006, 13h21
  5. Lecture fichier text
    Par krfa1 dans le forum ASP
    Réponses: 13
    Dernier message: 25/11/2005, 08h00

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