Bonjour,
j'utilise:
- Windows XP SP2
- Visual c++ 2005 Express Edition SP1
Mon programme fonctionne parfaitement quand j'utilise: g++ 3.4.4.
(Autant sous linux que sous windows)
Le programme parcours le fichier et annalyse le texte.
J'ai commenc� avec une lecture caract�re par caract�re et je constate que de temps � autre, j'ai besoin de lire des lignes.
�a ne pose pas de probl�me sur de tr�s petit fichier ( < 4'096 caract�res)
Maintenant que mon parser est quasi fini, je constate que j'ai un soucis de temps en temps au moment o� je dois revenir en arri�re sur des fichiers plus grand que 4'096 caract�res.
Ce qui se passe:
avec le debugger, j'ai pu constater que le fichier est parcourus par bloque de 4'096 caract�res.
Le programme d�passe se bloque de 4'096 en appelant la fonction get() ou getline().
Ensuite le bug survient au moment o� le programme doit revenir sur ces pas. J'utilise unget() plusieurs fois dans une boucle for (En raison d'un autre bug, voir rem ci-dessous).
A ce moment le pointeur doit se perdre car je n'arrive plus � lire de caract�res.
A) Donc est-ce que c'est possible de modifier le nombre de caract�res charg� ?
(J'ai observ� avec le debugger en me pla�ant sur pointeur de type fstream puis j'ai parcourus les �l�ments suivants /+ _Filebuffer /+ _Myfile /+ _bufsize = 4096
B) Est-ce qu'il est possible d'indiquer lorsque l'on ouvre le fichier qu'il soit totallement charg� en m�moire ? (fichier toujours plus petit que 10Mo)
C) Est-ce qu'il y a qqch � modifier ou indiquer sous Visual C++ pour utiliser correctement la classe fstream ?
REM:
Ouvrir le fichier:
lire un caract�re:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 string thefile = "nom du fichier"; fstream * pOpenedFile; pOpenedFile = new fstream(thefile.c_str());
lire une ligne:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 char readChar; pOpenedFile->get(readChar);
retour en arri�re:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 string strLine; getline(*pOpenedFile,strLine);
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 for(unsigned int i=0; i <= (strLine.length() - found ); i++) { pOpenedFile->unget(); }
Si j'utilise pas les fonctions tellg() et seekg() c'est que les pointeurs retourn� n'ont aucun sens lors que les fins de lignes sont signal�es par Line Feed ( 0x0A ou '\n' )
(Un autre bug sous Visual C++ 2005 enfin, j'en suis pas certain.)
Et comme je souhaite pouvoir annalyser des fichiers texte au format UNIX ou Dos, je ne me limite pas au fin de ligne: Carriage Return et Line Feed ( 0x0D 0x0A ou "\r\n" ) donc, je n'ai pas utilis� ces 2 fonctions (tellg et seekg).
Voir: http://forums.microsoft.com/MSDN/Sho...08912&SiteID=1
(Message concernant ce probl�me.)
PS:
Si vous avez des conseilles pour annalyser (parser) un fichier texte, je suis preneur. Mais, je ne pense pas pouvoir les mettre tout de suite en pratique car je souhaite �viter de devoir r��crire la moiti� de mon code pour les mettre en pratique.
PS2:
S'il vous manque des infos, n'h�sitez pas � me l'indiquer.
Partager