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:
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:
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...