2010-08-16 72 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')

相关问题