Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Вопрос по ини файлу


Автор: Volkogriz 8.12.2012, 07:22
Доброе время суток!
Проблема такая, есть ини файл к примеру вот его содержание:

Код

[ATSniper]
Score = 2
House = Atreides
StormDamage=74    
PrimaryBuilding = ATBarracks
UnitGroup = FromBarracks
Terrain = Rock, Sand, NBRock, InfRock, Ramp
Cost = 150
BuildTime = 99
Size = 1
Speed = 6.0                        
TurretAttach = ATSniperGun 
TurnRate = 0.2                    
Armour = None, 50, InfRock
Health = 600
Infantry = true
CanBeSuppressed = TRUE
//SoundSelected = Selected
//SoundOrdered = Ordered
//SoundID = 6
ViewRange = 15
AiFoot = TRUE
TechLevel = 2
ReinforcementValue = 2
Crushable = TRUE
ChaosEffect = SmallChaosFX
HawkEffect = SmallHawkFX
TastyToWorms = TRUE
WormAttraction = 3
CanMoveAnyDirection = TRUE
CanBeDeviated = FALSE
CanBeRepaired = FALSE
AIThreat = 30
//Вот отсюда начинаются пробламмы
// LEVEL 1 ----------------------------------
VeterancyLevel = 4        
ExtraArmour = 50

// LEVEL 2 ----------------------------------
VeterancyLevel = 12
CanSelfRepair = 1

// LEVEL 3 ----------------------------------
VeterancyLevel = 30
Elite = TRUE
StealthedWhenStill = TRUE

Возможно ли 
разделить и загрузить напремер
Код

значения ключа  LEVEL 1 VeterancyLevel  в едит 1 
значения ключа  LEVEL 2 VeterancyLevel  в едит 2 
значения ключа  LEVEL 3 VeterancyLevel  в едит 3 


Зарание благодарю!
С уважением,
Volkogriz!

Автор: ZBugz 8.12.2012, 07:41
Можно smile
В цикл загони и грузи и сохраняй

Автор: Volkogriz 8.12.2012, 07:58
Пример можно чегото не пойму как цикл здесь создать именно в секции(

Автор: ZBugz 8.12.2012, 21:03
Цитата(Volkogriz @ 8.12.2012,  07:58)
Пример можно чегото не пойму как цикл здесь создать именно в секции(

Пример не скажу, delphi of нету, нео вот кусок кода.
Т.е. колличество секций ты всегда получишь Ini.ReadSections и загонишь TSringList 
Код

procedure TMainForm.LoadTask(F: WideString);
Var
 I: Integer;
 SL: TStringList;
 Li: TListItem;
Begin
 Try
  OpenIniFile(F);
   SL := TStringList.Create;
    Ini.ReadSections(SL);
     if SL.Count > 0 then
      for I := 0 to SL.Count - 1 do


Ну а далее, зная колличество секций, читай их в цикле и заполняй данные

Автор: northener 9.12.2012, 00:43
Цитата

Несколько одинаковых ключей в одной секции "ини файла"

- мягко говоря очень неудачная идея. Так как такой файл перестаёт быть "ини файлом". Ибо к этим ключам неприменимы стандартные методы класса TIniFile (ReadXXX, WriteXXX, DeleteKey). Так зачем тогда использовать именно "ини файл" для хранения данной информации? Не лучше ли придумать собственную структуру файла для записи и чтения этих данных?

Ну а если всё же хочется использовать TIniFile (ну или его аналог для рабты с реестром TRegIniFile), то что мешает создать секции с именами "LEVEL 1", "LEVEL 2", "LEVEL 3" и т.д.?

Автор: Volkogriz 9.12.2012, 08:22
Спасибо ZBugz!
Дело в том что файл не мой а игравой,
там таких секций больше сотни, 
и кроме этой одной проблеммы больше пака не возникло проблем)

Автор: ZBugz 9.12.2012, 09:08
Цитата(Volkogriz @ 9.12.2012,  08:22)
Спасибо ZBugz!
Дело в том что файл не мой а игравой,
там таких секций больше сотни, 
и кроме этой одной проблеммы больше пака не возникло проблем)

Пожалуйста. 
В твоем случае даже удобно будет так написать. 
Тот пример, что я привел выше, это кусок кода в котором я сохраняю строки TListView и значения колонок
Т.е. Строка это секция, а ключи это столбцы. Ключи кстати тоже в цикле читаю. В итоге хоть 10000 записей пиши, все быстро работает. 

Автор: Volkogriz 9.12.2012, 09:32
Попробую, ещё раз благодарю!

Автор: fatalcs 22.12.2012, 10:18
Не создавайте лишние пробемы. Это не INI-файл. И TIniFile использовать тут не нужно. Грузите всё это в TStringList и парсите файл построчно.

Автор: superVad 22.12.2012, 16:18
Цитата(fatalcs @  22.12.2012,  09:18 Найти цитируемый пост)
Не создавайте лишние пробемы. Это не INI-файл. И TIniFile использовать тут не нужно. Грузите всё это в TStringList и парсите файл построчно.

Чего там парсить. Поставить NameValueSeparator := '=' и обращаться по Names, Values обращаться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)