Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

разбор строки [D5, Win95/98]


ded_di ©   (2002-04-12 12:11:00) 

Мастера. Ищу хорошую компоненту по разбору строк типа параметр=значение ... параметр=значение и др. Если кто-то занимался и имеет свое мнение, я бы хотел его знать. Спасибо.


Виктор Щербаков   (2002-04-12 13:21:00) [1]

Извиняюсь:
"Программа":
"Выражение" "Программа"
"Выражение":
параметр равно строка.


Виктор Щербаков   (2002-04-12 13:20:00) [2]

Лексемы у тебя такие: строка, параметр, равно.
Далее синтаксис:
"Программа":
"Выражение" "Программа"
"Выражение":
параметр равно выражение.
Вот и всё. Писать полчаса максимум.


Андрей Сенченко   (2002-04-12 13:15:00) [3]

>> ded_di (12.04.02 12:58)
>> задача долгая

Ты уверен ? Я - нет.

Алгоритм в этом случае вырисовывется достаточно простой.

Repeat

1. Ищешь вхождение 1-го " = " в строке
2. Убиваешь после него все пробелы до достижения 1-го " " "
3. Ищешь входждение 1-го " " " начиная с того, что за " = "
4. Сносишь все, что за этими кавычками переносом строки.
5. объявляещь строкой под обработку то, что осталось.

Until EOF


Игорь Шевченко   (2002-04-12 13:11:00) [4]

День добрый,

По-моему, быстрее будет парсер написать, чем спрашивать :-)
Тем более, если можно каждое значение заключить в кавычки и по условию задачи пробелов и кавычек в значениях (по смыслу) быть не должно.
Первым шагом убрать ВСЕ пробелы и переводы строки, после этого каждая четная кавычка будет означать окончание пары Параметр="Значение".

С уважением,


ded_di   (2002-04-12 12:58:00) [5]

Мастера. Еще раз обращаюсь. В примере можно сделать так

Параметр1="значение1" парамеТР2="значение2" Параметр3="
значение3" параметр4
="
зна чение 4" параметр5 = "значение5"

Это можно, потому что после имени параметра идет "=", но такой поиск и последующая замена пробелов переводами строки, если они не в кавычках задача долгая. Я ищу, что-нибудь что будет работать быстро. Кстати имена параметров регистронезависимые.


Виктор Щербаков   (2002-04-12 12:49:00) [6]

Сначала нужно лексику и синтаксис определить, а потом писать простенький (или не очень) парсер.


Anatoly Podgoretsky   (2002-04-12 12:49:00) [7]

У тебя нет ни одной логической зацепки, что бы подобное реализовать, нужны разделители


Андрей Сенченко   (2002-04-12 12:48:00) [8]

Тогда ( на мой взгляд ) эта задача за пределами машинной логики. В приведенном Тобой тексте НЕТ ни одного реального разделителя блоков Параметр=Значение. Нельзя же машине объяснить, что "здесь играть, здесь не играть, а здесь я рыбу заворачивал"


ded_di   (2002-04-12 12:41:00) [9]

Секунду значение 4 параметра равно зна чение 4. Именно так и никак иначе.


Андрей Сенченко   (2002-04-12 12:40:00) [10]

>> DieHard © (12.04.02 12:32)
>> Игорь Шевченко © (12.04.02 12:32)

Идеи не совсем проходят для представленного куска текста.

>> ded_di (12.04.02 12:26)

Если исходный текст выгядит так, как Ты его описал Выше ( то есть пробелы и переносы строки могут быть в любом месте текста, а имена параметров не имеют общего начала ), то ... тяжеловато будет


Игорь Шевченко   (2002-04-12 12:32:00) [11]

День добрый,

Превратить эту строку в список строк вида

Параметр1=значение1
парамеТР2=значение2
Параметр3=значение3
параметр4=значение4
параметр5=значение5

Далее использовать методы TStrings, TStringList

С уважением,



DieHard   (2002-04-12 12:32:00) [12]

замени пробелы на переводы строки и загони в TStringList


ded_di   (2002-04-12 12:26:00) [13]

Уважаемые мастера видимо не поняли моей идеи (или я туговат). Положим есть строка

Параметр1=значение1 парамеТР2=значение2 Параметр3=
значение3 параметр4
=
зна чение 4 параметр5 = "значение5"

Как мне ее разобрать и получать значение по указанию имени параметра? И все таки СПАСИБО.


Александр С..   (2002-04-12 12:16:00) [14]

У TStrings все это имеется


Игорь Шевченко   (2002-04-12 12:15:00) [15]

День добрый,

Компонент называется TStringList

С уважением,


Виктор Щербаков   (2002-04-12 12:13:00) [16]

А нужна ли компонента для этого?
Проще функцией.


IMHO   (2002-04-12 12:12:00) [17]

TIniFile не подойдет ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо