2010-08-16 67 views
2

我有一個包含數千行的文件,每一行代表一行的一個點。每行的字符數是可變的。我繪製這些線,但我只想繪製每十行。我知道我可以這樣做:是否有任何方法可以使用C++ ifstream在每第十行讀取?

for (int k = 0; k < 9; k++) { 
    File.getline(buf, 1024); 
} 

,但我想知道是否有辦法做到這一點,而不在之間的所有行讀取。 這似乎是一種浪費。

+2

Noooo。使用返回std :: string的getline()版本。 – MSalters 2010-08-18 11:00:00

回答

3

一般來說,沒有。除非你的線條是固定的長度,否則在下一行的地方有一些提示,你別無選擇,只能掃描文件換行並丟棄中間字符。

+0

並按行「每行的字符數量是可變的」,我會猜測它們不是固定長度的。我只是有點心靈。 – Stephen 2010-08-16 21:39:49

+0

當然,我只是指出,如果這個限制放鬆了,它會是一個不同的故事:) – 2010-08-16 21:40:39

+0

好的。好吧,沒什麼大不了的。我確定它不會太慢。謝謝! – Ben313 2010-08-16 21:49:40

2

如果線條的長度是固定的,那麼您可以使用seekg()。否則,不!必須通過查找換行符的文件。

2

如果您打算從同一個文件多次繪圖,您可以建立一個索引,告訴每行開始的位置,並在繪圖時尋找所需的行。你需要這樣一個索引來前進N行(其中N> 1)。

即使您確實建立了索引,如果沒有它的代碼也是一樣快的(或者可能它的速度更快,但這麼小的空白並不重要),請不要感到驚訝。除非你的線路相當長,否則很可能(大部分時間)你不會尋求超出從磁盤讀取的下一塊數據,所以最終你會讀到無論如何依次通過文件。

0

是的。這只是要求撥打File.ignore(MAX_INT, '\n')

相關問題