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');
Předmět Autor Datum
Možná pomocí ReadSectionValues uložit do Listboxu nebo Memo a spočítat...? Jsem zvědav, kdo dřív mě…
host 28.06.2006 23:09
host
Ja. :-D
msx. 28.06.2006 23:12
msx.
Teraz vážne. Premýšľal som o tom. Dá sa to pomocou cyklu repeat until a postupným zvyšovaním porado…
msx. 28.06.2006 23:16
msx.
Ale ďakujem za vynaloženú námahu.:beer:
msx. 28.06.2006 23:18
msx.
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…
virus 29.06.2006 17:59
virus
BTW TIniFile a TStrings zrovna nejsou visuální komponenty... :-);-) A klidně bych je použil. Jsou do…
Rce 29.06.2006 22:23
Rce
Pozor nie TStrings. TStrings je abstratná trieda. Zrejme sa myslí TStringList. Už som mal dosť trápe…
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…
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…
msx. 30.06.2006 00:22
msx.
No pokud to treba zadas takto function opicarna(neco,neco2:string):Tstrings; Tak ti to pujde opic…
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

Teraz vážne.

Premýšľal som o tom. Dá sa to pomocou cyklu repeat until a postupným zvyšovaním poradového čísla klúča. Podmienkou na ukončenie cyklu je neexistujúci klúč s práve aktuálnym v cykle sa zvyšujúcim poradovým číslom. Takto načítam vštky kľúče a viem aj ich počet.

Vizuálne komponenty som zámerne nechcel použiť, aj keď možno je možné načítať to do StringList (to nie je vizuálna komponenta, len obyčajný zoznam reťazcov), ale neviem ako. Preto nie vizuálne, lebo je to ako kkúpiť televízor a pozerať ho so zavretými očami. Prebytočnosť.:-)

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