RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Разбиение строки на подстроки


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Improver
To : Aleksey Tarasow
Subj : Разбиение строки на подстроки

> Хочу спросить совета у гуру.
> В подпрограмму передается одна строка (единая строка) в которой может содержаться (или нет) несколько подстрок разделенных запятой. Это все, что знаем о строке. Теперь мне нужно разбить строку на подстроки.
> Пример строки: 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 подстрок по разделителю "запятая", потом проверяешь количество кавычек, скобок и т.д. в первой подстроке, если оно нечётное, то соединяешь со следующей строкой, и так далее по-порядку обрабатываешь все подстроки...

Sat 24 Jan 2015 18:21 Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/2010010




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.