RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Ответить на сообщение
Имя:
e-mail:
FIDO:
Home page:
сохранить данные о вас
Тема:
> > Хочу спросить совета у гуру. > > В подпрограмму передается одна строка (единая строка) в которой может содержаться (или нет) несколько подстрок разделенных запятой. Это все, что знаем о строке. Теперь мне нужно разбить строку на подстроки. > > Пример строки: DateDo="01.01.2011", DateEnd="25.02.2013", ListCode='Pump1 Pump2', Text="220V ON" > > Тут все просто, но что делать если "запятая" окажется внутри подстроки? > > Пример строки: DateDo="01.01.2011", DateEnd="25.02.2013", ListCode='Pump1 Pump2', Text="Что-то не так, как надо" > > Для этого случая принят алгоритм: находим запятую, если до неё в строке четное количество кавычек, считаем запятая ограничивает подстроку, если нечетно, считаем запятая внутри подстроки. > > Опять же работало до момента пока не появилась такая строка: wordpos("tae",User)>0 > > Тут вступают в силу ещё и скобки... > > Сейчас ломаю голову над более менее универсальным алгоритмом разбора строки. Повторим вводные: > > 1. Разделитель подстрок "запятая". > > 2. Возможно наличие как минимум следующих ограничителей: "одинарная кавычка", "двойная кавычка", "обратная кавычка", "(", ")", "{", "}" > > 3. Внутри подстроки есть вероятность встречи ограничителей в любом в любом порядке и без порядке. Например, в качестве куска текста выдернутого из контекста. > > > > Кто подскажет алгоритм для Rexx? > > Разбиваешь исходную строку при помощи parse value на N подстрок по разделителю "запятая", потом проверяешь количество кавычек, скобок и т.д. в первой подстроке, если оно нечётное, то соединяешь со следующей строкой, и так далее по-порядку обрабатываешь все подстроки...
__, _, __, _,_ _, _
|_ / \ |_) | | |\/|
| \ / | \ | | | |
~ ~ ~ ~ `~' ~ ~
Programmed by
Dmitri Maximovich
,
Dmitry I. Platonoff
,
Eugen Kuleshov
.
25.09.99 (c) 1999,
RU/2
. All rights reserved.
Rewritten by
Dmitry Ban
. All rights ignored.