J'utilise std :: getline () pour lire des lignes d'une classe dérivée STD :: Istream, comment puis-je avancer quelques lignes? P>
Dois-je juste lire et les jeter? P>
4 Réponses :
Oui Utilisez Si pour une raison d'étrange, vous connaissez l'emplacement de l'endroit où les nouvelles lignes apparaissent alors vous pouvez utiliser Vous pouvez lire d'autres moyens tels que std :: getline code> sauf si vous connaissez l'emplacement des nouvelles lignes. p>
ifstream :: recherche code> premier. p>
ifstream :: lire code> mais
std :: getline code> est probablement la solution la plus simple et la plus claire. p>
@Billy: En fait, votre retard m'a donné 10 reps supplémentaires depuis que j'étais déjà à Max Cap jusqu'à il y a 10 min.
MDR! Je n'ai pas encore cogné la tête dans ledit casquette.
edit: strong> Vous pouvez aussi utiliser std :: istream :: ignorer, voir https: // Stackoverflow .COM / A / 25012566/492336 p>
Dois-je utiliser GetLine le nombre de lignes que je veux sauter? p>
blockQuote>
Non, mais ça va probablement être la solution la plus claire à ceux qui lisent votre code. Si le nombre de lignes que vous sautez est grande, vous pouvez améliorer les performances en lisant de gros blocs et en comptant de nouvelles lignes dans chaque bloc, arrêt et repositionnez le fichier au dernier emplacement de la nouvelle ligne. Mais à moins que vous n'ayez des problèmes de performance, je voudrais simplement mettre Getline dans une boucle pour le nombre de lignes que vous souhaitez sauter. P>
Compter les nouvelles lignes est sorta ce qu'est un getline code> ferait, non?
@Gman - Enregistrer les licornes: Oui, mais vous pouvez utiliser des blocs plus importants et déplacer une plus grande distance si vous savez N est grand (c'est-à-dire compter plus d'une nouvelle ligne dans un bloc tampon)
Et si je chargez tout le fichier en mémoire et d'analyser avec des expressions régulières? Le fichier est inférieur à 1 Mo.
Pour ce que ça vaut la peine:
void skip_lines(std::istream& pStream, size_t pLines) { std::string s; for (; pLines; --pLines) std::getline(pStream, s); }
La manière la plus efficace consiste à ignorer les chaînes avec HandlereadingLineRorror n'est pas debarter mais fabriqué à la main em>, bien sûr.
Le premier paramètre est le nombre maximum de caractères à extraire. Si c'est exactement numérique_limites :: max (), il n'y a pas de limite:
Lien sur cplusplus.com: std :: istream :: ignorer p> si Vous allez sauter beaucoup de lignes que vous devez certainement l'utiliser au lieu de GetLine: lorsque je devais sauter 100 000 lignes dans mon fichier, il a fallu environ une seconde dans le sens opposé à 22 secondes avec GetLine. P> P>