Есть ли способ использовать C ++ Ifstream для чтения в каждой десятой строке? - PullRequest
2 голосов
/ 17 августа 2010

У меня есть файл с тысячами линий, каждая из которых представляет точку линии.Количество символов в каждой строке является переменным.Я строю эти линии, но я хочу построить каждую десятую.Я знаю, что могу сделать что-то вроде:

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

, но мне было интересно, есть ли способ сделать это, не читая все строки между ними.это просто кажется пустой тратой.

Ответы [ 4 ]

3 голосов
/ 17 августа 2010

В общем, нет.Если ваши строки не имеют фиксированной длины или иным образом не содержат каких-либо указаний относительно того, где находятся следующие строки, у вас нет другого выбора, кроме как сканировать файл на наличие новых строк и выбрасывать промежуточные символы.

2 голосов
/ 17 августа 2010

Если вы собираетесь строить график из одного и того же файла несколько раз, вы можете создать индекс, указывающий, где начинается каждая строка, и искать нужные вам линии при построении графика. Вам нужен такой индекс для продвижения вперед на N строк (где N> 1).

Даже если вы создаете индекс, не удивляйтесь, если код будет так же быстр без него (или, возможно, быстрее с ним, но с таким небольшим запасом это не имеет значения). Если ваши строки не очень длинные, очень велики шансы, что (большую часть времени) вы не будете искать за пределами следующей порции данных, которые все равно были бы прочитаны с диска, так что под всем этим вы получите через файл все равно последовательно.

2 голосов
/ 17 августа 2010

Если строки имеют фиксированную длину, вы можете использовать seekg().Иначе нет!Что-то должно пройти через файл, находя символы новой строки.

0 голосов
/ 18 августа 2010

Да.Это просто вопрос вызова File.ignore(MAX_INT, '\n').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...