LINUX.ORG.RU

Си парсер


0

0
Всем привет. тут задачка у меня, нужно пропарсить одну строку и выловить оттуда значения(которых там может и не быть :)

Строка вида (Nokia_3110,@DI@0001,0001,0038,0000,"PnP Information"@BB@2130e39187142199@BN@d10af332c3006760@BD@00:1f:df:5b:50:56@BP@10
753126@FN@"Nokia 3110c""). Строка может меняться, например может быть такая (@DI@,,,,""@BB@8eb3c35d7f021b50@BN@b013f2965957dbc0@BD@00:0d:41:06:c9:a2@BP@174
299267@FN@"Ма"@
) т.е. телефон не опреден.

Должна использоваться только стандартная библиотека Си.
С Си я не силен :( Может есть у кого примеры парсинга на Си?? Буду рад
любой информации. Спасибо.
Ответ на: комментарий от koTuk
strtok не подходит. В делимитеры могут входить символы которые есть в зачениях :( Получается работает некорректно.
ElectroNik ★★
() автор топика
Ответ на: комментарий от ElectroNik
Обязательно C? Можно на плюсах boost::spirit заюзать.
Delay ★★
()
Опиши формально грамматику и используй flex/bison.
Sectoid ★★★★★
()
Элементарно: пробегаем по строке и внутри кавычек (значений) заменяем легитимные разделители "," на что-нибудь, что заведомо не может входить в значение (например, какой-нибудь управляющий символ); потом парсим с помощью strsep() или strtok(); для каждого пропарсенного значения заменяем контрольные символы обратно на ",".
anonymous
()
Ответ на: комментарий от ElectroNik
а почему нельзя? У меня был zaurus на arm-платформе, там было обычное окружение. Даже mplayer на нём собирал. 80минут и готово :)
true_admin ★★★★★
()
а вообще нету в сети или же в печатных изданиях руководство на Си с примерами парсинга и других операций которые приходится реализовывать стандартными средствами языка? Может видел кто? я б купил. Можно на англицком.
ElectroNik ★★
() автор топика
Ответ на: комментарий от Artem_Korneev
Чуть выше есть упоминания о доступных ресурсах. Влезет в них это? Учитывая, что там кроме парсинга наверняка ещё что-то должно быть.
INFOMAN ★★★★★
()
Ответ на: комментарий от INFOMAN
Чего-то там быть не должно flex+bison генерят Си код. libfl.a весит 7K. Если это много, то свой токенайзер написать вместо flex'а под указанную задачу дело десяти минут.
Reset ★★★★★
()
Ответ на: комментарий от Reset
Кстати можно переопределить yywrap и вообще избавиться от libfl.
Reset ★★★★★
()
Всем спасибо. Изучаю flex+bison
ElectroNik ★★
() автор топика
Ответ на: комментарий от ElectroNik
>strtok не подходит. В делимитеры могут входить символы которые есть в зачениях :( Получается работает некорректно.

>попробую вариант анонимуса.

По вашей строке мне показалось все хорошо делится запятой в качестве делимитера, в любом случае man strtok если до конца просмотреть там даже законченный пример есть как не изобретать велосипед предложенный анонимусом (смотреть на иерархию токенов).

koTuk
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.