Возможно кому-то покажется вопрос довольно простым, но я за неимением опыта не знаю как лучше сделать.
Задача распарсить бинарную последовательность (IOList) по определенным правилам. С паттерн матчингом все ясно, т.е. если делать например вот так:
case Data of
<<"msg",Params/binary>> -> {ok,msg,Params}
..
То все нормально происходит, но если например мне нужно вытащить данные из середины, например так: <<"msg",Params/binary,"end">> - то это уже не проходит, т.к. неограниченные длины в матчинге допустимы только в конце.
Ну и если ограничения у меня не длинами, а каким-то разделительными символами, то такой вариант тоже не пойдет (по крайней мере в чистом виде).
Как лучше поступить? обработчик списка, типа parse([H|T],state)-> ... Смотреть каждый байт, сверяться с правилами и в стэйте таскать всякую информацию о текущем ходе парсинга? Или написать например порт на C? (не знаю правда делают так или это не имеет смысла) Или есть еще какие-то встроенные средства о которых стоит знать?
В общем, прошу поделиться "лучшими практиками" в этих вопросах.