Читаю (binary stream) построчно данные из файла. Как узнать на какой строке в файле я нахожусь? То есть проблема в том, что если в прочитанной строчке из файла попадается слово JUMP и указатель, на сколько строк надо "прыгнуть" вниз, надо продолжать считывать данные с указанной строки. То есть ее номер определяется сложением текущего номера строки и числа, на которое надо "прыгать". Как это сделать — узнать номер текущей строки, ну, и как заставить начать программу считывать с определенной строки? Буду очень благодарна, если ответ будет включать код. Спасиб за помощь
Здравствуйте, Аноним, Вы писали:
А>Читаю (binary stream) построчно данные из файла. Как узнать на какой строке в файле я нахожусь? То есть проблема в том, что если в прочитанной строчке из файла попадается слово JUMP и указатель, на сколько строк надо "прыгнуть" вниз, надо продолжать считывать данные с указанной строки. То есть ее номер определяется сложением текущего номера строки и числа, на которое надо "прыгать". Как это сделать — узнать номер текущей строки, ну, и как заставить начать программу считывать с определенной строки? Буду очень благодарна, если ответ будет включать код. Спасиб за помощь
Файл не имеет такого понятия как "текущая строка". Если Вы читаете файл построчно, Вы можете сами следить за текущей строкой
Вы также не можете "прыгнуть", но можете пропустить любое количество прочитанных строк не обрабатывая их. Конечно, этим можно заменить только прыжок вниз, но Вы только об этом и спрашивали.
int nLine = 0;
while(строка прочитана)
{
nLine++;
if(нужно "прыгнуть" на N строк)
{
while(N--)
{
читайте одну строку;
nLine++;
}
}
}
wrote:
> Читаю (binary stream) построчно данные из файла. Как узнать на какой > строке в файле я нахожусь? То есть проблема в том, что если в прочитанной > строчке из файла попадается слово JUMP и указатель, на сколько строк надо > "прыгнуть" вниз, надо продолжать считывать данные с указанной строки. То > есть ее номер определяется сложением текущего номера строки и числа, на > которое надо "прыгать". Как это сделать — узнать номер текущей строки, ну, > и как заставить начать программу считывать с определенной строки? > Буду очень благодарна, если ответ будет включать код. Спасиб за помощь
Смотри boost.Spirit. Там есть position_iterator и file_iterator. Сам недавно
во второй раз уже заюзал. http://www.boost.org/libs/spirit/doc/file_iterator.html http://www.boost.org/libs/spirit/doc/position_iterator.html
--
Александр Насонов,
Независимый консультант и разработчик ПО
adontz wrote:
> Здравствуйте, alnsn, Вы писали: > > A>http://www.boost.org/libs/spirit/doc/file_iterator.html > A>http://www.boost.org/libs/spirit/doc/position_iterator.html > > А насколько это эффективно?
Фик знает. Я сейчас их использую для парсинга языка ASN.1. Особых тормозов
при переходе с std::string::const_iterator на эту связку не заметил. Файлы
у меня правда небольшие — 4000 строк максимум.
--
Александр Насонов,
Независимый консультант и разработчик ПО
Здравствуйте, Аноним, Вы писали:
А>Читаю (binary stream) построчно данные из файла. Как узнать на какой строке в файле я нахожусь? То есть проблема в том, что если в прочитанной строчке из файла попадается слово JUMP и указатель, на сколько строк надо "прыгнуть" вниз, надо продолжать считывать данные с указанной строки. То есть ее номер определяется сложением текущего номера строки и числа, на которое надо "прыгать". Как это сделать — узнать номер текущей строки, ну, и как заставить начать программу считывать с определенной строки? Буду очень благодарна, если ответ будет включать код. Спасиб за помощь
В твоей задаче нет нужды знать номер текущей строки.
Инструкция JUMP сообщает, сколько строк, начиная с текущей нужно пропустить. Берёшь и пропускаешь (считываешь в никуда).
Здравствуйте, alnsn, Вы писали:
A> wrote:
>> Читаю (binary stream) построчно данные из файла. Как узнать на какой >> строке в файле я нахожусь? То есть проблема в том, что если в прочитанной >> строчке из файла попадается слово JUMP и указатель, на сколько строк надо >> "прыгнуть" вниз, надо продолжать считывать данные с указанной строки. То >> есть ее номер определяется сложением текущего номера строки и числа, на >> которое надо "прыгать". Как это сделать — узнать номер текущей строки, ну, >> и как заставить начать программу считывать с определенной строки? >> Буду очень благодарна, если ответ будет включать код. Спасиб за помощь A>Смотри boost.Spirit. Там есть position_iterator и file_iterator. Сам недавно A>во второй раз уже заюзал. A>http://www.boost.org/libs/spirit/doc/file_iterator.html A>http://www.boost.org/libs/spirit/doc/position_iterator.html
Забыл сказать, что их можно использовать только для определения текущей строки.
Там есть функция set_position, но она никуда не прыгает. Если нужно прыгать
только вниз, то достаточно кода, который подсчитывает '\n', а остальное пропускает.
Если и вверх тоже, то придется или запоминать позиции начала всех строк или писать
более сложный подсчет '\n' в обратном порядке (назад на N, считывание N символов,
подсчет '\n' символов, анализ и по результату либо повтор либо конец)