Скакать по строчкам
От: Аноним  
Дата: 06.04.04 18:12
Оценка:
Читаю (binary stream) построчно данные из файла. Как узнать на какой строке в файле я нахожусь? То есть проблема в том, что если в прочитанной строчке из файла попадается слово JUMP и указатель, на сколько строк надо "прыгнуть" вниз, надо продолжать считывать данные с указанной строки. То есть ее номер определяется сложением текущего номера строки и числа, на которое надо "прыгать". Как это сделать — узнать номер текущей строки, ну, и как заставить начать программу считывать с определенной строки? Буду очень благодарна, если ответ будет включать код. Спасиб за помощь
Re: Скакать по строчкам
От: VladFein США  
Дата: 06.04.04 18:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Читаю (binary stream) построчно данные из файла. Как узнать на какой строке в файле я нахожусь? То есть проблема в том, что если в прочитанной строчке из файла попадается слово JUMP и указатель, на сколько строк надо "прыгнуть" вниз, надо продолжать считывать данные с указанной строки. То есть ее номер определяется сложением текущего номера строки и числа, на которое надо "прыгать". Как это сделать — узнать номер текущей строки, ну, и как заставить начать программу считывать с определенной строки? Буду очень благодарна, если ответ будет включать код. Спасиб за помощь


Файл не имеет такого понятия как "текущая строка". Если Вы читаете файл построчно, Вы можете сами следить за текущей строкой
Вы также не можете "прыгнуть", но можете пропустить любое количество прочитанных строк не обрабатывая их. Конечно, этим можно заменить только прыжок вниз, но Вы только об этом и спрашивали.
int nLine = 0;
while(строка прочитана)
{
  nLine++;
  if(нужно "прыгнуть" на N строк)
  {
    while(N--)
    {
      читайте одну строку;
      nLine++;
    }
  }
}
Re: Скакать по строчкам
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 06.04.04 19:59
Оценка: 16 (1)
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
--
Александр Насонов,
Независимый консультант и разработчик ПО
Posted via RSDN NNTP Server 1.8 beta
Re[2]: Скакать по строчкам
От: adontz Грузия http://adontz.wordpress.com/
Дата: 06.04.04 20:59
Оценка:
Здравствуйте, alnsn, Вы писали:

A>http://www.boost.org/libs/spirit/doc/file_iterator.html

A>http://www.boost.org/libs/spirit/doc/position_iterator.html

А насколько это эффективно?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Скакать по строчкам
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 07.04.04 06:27
Оценка:
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 строк максимум.
--
Александр Насонов,
Независимый консультант и разработчик ПО
Posted via RSDN NNTP Server 1.8 beta
Re: Скакать по строчкам
От: Кодт Россия  
Дата: 07.04.04 07:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Читаю (binary stream) построчно данные из файла. Как узнать на какой строке в файле я нахожусь? То есть проблема в том, что если в прочитанной строчке из файла попадается слово JUMP и указатель, на сколько строк надо "прыгнуть" вниз, надо продолжать считывать данные с указанной строки. То есть ее номер определяется сложением текущего номера строки и числа, на которое надо "прыгать". Как это сделать — узнать номер текущей строки, ну, и как заставить начать программу считывать с определенной строки? Буду очень благодарна, если ответ будет включать код. Спасиб за помощь


В твоей задаче нет нужды знать номер текущей строки.
Инструкция JUMP сообщает, сколько строк, начиная с текущей нужно пропустить. Берёшь и пропускаешь (считываешь в никуда).
Перекуём баги на фичи!
Re[2]: Скакать по строчкам
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 07.04.04 08:05
Оценка:
Здравствуйте, 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' символов, анализ и по результату либо повтор либо конец)
Re[3]: Скакать по строчкам
От: Юнусов Булат Россия  
Дата: 07.04.04 08:35
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, alnsn, Вы писали:


A>>http://www.boost.org/libs/spirit/doc/file_iterator.html

A>>http://www.boost.org/libs/spirit/doc/position_iterator.html

A>А насколько это эффективно?


Быстрее чем стандартные плюсовые потоки (в той задаче во всяком случае оказалось так)
http://www.rsdn.ru/Forum/Message.aspx?mid=220743
Автор:
Дата: 21.03.03
Re[2]: Скакать по строчкам
От: Blitz Великобритания  
Дата: 07.04.04 09:40
Оценка:
Спасибо всем большое, все получилось. С итераторами попозжее разберусь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.