|
0 / 0 / 0
Регистрация: 14.09.2014
Сообщений: 3
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Boost::Spirit. Разбор конфигурационного файла14.09.2014, 16:16. Показов 1690. Ответов 1
Метки нет (Все метки)
Есть конфигурационный файл, содержащий текстовое описание данных.
Каждая запись конфигурационного файла состоит из полей. Формальное описание:
Пробел или перевод на новую строку может быть в любом месте записи:
Структурные поля имеют произвольный порядок следования, не все поля могут присутствовать, например:
Внутри списка последовательность полей имеет семантическую значимость, то есть первая точка имеет координаты -POSX 100 -POSY 100 -POSZ 300, а вторая -POSX 200 -POSY 200. Каждая запись имеет обязательный ключ (TYPE), который определяет возможные поля, которые могут присутствовать, например:
надо пропускать все последующие символы до следующего известного "-ключ значение". При встрече неизвестного ключа внутри списка надо пропустить все символы, включая -END ключ. Подскажите пожалуйста шаблон разбора подобных файлов с помощью Boost::Spirit. Добавлено через 10 часов 44 минуты Вопрос попроще. Пытаюсь адаптировать под свои нужды boost/libs/spirit/repository/example/qi/keywords.cpp В нем из заданной строки формируется структура:
знак равенства и в параметре size удалил окончание 'm'. Кроме того, разбор строки
заменил на свой вариант
Вызываю разбор строки:
А вот если ставлю на первое место параметр name, то происходит ошибка:
но не остановился на первом пробеле, а прошел до конца строки. В результате другие параметры не получили значений. Пробую в качестве ограничителя имени поставить символ 'l':
По идее все правильно: разбор имени закончился как только встретился первый символ 'l', а остальные параметры не разобраны, потому что встретился второй символ 'l'. Меняю вызов:
Не тут-то было, результат аналогичен предыдущему:
Но у меня-то параметры разделяет пробел, а не 'l'. -------- Собственно вопрос один: где я напутал в правиле разбора строки {my_parse_string %= +(char_-' ')} ? Чувствую, что ответ простой, но я - новичок и похоже еще не знаю самых элементарных вещей. Если это имеет значение, использую Boost 1.56.0, Mingw 4.6. Пробовал Mingw 4.8: при компиляции выдал кучу предупреждений, при выполнении выдал ошибку, но самое существенное я успел углядеть - пробел в правиле разбора строки так же не воспринимается.
0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 14.09.2014, 16:16 | |
|
Ответы с готовыми решениями:
1
Метапрограммирование в boost::proto (boost::spirit)
Производительность boost::spirit::qi |
|
0 / 0 / 0
Регистрация: 14.09.2014
Сообщений: 3
|
|
| 17.09.2014, 05:57 [ТС] | |
|
Переход на нанотехнологии не состоялся. Вернулся к сохе и топору.
Применение пары вложенных хэш-таблиц решило все проблемы. Вопрос закрыт. Всем спасибо.
0
|
|
| 17.09.2014, 05:57 | |
|
Помогаю со студенческими работами здесь
2
Чтение и сохранение данных из конфигурационного файла Размер конфигурационного файла MD Создание конфигурационного файла Защита конфигурационного файла backup конфигурационного файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|