gifts2017

Разбор строки с тегами

Опубликовал Олег Николаев (o.nikolaev) в раздел Программирование - Теория программирования

Пример разбора строки вида "<ТЕГ атрибут1 = "значение1"  атрибут2="значение2">" с помощью алгоритма конечных автоматов.

Иногда необходимо разбирать текстовые файлы со сложной структурой, в строках которых разделителями являются несколько символов, например пробел и двойные кавычки и т.п. В таких случаях используются конечные автоматы. Выкладываю обработку которая разбирает строку типа "<ТЕГ атрибут1 = "значение1"  атрибут2="значение2">". Код обработки написан по материалам статьи с сайта rsdn.ru.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
РазборСтроки.epf
.1243783122 8,01Kb
25.09.09
151
.1243783122 8,01Kb 151 Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. laview (v7plus) 02.06.09 00:52
Как направление. Преобразование файла xml из вида с атрибутами к иерархической структуре тоже xml.
2. o.nikolaev.infostart (o.nikolaev) 02.06.09 06:45
(1) Спасибо за комменатрий. Трудно сказать. Для работы именно с XML существует куча различных библиотек, в т.ч. и в самой 1С-ине. То что опубликовано здесь - несколько из другой оперы. Т.е. это больше связано с разборами каких-либо сложных строк. Ну например, эта штука использовалась для специальной разметки текстов сценариев калькуляции производственной программы.
sergeante; +1 Ответить
3. sergeante (sergeante) 03.06.09 12:40
Это всё интересно как упражнение для ума. По мне так, если не критична скорость разбора, то проще использовать регэкспры.
4. o.nikolaev.infostart (o.nikolaev) 03.06.09 15:58
(3) Да, регэкспы отличная штука. Просто этот код работает и для следующей строки: "<ТЕГ атрибут1=значение1 атрибут2='значение2' атрибут3="значение2"">".
Я плохо умею составлять регэксп выражения. Какое выражение потребуется для разбора данной строки? Т.е. чтобы можно было получить на выходе функции: имя тега, список атрибутов, список значений атрибутов. Код использующий конечный автомат (несмотря на то чтокому-то кажется страшным это слово) все-же довольно ясный и позволяет быстро добавлять еще каки-либо разделители и т.п. Впрочем, все это ИМХО. Могу сказать что мне эта штука пригодилась в реальной работе. Причем прикрутить регэкспы к этой задаче я быстро не смог. Возможно, пригодится еще кому-нибудь. Собственно потому и выкладываю. :-) Всем удачного кодирования!
5. 1snik (1snik) 04.06.09 09:15
(4) как раз для таких штук регулярные выражения - самое оно. щас освобужусь маленько - напишу, там работы то - 5 минут :) конечные автоматы для более сложных вещей, наверное
6. 1snik (1snik) 04.06.09 22:02
(4) короче, типа так: "<ТЕГ\s+(([а-я0-9]+)\s*=\s*([а-я0-9'"]+)\s*)*>"
это очень грубо и не строго :) в смысле, будет обрабатывать правильные строки, но и некоторые неправильные тоже будет считать правильными :) чтобы точно - неохота запариваться
здесь есть клевая обработка по этой теме
http://infostart.ru/projects/808/
7. o.nikolaev.infostart (o.nikolaev) 05.06.09 07:49
(6) Спасибо. Обязательно посмотрю.
8. Вадим Фролов (Eraser) 22.09.11 10:33
Спасибо за комментарий.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа