我有一个包含数千行的文件,每一行代表一行的一个点。每行的字符数是可变的。我绘制这些线,但我只想绘制每十行。我知道我可以这样做:是否有任何方法可以使用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