Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Delphi - načítanie z INI súboru

Mám túto metódu:

procedure TfrmCustomHead.FormCreate(Sender: TObject);
var
  Ini: TIniFile;
  i: Byte;
begin
  Ini := TIniFile.Create(MainForm.PrgPath + 'Spanwin.ini');
  for i := 0 to 11 do
    Ini.ReadString('Head', 'HeadString' + IntToStr(i), HeadString[i]);
  Ini.Free;
end;

A tento INI súbor:

[Head]
HeadString0=0
HeadString1=1
HeadString2=2
HeadString3=3
HeadString4=4
HeadString5=5
HeadString6=6
HeadString7=7
HeadString8=8
HeadString9=9
HeadString10=10
HeadString11=11

Načítané reťazce sú prázdne. Vie mi niekto vysvetliť, kde robím chybu? Táto metóda funguje dobre:

procedure TfrmCustomHead.bbOKClick(Sender: TObject);
var
  Ini: TIniFile;
  i: Byte;
begin
  Ini := TIniFile.Create(MainForm.PrgPath + 'Spanwin.ini');
  for i := 0 to 11 do
    begin
      HeadString[i] := (Panel.Controls[i] as TEdit).Text;
      Ini.WriteString('Head', 'HeadString' + IntToStr(i), HeadString[i]);
    end;
  Ini.Free;
end;
Předmět Autor Datum
for i := 0 to 11 do headstring[i]:=Ini.ReadString('Head', 'HeadString' + IntToStr(i), HeadString[i])…
sobol 07.06.2006 14:59
sobol
Ďakujem, ale v helpe som bol. Keď vieš, kde je chyba, tak poraď. Ja som už skúšal na to aj watch, br…
msx. 07.06.2006 15:15
msx.
no vzdyt jsem ti to napsal, je to funkce takze tam musi byt headstring[i]:=Ini.ReadString('Head', '…
asobol 07.06.2006 15:46
asobol
To je tak, keď funkcie a procedúry majú rovnaký zápis. Tak to ma ozaj nenapadlo, že to bude taká blb…
msx. 07.06.2006 16:00
msx.
nebo teda jeste lepe headstring[i]:=Ini.ReadString('Head', 'HeadString' + IntToStr(i), 'toto je def…
sobol 07.06.2006 15:52
sobol
A ja jen doplnim, pokud bude ten soubor vetsi, pouzij radeji TMemIniFile. Je to Delphi implmentace s…
Jan Fiala 07.06.2006 16:54
Jan Fiala
Áno, ďakujem. Raz dávnejšie som sa aj tak zamýšlal nad tým, že čo potom, ak sa pracuje s dlhým súbor…
msx. 07.06.2006 18:54
msx.
TIniFile je take v pameti, tam si jej zase daji Windows...
Jan Fiala 07.06.2006 21:07
Jan Fiala
Podla knihy co mam o Delphi rozdiel medzi TMemIniFile a TIniFile je ze TMemIniFile nepracuje s fyzic…
Andrej 07.06.2006 23:18
Andrej
Důležité ovšem je, že TIniFile používá Woknouzí API funkce pro práci s INI soubory a ty nedovedou pr… poslední
Rce 07.06.2006 23:28
Rce

for i := 0 to 11 do
headstring[i]:=Ini.ReadString('Head', 'HeadString' + IntToStr(i), HeadString[i]);

delphi help:
Delphi syntax:

function ReadString(const Section, Ident, Default: String): String; override;

C++ syntax:

virtual AnsiString __fastcall ReadString(const AnsiString Section, const AnsiString Ident, const AnsiString Default);

Description

Call ReadString to read a string value from an INI file. Section identifies the section in the file that contains the desired key. Ident is the name of the key from which to retrieve the value. Default is the string value to return if the:

Section does not exist.
Key does not exist.
Data value for the key is not assigned.

Ďakujem, ale v helpe som bol. Keď vieš, kde je chyba, tak poraď. Ja som už skúšal na to aj watch, breakpoint atď. a zistil som, že metóda sa kompletne bezchybne vykoná a reťazce sa nenaplnia. Súbor existuje, kľúče tiež a hodnoty tiež, viď pastnutý súbor. Prosím vymazať opakovanú reakciu, zrejme došlo k dvojitému odoslaniu (nech je to tu prehľadnejšie).;-)

Áno, ďakujem. Raz dávnejšie som sa aj tak zamýšlal nad tým, že čo potom, ak sa pracuje s dlhým súborom (síce to nie je môj prípad). Že to iba zaťaží Delphi. NO a rozmýšlal som ako by to bolo lepšie riešiť. Ale nedáva si TMemIniFile šetko do pamäti? Teda tak to chápem z názvu (presnejšie povedané, doteraz som si to tak myslel).

Podla knihy co mam o Delphi rozdiel medzi TMemIniFile a TIniFile je ze TMemIniFile nepracuje s fyzickym suborom na disku ale vsetky udaje pre zvysenie rychlosti uklada do vyrovnavacej pamate. Na disk ich zapise az ked sa zavola metoda UpdateFile.

Důležité ovšem je, že TIniFile používá Woknouzí API funkce pro práci s INI soubory a ty nedovedou pracovat s delším jak 64KB. Kdežto v TMemIniFile (a potažmo, leč zdroják jsem nezkoumal, v TRegistryIniFile) si to ovládá Delphi na svoje triko, právě kvůli tomuto omezení.:-)

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