Форум по Delphi программированию



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.09.2022, 10:27
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 200
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Редактор файла, парсинг и сохранение

доброго времени суток.
Пытаюсь сделать эдитор файла для игры CS 1.6 "CommandMenu.txt".
Сам файл который нужно редактировать выглядит таким образом:
Код:
"1" "ADD ZBOT"
{
     "1" "Quick add zbot"		"bot_add"
     "2" "Set zbot"
     {
               "1" "Easy"		"bot_difficulty 0"
               "2" "Normal"		"bot_difficulty 1"
               "3" "Hard"		"bot_difficulty 2"
               "5" "Expert"		"bot_difficulty 3"
     }
     "3" "Add a specific zbot"
	{
          "1" "Add a terrorist"		"bot_add_t"
          "2" "Add a counter-terrorist"	"bot_add_ct"
     	}
     "4" "add 7x8 team"		"exec addbot.cfg"
}
"2" "ZBOT MISC"
   {
       "1" "Endround"						"bot_kill"
       "2" "Kick all (or 'bot_kick name')"			"bot_kick"
       "3" "ZBot quota"
    {
	"1" "min 12"		"bot_quota 12"
	"2" "min 14"		"bot_quota 14"
	"3" "min 16"		"bot_quota 16"
	"4" "min 18 "		"bot_quota 18"
	"5" "min 20"		"bot_quota 20"
    } 
    ....
    ....
    ....
   }
В игре это меню имеет примерно такой вид:


Во первых, как называется данный язык с блоками?

Мне нужно в программе создать древовидную структуру, и сохранять её как в файле, со скобочками и тд..

Как мне правильнее это сделать? Использовать TreeView, или есть что-то более подходящее?
И как всё таки называется этот язык с блоками?
Ответить с цитированием
  #2  
Старый 12.09.2022, 21:41
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,833
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да нет такого языка. Это что-то специфическое.
В принцпе, не самая сложная структура. Узел дерева либо содержит строку, либо список (я имею в виду 3й параметр).
Да, для отображения лучше использовать что-то вроде TTreeView. Вообще, видел компоненты, реализующие что-то типа TTreeList, т.е. дерево с колонками в итемах. Вроде, TVirtualTreeView позволяет твкое делать, но сам с ним не работал (не нужно было пока).

Сохранять можно просто обходом дерева.
Код:
// Класс с данными, привязанный к TTreeNode.Data
type
  TCommandNode = class
    Number : String;
    Name : String;
    Command : String;
  end;
...
function toString(Node : TTreeNode) : String;
var
  d : TCommandNode;
  i : Integer;
begin
  d := TCommandNode(Node.Data);
  result := Format('"%s" "%s"',[d.Number,d.Name]);
  If (Node.Items.Count = 0 Then
    result := result + Format(' "%s"'#13#10,[d.Command])
  Else
    Begin
      result := result + #13#10 + '{' + #13#10;
      For I := 0 To Node.Items.Count Do
        result := result + toString(Node.Items[i]);
      result := result + '}' + #13#10;
    End;
end;

Как-то так. Не проверял и писал по памяти, но суть должна быть понятна. Параметр вызова - корневой узел дерева. Если из несколько, то надо в цикле перебрать их все и результат объединипть.

Последний раз редактировалось lmikle, 17.09.2022 в 00:34.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Gareth (12.09.2022)
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:25.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2021

ВКонтакте   Facebook   Twitter   Ссылка на Telegram