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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.