我有一個包含數千行的文件,每一行代表一行的一個點。每行的字符數是可變的。我繪製這些線,但我只想繪製每十行。我知道我可以這樣做:是否有任何方法可以使用C++ ifstream在每第十行讀取?
for (int k = 0; k < 9; k++) {
File.getline(buf, 1024);
}
,但我想知道是否有辦法做到這一點,而不在之間的所有行讀取。 這似乎是一種浪費。
我有一個包含數千行的文件,每一行代表一行的一個點。每行的字符數是可變的。我繪製這些線,但我只想繪製每十行。我知道我可以這樣做:是否有任何方法可以使用C++ ifstream在每第十行讀取?
for (int k = 0; k < 9; k++) {
File.getline(buf, 1024);
}
,但我想知道是否有辦法做到這一點,而不在之間的所有行讀取。 這似乎是一種浪費。
如果線條的長度是固定的,那麼您可以使用seekg()
。否則,不!必須通過查找換行符的文件。
如果您打算從同一個文件多次繪圖,您可以建立一個索引,告訴每行開始的位置,並在繪圖時尋找所需的行。你需要這樣一個索引來前進N行(其中N> 1)。
即使您確實建立了索引,如果沒有它的代碼也是一樣快的(或者可能它的速度更快,但這麼小的空白並不重要),請不要感到驚訝。除非你的線路相當長,否則很可能(大部分時間)你不會尋求超出從磁盤讀取的下一塊數據,所以最終你會讀到無論如何依次通過文件。
是的。這只是要求撥打File.ignore(MAX_INT, '\n')
。
Noooo。使用返回std :: string的getline()版本。 – MSalters 2010-08-18 11:00:00