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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2012, 18:29   #1
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
Вопрос Вопрос по ини файлу, Несколько одинаковых ключей в одной секц

Доброе время суток!
Проблема такая, есть ини файл к примеру вот его содержание:
PHP код:
[ATSniper]
Score 2
House 
Atreides
StormDamage
=74    
PrimaryBuilding 
ATBarracks
UnitGroup 
FromBarracks
Terrain 
RockSandNBRockInfRockRamp
Cost 
150
BuildTime 
99
Size 
1
Speed 
6.0                        
TurretAttach 
ATSniperGun 
TurnRate 
0.2                    
Armour 
None50InfRock
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 
Возможно ли
разделить и загрузить напремер:
PHP код:
значения ключа  LEVEL 1 VeterancyLevel  в едит 1 
значения ключа  LEVEL 2 VeterancyLevel  в едит 2 
значения ключа  LEVEL 3 VeterancyLevel  в едит 3 
Зарание благодарю!
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 08.12.2012, 18:32   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Загрузить в StringList и пропарсить самостоятельно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.12.2012, 19:30   #3
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Пример можно чегото не пойму как цикл здесь создать именно в секции(
там секций более сотни!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 08.12.2012, 20:10   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Очень упрощенно и на скорую руку
Код:
var xList: TStringList;
    i,j,k: Integer;
    s: String;
begin
  xList:=TStringList.Create;
  xList.LoadFromFile('e:\MyIni.ini');
  j:=xList.IndexOf('[ATSniper]');
  if j>=0 then begin
    k:=0;
    for i:=j+1 to xList.Count-1 do begin
      s:=Trim(xList.Strings[i]);
      if Copy(s,1,1)='[' then Break;
      if Pos('VeterancyLevel',s)=1 then begin
        s:=Trim(StringReplace(s,'VeterancyLevel','',[]));
        if Copy(s,1,1)='=' then begin
          s:=Trim(StringReplace(s,'=','',[]));
          Inc(k);
          case k of
          1: Edit1.Text:=s;
          2: Edit2.Text:=s;
          3: Edit3.Text:=s;
          end;
          if k=3 then Break;
        end;
      end;
    end;
  end;
  xList.Free;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.12.2012, 20:15   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

Ана секции разбить совсем, не?
[SectionName_Edit1] или [SectionName_Edit2] и т.д.
Человек_Борща вне форума Ответить с цитированием
Старый 28.12.2012, 03:49   #6
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Аватар спасибо!
Цитата:
Ана секции разбить совсем, не?
[SectionName_Edit1] или [SectionName_Edit2] и т.д.
Нет этот файл Не я создаю я его редактирую.
Если бы можно было было бы супер )
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 28.12.2012, 10:27   #7
WhiskasTM
Подтвердите свой е-майл
 
Регистрация: 11.04.2012
Сообщений: 85
По умолчанию

Тоже самое было, особенно в игрушках, инишки там бескомпромиссные аля 25 значений в одном ключе, повторы имен секций ключей и невесть чего ещё.

Сделал давно свой трейсер, но щас он как-то уже устарел смотрю, на стринлистах, с глобальными недоработками по записи и кривым чтением Н-ого значения Value (сепаратор запятая). Юзать можно, но надо с нуля делать + на хэшах.

Выдержка:
Код:
SectionIndex:array of Integer;
KeyIndex:array of Integer;
procedure GetSectionIndex(const section:string);
procedure GetKeyIndex(sectionid:Integer; const key:string);
    function ReadString(const section,key:string):string;overload;
    function ReadString(sectionid:integer; const key:string):string;overload;
    function ReadString(sectionid,keyid:Integer):string;overload;
    function ReadString(const section:string; keyid:Integer):string;overload;
Типа так:
Код:
var
ini:TExINI;
i,j:integer;
begin
ini:=TExINI.Create('123.ini');
for i:=0 to ini.SectionCount('ATSniper')-1 do
    for j := 0 to ini.KeyMaskCount(ini.SectionIndex[i],'VeterancyLevel')-1 do
     begin
      ShowMessage(ini.ReadString(ini.SectionIndex[i],ini.KeyIndex[j]));
     end;
end;
Может понравиться)
Вложения
Тип файла: zip ExIniFiles.zip (5.0 Кб, 14 просмотров)
WhiskasTM вне форума Ответить с цитированием
Старый 28.12.2012, 15:57   #8
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

WhiskasTM, спасибо, буду разбираться!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 29.12.2012, 01:09   #9
WhiskasTM
Подтвердите свой е-майл
 
Регистрация: 11.04.2012
Сообщений: 85
По умолчанию

Карт-бланш!
Походу мне одному нечем было заняться...

Знаки табуляции и пробелов в мультизначениях удалятся только если переписать их, незачем ещё их парсить. Камменты и инвалидные ключи не сохраняются.

Код:
[section]
cat = Fat
name = Barsik, Mokry, Pernaty
MultiIntValue = 66, 98, 52, 61

[section]
cat = Fat
name = Koshka, Sobaka
name = Kot, Klop
name = Kepler
name = Kepler2
name = 

[section]
cat = Fat
name = double,bool,boolsheet
name = alone
name = 
name = 

[section]
Код:
procedure TForm3.FormCreate(Sender: TObject);
var
i,j,k,G:integer;
ini:TExINI;
begin
 ini:=TExINI.Create('123.ini');
 for i := 0 to ini.SectionWKCount('section',['cat','name'])-1 do //get pointers to only those sections that contain these keys
   begin
   with ListView1.Groups.Add do
   begin
   GroupID:=i;
   State:=[lgsCollapsible,lgsCollapsed];
   Header:=ini.ReadStr(ini.SectionWKIndex[i],'cat');
   end;
   for j := 0 to ini.KeyCount(ini.SectionWKIndex[i],'name')-1 do
     for k := 1 to ini.ValueCount(ini.SectionWKIndex[i],'name')+1 do
      if ini.ReadStrW(ini.SectionWKIndex[i],ini.KeyIndex[j],k)<>'' then
        with ListView1.Items.Add do
        begin
        GroupID:=i;
        Caption:=ini.ReadStrW(ini.SectionWKIndex[i],ini.KeyIndex[j],k);
      end;
   end  ;

 for i := 0 to ini.SectionCount('section')-1 do
   for j := 1 to 4 do
     with ini do
     begin
     WriteIntW(SectionIndex[i],'MultiIntValue',Random(100),j);
     end;
 ini.UpdateFile;
 ini.Free;
 end;
Банально конечно, но нету вот такого дебажного ини-ридера.
зы
Всего 112 методов записи/чтения. Завершен на 99%, остальное баги, если есть, пустяковые))
Вложения
Тип файла: zip ExIni.zip (5.6 Кб, 15 просмотров)
WhiskasTM вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
1) как перетащить несколько модулей с одной книги на другую одним скопом? 2)можно ли открыть несколько книг сразу? БАХТИ Microsoft Office Excel 17 26.09.2011 18:11
Как вывести несколько одинаковых форм одновременно k1r1ch Общие вопросы Delphi 11 22.08.2009 18:07
Требуется программным путём считать несколько ключей с реестра из одного раздела. Air Общие вопросы Delphi 6 11.09.2008 11:33
Выделение одной строки из двух одинаковых REMove Microsoft Office Excel 2 15.12.2007 16:03