Sur le net, j'ai vraiment du mal avec le vouvoyement. Ca fait trop bizarre.Envoyé par JµL!eN
Je disais juste ça pour éviter le coredump.Généralement je préfère lire des fichiers pdf valides, ça facilite la lecture ;-) blague à part c'est vrai que si le fichier est pourri, la lecture le sera aussi!
Ben par bloc de 512 ou autre qui soit efficace sur ton systême. Je ne suis pas un pro des optims fichiers, mais j'en suis toujours resté au fait que la lecture caractère par caractère n'était pas efficace. Par contre, pour lire par blocs, il va falloir renverser ce que tu lis, ou faire des push_front.Là je ne vois pas trop ce que tu entends par 'blocs', je ne cherche pas à trouver tous les '%%EOF' du fichier mais seulement le dernier, mais si tu as un exemple sous la main, je veux bien tester.
Hum... je vois que deque ne sait pas les faire par blocDu coup il faudrait une liste de vecteurs (une deque gérée à la main quoi) avec une fonction spécialisée pour la recherche. cool.
En pseudo code pondu en direct, et buggué, cela donnerait:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 std::list<std::vector<char> > buffers; int buf_size = 512; for( int pos = file_length - buf_size ; buf_size != 0 ; buf_size -= min(512,pos), pos -= buf_size) // va certainement planter => faire un while { buffers.push_front(std::vector<char>()); buffers.front().resize(buf_size); if(! file . read( &buffers.front()[0], buf_size)) break; if ( found(buffers) ) break; }C'est juste pour éviter une 10aines d'allocations.Pour la mémoire, c'est vrai, je ne m'en préoccupe pas trop, je pensais que 'vector.push_back(qqch)' s'en chargeait, mais je me trompe peut-être. Mais allouer une chaine de caratères de la taille du fichier (comme limite) est une solution.
Pour optimiser, je crains qu'il faille implémenter ta propre fonction de recherche un peu particulière : un strcmp qui utilise un -- au lieu d'un des deux ++.Je pense avoir vu quelque chose pour améliorer le traitement sur la chaine, faut que je regarde si ça marche bien avec 'vector'.







Répondre avec citation


Partager