Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2013, 01:34   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Сообщение Разобрать файл. Дерево записанное в одну линию.

Доброго времени суток!

Пытаюсь разобрать текстовый файл. В файле записано бездонное древовидное нечто.
Это древовидная структура, записана в один столбец. В реалии оно выглядит так:
Код:
Элемент 1
Элемент 2
Группа 1
 - Элемент 1
 - Элемент 2
 - Под-Группа 1
 - - Элемент 1
 - - Элемент 2
Группа 2
 - Элемент 1
 - Элемент 2
 - Под-Группа 1
 - - Элемент 1
 - - Элемент 2
 - - - Под-Группа 1
 - - - - Элемент 1
 - - - - Элемент 2
Элемент 3
...
Группы могут содержать другие группы, и элементы. Очевидно, да.

В файле записано сплошным текстом, в вырвиглазном формате:
Код:
Элемент 1
Элемент 2
Группа 1
Элемент 1
Элемент 2
Под-Группа 1
Элемент 1
Элемент 2
Группа 2
Элемент 1
Элемент 2
Под-Группа 1
Элемент 1
Элемент 2
Под-Группа 1
Элемент 1
Элемент 2
Элемент 3
Элемент записывается как:
Код:
#ITEM
<Табулятор>Имя=Значение
<Табулятор>Имя=Значение
<Табулятор>Имя=Значение
...тысячи их
<Пустая строка - признак конца записи параметров>
Группа записывается так(Группа 1):
Код:
#GROUP
<Табулятор>Имя=Значение
<Табулятор>Имя=Значение
<Табулятор>Имя=Значение
...тысячи их
<Пустая строка - признак конца записи параметров>

<Элемент 1>

<Элемент 2>

...

<Элемент x>
<Пустая строка>
]
<Пустая строка>
2 строки выше - признак конца группы 1
Итого, вырвиглазный формат файла описывает некое бездонное дерево:
Код:
#ITEM
<Табулятор>Name=Группа 0 - Элемент 1

#ITEM
<Табулятор>Name=Группа 0 - Элемент 2

#GROUP
<Табулятор>Name=Группа 1

#ITEM
<Табулятор>Name=Группа 1 - Элемент 1

#ITEM
<Табулятор>Name=Группа 1 - Элемент 2

#GROUP
<Табулятор>Name=Группа 1/Группа 2

#ITEM
<Табулятор>Name=Группа 1/Группа 2 - Элемент 1

#ITEM
<Табулятор>Name=Группа 1/Группа 2 - Элемент 2

] //Конец подгруппы 2 в подгруппе 1

#ITEM
<Табулятор>Name=Группа 1 - Элемент 3

] //Конец подгруппы 1 в группе 0

#ITEM
<Табулятор>Name=Группа 0 - Элемент 3
А выглядеть должно оно так:
Код:
Элемент 1
Элемент 2
Группа 1
 - Элемент 1
 - Элемент 2
 - Под-Группа 2
 - - Элемент 1
 - - Элемент 2
 -  Элемент 3
Элемент 3

Есть какие-нибудь идеи, как это разобрать?

Последний раз редактировалось Человек_Борща; 08.11.2013 в 01:38.
Человек_Борща вне форума Ответить с цитированием
Старый 08.11.2013, 06:10   #2
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
По умолчанию

Примерно набросал как можно попробовать решить
Код:
procedure ReadGroup(s);
 begin
 if s='#GROUP' then
  begin
   readln(s);
   // парсер s чтобы выделить n=Name
   if pos(n,lastn)>0 then // если в имени группы содержиться имя предедущей группы, то значит это подгруппа
    begin
     readln(s);
     if s='#ITEM' then
      begin
       readln(s);
       // читаем и парсим имены элементов c добавлением в массив подгруппы
       // когда встретим s='#GROUP' то вызываем процедуру заново
      end;
     //
    end else 
    begin
     lastn=n;// значит у нас корневая группа
     readln(s);
     if s='#ITEM' then
      begin
       readln(s);
       // читаем и парсим имены элементов c добавлением в массив группы
       // когда встретим s='#GROUP' то вызываем процедуру заново
      end; 
    end;
 end;
  
begin
readln(s);
ReadGroup(s);
end.
Simply-Art вне форума Ответить с цитированием
Старый 08.11.2013, 15:10   #3
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Надеюсь, разбор нужно не на bat-файлах сделать? В чем проблема вообще? В какую структуру (класс, контейнер) читать нужно?

А сам формат мне напомнил файл закладок браузера Opera.
Vapaamies вне форума Ответить с цитированием
Старый 08.11.2013, 15:47   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Надеюсь, разбор нужно не на bat-файлах сделать?
нет
Цитата:
В чем проблема вообще?
Разобрать в дерево(JSON, VirtualTree)
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разобрать,отредактировать и собрать обратно exe файл. Sintez_ice Помощь студентам 13 14.11.2012 20:46
Сериализация: как прочитать записанное(С#) GreatTalker Помощь студентам 0 08.04.2012 20:02
Как с файла XML картинки из формата svg , разобрать этот файл и вывести на форму djKeysi C# (си шарп) 2 08.12.2011 12:36
Нужно разобрать файл прошивки Android cyku77 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 29.09.2011 22:48
записанное в Edit сохранить после закрытия IVANSour Общие вопросы Delphi 6 21.01.2009 03:33