есть 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. Не пойму в чем проблема :lol:
ненавижу любой паскаль-бейзд язык. попробуем разобраться. Код: JIni:=TiniFile.Create(extractfilepath(Application.ExeName)+'judges.ini'); каждый раз читаешь? O.o Код: case sRadioGroup1.ItemIndex of 0:s:='Warrior'; 1:s:='Mage'; 2:s:='Bowmaster'; 3:s:='Priest'; 4:s:='Werewolf'; 5:s:='Druid'; end; зачем? у тебя const b:array вроде бы есть? блин. нет, дальше не осилю я этот код. он просто не поддается анализу. поддерживай «уровневость» кода, иначе нереально разобраться в лексемах языка. p.s. ты бедолага. вот придется тебе xml читать/писать — заморишься со своим дельфи.
2gouranga, жду уроков С++ :lol: И кста, на тему каждый раз открывать-закрывать, писал тяп-ляп и не особо задумывался над оптимизацией
Проблема была решена через Ж: Код: ... 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; ...
Но про скорость парсинга можно забыть. Иди гуляй, для дельфи давно готовые элементы есть, как стандартный так и сторонние. Хотите _уроки_ по C++? это вам не раз два и я все знаю ... скачайте книгу "Бьерн Страуструп. Язык программирования С++" или/и "самоучитель C++ для чайников". А потом скачайте самоучитель по Qt
Дык это тебя надо спросить, зачем юзать хрен знает что, тратить кучу времени на велосипед (и сделать тормозную дрянь в итоге), когда можно быстро через компоненты сделать? Такое чуство что ты не читал среднюю литературу по C++. Да в книге много мусора, но раскрытие большинства основных вещей нормальное, не в сравнении с некоторыми другими авторами. Хотя для начала можно взять и литературку попроще.