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ď č. 1Toto 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);
}