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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2010, 13:36   #1
JoLan
Delphi XE7
Пользователь
 
Аватар для JoLan
 
Регистрация: 26.07.2010
Сообщений: 74
По умолчанию Чтение и вывод ini-файла

Добрый день. Есть ini-файл такого содержания:
Код:
[Bowmaster]
Sum1=200000
Name1=Neron
[Warrior]
Sum1=200000
Name1=Belum
[Mage]
Sum1=200000
Name1=kirdan
[Priest]
Sum1=200000
Name1=Вжик
[Werewolf]
Sum1=200000
Name1=Зак
Sum2=200000
Name2=Тестчо
[Druid]
Sum1=200000
Name1=Suffocate
Задача: посчитать в каждой секции кол-во народа и дописать соответствующее число к классу. Мой вариант кода:
Код:
procedure TForm1.sRadioGroup1Click(Sender: TObject);
const a:array[0..5]of string=('Воин','Маг','Лучник','Жрец','Оборотень','Друид');
    b:array[1..6]of string=('Warrior','Mage','Bowmaster','Priest','Werewolf','Druid');
var k1,i1,i2:integer;
    s:string;
begin
StringGrid1.RowCount:=2;
StringGrid1.Cells[0,1]:='';
StringGrid1.Cells[1,1]:='';
JIni:=TiniFile.Create(extractfilepath(Application.ExeName)+'judges.ini');
case sRadioGroup1.ItemIndex of
    0:s:='Warrior';
    1:s:='Mage';
    2:s:='Bowmaster';
    3:s:='Priest';
    4:s:='Werewolf';
    5:s:='Druid';
end;
    begin
    for k1:=1 to JIni.InstanceSize do begin
    StringGrid1.Cells[0,k1]:=JIni.ReadString(s,'Sum'+inttostr(k1),'');
    StringGrid1.Cells[1,k1]:=JIni.ReadString(s,'Name'+inttostr(k1),'');
    if (StringGrid1.Cells[0,k1]<>'') and
    (StringGrid1.Cells[1,k1]<>'') then StringGrid1.RowCount:=StringGrid1.RowCount+1
    else if StringGrid1.RowCount>2 then begin
    StringGrid1.RowCount:=StringGrid1.RowCount-1;
    break;
    JIni.Free;
    end
    else begin break; JIni.Free;
    end;
    end;
    end;
//-------------- Собсно алгоритм высчитывания кол-ва --------------
JIni:=TiniFile.Create(extractfilepath(Application.ExeName)+'judges.ini');
for i1:=0 to 5 do begin
    for i2:=1 to JIni.InstanceSize do begin
    s:=JIni.ReadString(b[i2],'Name'+inttostr(i2),'');
    if s<>'' then sRadioGroup1.Items.Strings[i1]:=a[i1]+' ('+inttostr(i2)+')'
    else break;
    end;
end;
JIni.Free;
//--------------------------------------------------------------------
end;


К каждой професии добавляет число, равное кол-ву записей в секции Warrior. Не пойму в чем проблема...

P.S. А тут нету тэга [spoiler]? o_O
JoLan вне форума Ответить с цитированием
Старый 27.07.2010, 14:16   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
for i2:=1 to JIni.InstanceSize do begin
InstanceSize - это метод, показывающий сколько экземпляров объектов создано и не имеет никакого отношения к INI файлу,Тебе нужен совсем другой метод ReadSectionValues, который читает всю секцию в TStrings. а вообще не хочешь ли ты пояснить что должно писаться в скобках.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2010, 20:10   #3
JoLan
Delphi XE7
Пользователь
 
Аватар для JoLan
 
Регистрация: 26.07.2010
Сообщений: 74
По умолчанию

Цитата:
Сообщение от Stilet
а вообще не хочешь ли ты пояснить что должно писаться в скобках.
Name[n], Sum[n] собсно в скобках этот самый n с каждой секции

Цитата:
Сообщение от Stilet
Тебе нужен совсем другой метод ReadSectionValues
Можно пример? ^^

Последний раз редактировалось JoLan; 27.07.2010 в 20:22.
JoLan вне форума Ответить с цитированием
Старый 27.07.2010, 20:29   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Tinifile readsections F1 Delphi Example
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 27.07.2010, 21:13   #5
JoLan
Delphi XE7
Пользователь
 
Аватар для JoLan
 
Регистрация: 26.07.2010
Сообщений: 74
По умолчанию

На ум приходит только:

Код:
JIni:=TiniFile.Create(extractfilepath(Application.ExeName)+'judges.ini');
for i1:=0 to 5 do begin
  JIni.ReadSection(b[i1],Listbox1.Items);
    for i2:=1 to ListBox1.Items.Count do begin
    s:=JIni.ReadString(b[i2],'Name'+inttostr(i2),'');
    if s<>'' then sRadioGroup1.Items.Strings[i1]:=a[i1]+' ('+inttostr(i2)+')'
    else break;
    end;
end;
JIni.Free;

Последний раз редактировалось JoLan; 27.07.2010 в 21:19.
JoLan вне форума Ответить с цитированием
Старый 27.07.2010, 21:32   #6
JoLan
Delphi XE7
Пользователь
 
Аватар для JoLan
 
Регистрация: 26.07.2010
Сообщений: 74
По умолчанию

Решил проблему, хоть и через ж:
Код:
JIni:=TiniFile.Create(extractfilepath(Application.ExeName)+'judges.ini');
  for i1:=0 to 5 do begin
  JIni.ReadSection(b[i1],Listbox1.Items);
  sRadioGroup1.Items.Strings[i1]:=a[i1]+' ('+inttostr(round(Listbox1.Items.Count/2))+')';
  end;
JIni.Free;
JoLan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение с INI файла. Baaandit Общие вопросы Delphi 3 26.11.2009 17:15
Чтение пароля с ini файла mish@ Общие вопросы Delphi 7 05.11.2009 10:43
чтение из ini динамических компонентов varelik Общие вопросы Delphi 2 03.09.2009 17:35
Чтение параметров из ini файла Яр|/||< (^_^) Общие вопросы Delphi 2 29.06.2009 20:54