/ / C ++ preskočiť viac riadkov efektívne - c ++, file-io, getline

C ++ efektívne preskočí viac riadkov - c ++, file-io, getline

Mám kód na čítanie každého štvrtého riadku a s tým niečo urobiť

ifstream in(inputFile, ios::in);
string zeile;
for (int z = 0; z < numberOfSequences; z++) {
getline(in,zeile); // skip 3 lines
getline(in,zeile); // skip 3 lines
getline(in,zeile); // skip 3 lines
getline(in,zeile);
// do something with zeile
}

Môj problém je, že súbor ASCII má viac ako 250 000 000 riadkov. Takže ma zaujíma najefektívnejší spôsob, ako preskočiť 3 riadky. má getline robí nejaký typ analýzy in alebo je to najefektívnejší spôsob? Nechcem strácať čas na preskakovanie.

odpovede:

3 pre odpoveď č. 1

Toto je takmer najúčinnejším spôsobom; jediná "analýza", ktorá sa deje, je hľadanie konca riadku, ktoré potrebujete.

Jediná vec, ktorú by ste mohli vylepšiť, nie je zbytočné ukladanie štyrikrát viac riadkov, ako by ste sa vlastne chystali zvládnuť. std::basic_istream::ignore:

std::ifstream in(inputFile, std::ios::in);
for (int z = 0; in && z < numberOfSequences; z++) {

// Skip three lines
for (int i = 0; i < 3; i++)
in.ignore(std::numeric_limits<std::streamsize>::max(), "n");

// Read the fourth line...
std::string zeile;
if (std::getline(in, zeile))
foo(zeile);
}