Russian Qt Forum
Ноябрь 24, 2024, 05:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 3 4 [5]   Вниз
  Печать  
Автор Тема: Парсинг строк  (Прочитано 32377 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #60 : Март 19, 2016, 15:19 »

Посмотрел пример c комплексными числами - ну вроде понятно. Вот хочу разобраться с номерами строк. Многие текстовики используют "если строка начинается с xxx", тогда парсить по строкам удобнее. Но тут есть мелкая пакость - может быть склейка. В том же obj файле возможен обратный слеш
Цитировать
f  1 2 \
3 4
Это должно парситься так же как и
Цитировать
f  1 2 3 4
Если грузить весь файл, то можно просто скипнуть слеш - но тогда возня с концами строк. Можно сделать извращенный аналог endsWith чтобы подсекать last и заодно заполнять флажок "склейка". Потом парсить след строку. Но тогда придется позаботиться чтобы данные склеенных строк ложились "туда же". Хмм... ну как-то явно не элегантно.

Может есть какое-то "чудесное средство"?
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #61 : Март 19, 2016, 15:53 »

Цитировать
Может есть какое-то "чудесное средство"?
Я, конечно, понимаю, что тема про итераторы - это больное, но..

Но можно, например, реализовать свой istream_iterator, который будет бегать по нескольким разным файлам, как по одному.

Псевдокод:
Код
C++ (Qt)
merge_istream_iterator begin({"file1.obj", "file2.obj", "file3.obj"});
merge_istream_iterator end;
 
qi::phrase_parse(begin, end, *parser, sw::space | '\' >> qi::eof, container);
« Последнее редактирование: Март 19, 2016, 16:04 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #62 : Март 19, 2016, 17:01 »

Но можно, например, реализовать свой istream_iterator, который будет бегать по нескольким разным файлам, как по одному.
Я так понял, что проблема у Igors несколько в другом: все те-же концы строк и их перенос. Улыбающийся
На самом деле этой проблемы у spirit нет. Он сам независимо может считает строки и даже точные символы (для диагностики ошибок), а для реализации переноса строки через обратный слеш, достаточно просто выкусывать его из потока. Это все обсуждалось в теме два года назад.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #63 : Март 19, 2016, 17:47 »

Цитировать
Я так понял, что проблема у Igors несколько в другом: все те-же концы строк и их перенос.
Возможно) Возможно даже, что через пару страниц мы всё же выясним, что он имел в виду) 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #64 : Март 20, 2016, 11:32 »

Возможно) Возможно даже, что через пару страниц мы всё же выясним, что он имел в виду) 
Почему до Вас все так трудно доходит? Я хочу просто-напросто читать файл по строкам. Прочитал строку - разобрал, читаю следующую и.т.д. Это выгодно с многих точек зрения. В конце-концов "текстовый файл" означает "разбит на строки". Но что тогда делать со склейкой?

На самом деле этой проблемы у spirit нет. Он сам независимо может считает строки и даже точные символы (для диагностики ошибок), а для реализации переноса строки через обратный слеш, достаточно просто выкусывать его из потока.
Грузить весь файл целиком не смотрится хорошо. Файл может быть велик, да и обновление UI и отмену придется тащить в недра парсера, где еще придется возиться с концами строк.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #65 : Март 20, 2016, 13:15 »

Я хочу просто-напросто читать файл по строкам.
Нет никакой необходимости, читать файл по строкам, особенно в форматах, где команды могут быть многострочными.

Грузить весь файл целиком не смотрится хорошо. Файл может быть велик
Смешались в кучу кони люди...
Как соотносится spirit и чтение файла целиком?
Не читайте целиком. А Spirit с файлами не работает вообще, он работает с итераторами (уж простите что их упоминаю).

да и обновление UI и отмену придется тащить в недра парсера, где еще придется возиться с концами строк.
Не придется ничего никуда тащить, тем более обрабатывать концы строк самому. Улыбающийся
Записан
Страниц: 1 ... 3 4 [5]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.214 секунд. Запросов: 23.