Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Анализ данных из текстового файла

39K
31 июля 2008 года
transtream
9 / / 30.07.2008
Доброго времени суток! У меня проблемка - никак не могу разобрать по полкам данные из текстового файла!
Вообщем в TStringList'e есть текст из этого файла такого типа:
 
Код:
Запись ( N
           Подзапись ( 1
                            Подзапись ( Значение1 ... ЗначениеK )
                          )
           ...
           Подзапись ( N
                            Подзапись ( Значение1 ... ЗначениеK )
                          )
         )


Этих "N" может до черта!! "K" тоже довольно много, но это не суть, мне надо получить Запись, Подзаписи и их значения, причем подзаписи могут быть разных типов, от типа зависит количество значений и т.п.
Сначала думал разбирать все построчно, но потом отбросил потому что, если делать построчно то, там со скобками проблема (где начинается Запись, где заканчивается), если смотреть на все это, как на одну большую строку, то тут у меня вообще голова кругом идет! Думал через Pos, Copy и т.п. тоже запоролся, Pos('Подзапись', StringList.Text) даст мне начало первой Подзаписи, а до второй мне уже не добраться, как то обрезать текст, искать дальше чтоли, вообщем у меня туман щас в голове да и опыта маловато (особенно в работе с текстом), может у кого нить есть какие нибудь мысли, помогите пожалуйста!
14
31 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Это сильно смахивает на дерево?
Тогда и работать с данными надо как с деревом - рекурсивно лучше
39K
31 июля 2008 года
transtream
9 / / 30.07.2008
Ну что это дерево, я сразу понял,но хотел своими руками все парсить,а оказывается VCL все уже умеет, загрузил файл в TreeView, там все уже готово! Но использование TreeView - не выход...
261
01 августа 2008 года
ahilles
1.5K / / 03.11.2005
Цитата: transtream
Но использование TreeView - не выход...


почему это не выход? или ты думаешь что этот парсер напишет кто-нибудь за тебя?

14
01 августа 2008 года
Phodopus
3.3K / / 19.06.2008
Ну скопипасть код из ComCtrls.TTreeStrings.LoadTreeFromStream и пользуй его :)
39K
01 августа 2008 года
transtream
9 / / 30.07.2008
Дело то в том, что TreeView загружает этот файл относительно отступов (удалил отступ - на запись выше, добавил - ниже..). Программа, которая пишет этот файл, читает его с отступами точно так же, как и без них (не зря же скобки есть), но это еще бог с ним, число значений в подзаписях может быть довольно большим (свыше 1000), причем значения не всегда целые, вообщем символов там много много, и TreeView в таких случаях выдает ошибку и не может записать все в одну запись...
14
01 августа 2008 года
Phodopus
3.3K / / 19.06.2008
Тогда точно возьми код TreeView-а за основу!
39K
01 августа 2008 года
transtream
9 / / 30.07.2008
ну да, тут два варианта, либо писать свои парсер, либо брать за основу TreeView, но надеяться что пользователь не залезет в файл и не собъет всю структуру дерева, попробую с TreeView помучиться, если что обращусь с надеждой на помощь:)
1.7K
26 августа 2008 года
alektrik
140 / / 16.01.2006
извнияюсь, что поздно... просто случайно наткнулся на эту тему и не смог не ответить... =))
думаю само правильно будет использовать Regex'ы (Регулярные выражения) (если они есть в делфи) ;-)
39K
26 августа 2008 года
transtream
9 / / 30.07.2008
хех.. случайно оказался здесь тоже...
регулярные выражения в delphi по моему как-то можно использовать, но на сколько мне известно на php они работают медленнее строковых функций, а мне скорость нужна!

Да и потом я эту проблему уже решил - создал тип(как у дерева) и функции, которые потихоньку парсят все это добро и запихивают в переменную этого типа!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог