Entwickler-Ecke

Dateizugriff - *.ini Lesen


jornbyte - So 20.04.03 20:51
Titel: *.ini Lesen
Hallo Leute , habe mal als blutiger Anfänger ne Frage :)
Ich habe mal aus dem Tuturial die *.ini verwendet.
Das schreiben klappt soweit gut. Nur beim Lesen bekomme ich den Fehler:
[Error] fiche1.pas(180): Not enough actual parameters ->zu dieser Zeile: var2 := ini.ReadInteger('Sektion2','Kanal',);
Ich arbeite mit Delphi7 und habe auch schon die Zeilen "try" und "finally" entfernt da diese auch angemeckert wurden.
Was muß geändert werden ?


Blackout - So 20.04.03 21:31

hi ,
du musst beim lesen eines Ini-Eintrags immer ein Standartwert mitgeben falls die INI-Datei noch nicht existiert oder der Wert nicht vorhanden ist

Falsch:

Quelltext
1:
var2 := ini.ReadInteger('Sektion2','Kanal',);                    


Richtig:

Quelltext
1:
var2 := ini.ReadInteger('Sektion2','Kanal', 0);                    


Wenn du jetzt den Wert in var2 einliest aber die INI oder der Wert nicht vorhanden ist bekommst du den Integer "0" andernfalls bekommst du dein gespeicherten Wert


jornbyte - So 20.04.03 22:03

Hi Blackout

Danke, es hat geklappt. Kannst du oder ein anderer noch mal Helfen?
Ich möchte ein Array in die ini schreiben und wieder Lesen können.
Das Array soll 255 Plätze haben (wert = array[1..255] of integer)
Nun soll ja -> ini.WriteInteger('Sektion2','Kanal',1234); soll so oft aufgerufen werden, wie es benötigt wird. Ich dachte da an eine Schleife, i ist dabei der Schleifenzähler.
i:=1
while i<256 do begin
ini.WriteInteger('Sektion2','Kanal'(wert[i]),wert[i]); // geht da auch ini.WriteByte
i:= i+1;
end;
Nun ja so geht es nicht, wie muß ich's richtig machen?
(viele Anfänerfragen :) )


jornbyte - So 20.04.03 22:38

Anmerkung: der Kanal soll am Ende die Zahl von 1 bis 255 haben.
Kanal1=129
Kanal2=255
Kanal3=0
....
Ich bekomme die Nummern nicht hin, erschreibt alle Zeichen des ASCII-Satzes (mit char -> ini.WriteInteger('Sektion2','Kanal'+char(i),wert[i])). Das wollte ich aber nicht.
Da ich es ja auch wieder lesen will, ist es da nicht besser auf Sektion zurückzugreifen? Nur wie bekomme ich die Nummer dahin?
Sektion2
Sektion3
Sektion4
Sektion5 .....


Blackout - So 20.04.03 22:51

hey jornbyte,

ich hab schon verstanden was du anstellen willst :wink:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
var
  Form1: TForm1;
  INI: TInifile;
  A: Array[1..255] Of Integer;

implementation

{$R *.dfm}

{...}


// Array in INI-Datei Speichern

procedure TForm1.Button1Click(Sender: TObject);

Var
  I: Integer;

begin

  Try
    INI:= TIniFile.Create(ExtractFilePath(ParamStr(0))+'array.ini');

    // ExtractFilePath(ParamStr(0)) liest den aktuellen Programmpfad aus
    // somit wird deine INI-Datei im gleichen Ordner wie deine EXE
    // gespeichert bzw. geöffnet

    For I:= 1 To 255 Do
      Begin 
        INI.WriteInteger('Sektion', 'Kanal'+IntToStr(I), A[I]);
      End;

    // Die ober Funktion wird 255 mal ausgeführt bis I= 255 ist
    // und jeder Wert einzeln sauber abgespeichert
    
  Finally
    INI.Free;
  End;


end;


// Array aus INI-Datei Lesen

procedure TForm1.Button2Click(Sender: TObject);

Var
  I: Integer;

begin

  Try
    INI:= TIniFile.Create(ExtractFilePath(ParamStr(0))+'array.ini');

    For I:= 1 To 255 Do
      Begin
        A[I]:= INI.ReadInteger('Sektion', 'Kanal'+IntToStr(I), 0);
      End;

    // Und hier fasst das gleiche nur umgedreht
    // Wir teilen dein Array "A" jeden Wert aus der INI-Datei zu

    // Falls du in der oberen Schleife nichts mehr hinzufügen möchtest
    // kannst du das "Begin" und "End;" entfernen

  Finally
    INI.Free;
  End;

end;


Die Kommentare solltest du einmal lesen dann kannste die auch entfernen :D

Ich hoffe das hilft dir


jornbyte - Mo 21.04.03 19:29

Kein Buch kann es so beschreiben. Ich kann da nur Danke sagen.

bis denne :wink: