Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Delphi - *.ini - Ako zistím počet kľúčov v sekcii?

Ťažko hľadať v helpe v Delphi, keď presne neviem, čo hľadať. Je nejaká funkcie v Delphi pre načítanie všetkých kľúčov z *.ini súboru z určitej sekcie? Tiež potrebujem aj ich počet. Ide o to, aby som nemusel mať v súbore ešte aj informáciou o počte takýchto kľúčov v sekcii. Takže znovu. Mám v *.ini sekciu a v nej mám kľúč oznamujúci počet klúčov v tej sekcii. Kľúče sú s rovnakým názvom, len na konci názvu obsahujú ešte poradové číslo. No a tieto kľúče načítam. Je možnosť zostiť počet týchto kľúčov v sekccii aj bez toho, aby som musel mať kľúč oznamujúci ich počet? Určite sa to dá cez TValueListEditor, ale to je vizuálna komponenta a je to zbytočné mrhanie prostriedkami. Moja predstava je takáto:

pocetklucov := Ini.KeyCount('Sekcia');
Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Použij objekt TIniFile, speciálně TIniFile.ReadSectionValues (...(parametry najdeš v helpu)...). Vše…
Rce 28.06.2006 23:33
Rce
Ee, register oblúkom vynechám. Okrem toho do tohto INI budem pristupovať často aj ručne. BTW, že vis…
msx. 29.06.2006 14:41
msx.
Proc by to nebylo pouzitelny , treba takto: (ber jen jako priklad) getdir(0,S); opicak := TIniFile… nový
virus 29.06.2006 17:59
virus
BTW TIniFile a TStrings zrovna nejsou visuální komponenty... :-);-) A klidně bych je použil. Jsou do… nový
Rce 29.06.2006 22:23
Rce
Pozor nie TStrings. TStrings je abstratná trieda. Zrejme sa myslí TStringList. Už som mal dosť trápe… nový
msx. 29.06.2006 23:10
msx.
Ano, TStrings je abstraktní třída a můžeš z toho TIniFile to narvat do všeho, co je na této třídě po… nový
Rce 29.06.2006 23:40
Rce
Ja som to myslel ako na hotovo, čiže načítať priamo do použiteľného objektu, ale vlastne to je pravd… nový
msx. 30.06.2006 00:22
msx.
No pokud to treba zadas takto function opicarna(neco,neco2:string):Tstrings; Tak ti to pujde opic… nový
virus 30.06.2006 00:47
virus
Speciálně u TMemo je vlastnost Lines: TStrings implementována jako TMemoStrings, která všechny abstr… poslední
Rce 30.06.2006 00:59
Rce

Použij objekt TIniFile, speciálně TIniFile.ReadSectionValues (...(parametry najdeš v helpu)...). Všechny klíče nacpe do TStrings kde TStrings.Count ti dá přímo jejich počet.
PS: Visuální komponenty jdou používat též "nevisuálně", když si je vyrobíš za běhu na vlastní triko - někdy to ani jinak nejde :-).
//Edit: Nebylo by to lepší nacpat do registru, než do INI?

Proc by to nebylo pouzitelny , treba takto: (ber jen jako priklad)

  getdir(0,S);
  opicak := TIniFile.Create(S+'\blbinka.ini');
  bubu := Tstringlist.create;
with opicak do
  begin
  ReadSection('Name',bubu);
  for I := 0 to bubu.Count - 1 do
  begin
  ddt:=bubu.Strings[i];
  jmeno :=   readString('Name', ddt, jmeno);
  heslo :=  readString('Hesla', jmeno, heslo);
  dalsi := readString('neco', jmeno, dalsi);
  add   :=   readString('add', jmeno, add);
  ....
  atd.
  ...
with Listbox1 do
  begin
  items.add(inttostr(i)+':. '+jmeno+' '+heslo+' '+dalsi+' '+add);    
  end;
emd;

Pokud mas potrebu vice klicu pouzij Tstrings misto string (jmeno,heslo...) promennych.
Mozna to neni uplne nejlepsi zpusob.

Pozor nie TStrings. TStrings je abstratná trieda. Zrejme sa myslí TStringList. Už som mal dosť trápenia s TStrings až mi Jan Fiala vysvetlil, že ako samostatná trieda je to použiteľné len ako "predok". Preto v úzodzovkách, lebo sa to dá použiť aj ako člen triedy, ak sa nadefinujú niektoré abstrakné virtuálne metódy v TStrings.

Ja som to myslel ako na hotovo, čiže načítať priamo do použiteľného objektu, ale vlastne to je pravda, že TStrings je podstata. Mne skôr išlo o to, aby sa nestalo, že o týždeň niekto napíše, že s tými textami nievie v TStrings pracovať. Ozaj, V TStrings nefunguje Count, pretože je to abstraktná metóda, ako je to upravené v Memo, kde je vlastnosť Lines postavená na základe TStrings a teda Count musí byť naprogramovaný? Ide mi o to, že ako sa dá naprogramovať metóda, ak nie je objekt zdedený v potomkovi, ale priamo je v triede (TMemo) definovaný objekt (TStrings) a metóda Count tu už funguje.

Speciálně u TMemo je vlastnost Lines: TStrings implementována jako TMemoStrings, která všechny abstraktní třídy definuje.
//Edit: Prostě přistupuje se k tomu jako k TStrings a jak je to konkrétně implementováno, je před uživatelem (programátorem) skryto páč je to nepodstatné. :-)

Zpět do poradny Odpovědět na původní otázku Nahoru