Entwickler-Ecke

Dateizugriff - TInifile und readstring


Bise - Di 23.07.02 23:49
Titel: TInifile und readstring
Hi an alle die noch nicht schlafen :wink:

nachdem ich nun den ganzen Abend die F1-Taste gedrückt, IniFile-Tutorials gelesen und in verschiedenen Foren gesucht habe hoffe ich hier auf eine Antwort.
Also, mir wurde die Bitte herangetragen, ein kleines Programm zu schreiben. Dieses Programm soll bei etlichen Firmen installiert werden (nur zur Info: ich mache das justforfun ... ) und lediglich dem Installateur und nicht dem Anwender dienen.
Dabei geht es darum, aus einer INI-Datei den Schluessel und den Wert getrennt auszulesen.
Nun weiss ich nicht, wie man das macht. Bei den ganzen IniFile.Readstring-Beispielen wurde immer ein hartcodierter string mitübergeben (wenn die z. B. den Wert auslesen sollte, das Auslesen des Schluessels habe ich nirgendwo gefunden :( ).
Kann man denn eine Ini-Datei nicht wie einen Textfile auslesen und dann mit Copy und Pos die einzelnen Einträge für Schluessel und Wert auslesen :?: Und wenn ja, wie geht denn das?

Für's lesen und evt. Hilfe bin ich euch dankbar

Mfg

Bise


hitstec - Mi 24.07.02 00:55

Also nehmen wir an, eine Inifile sieht so aus:


Quelltext
1:
2:
3:
[Sektion]
Schlüssel1=Wert1
Schlüssel2=Wert2

Dann kannst du "Schlüssel1=Wert1" und "Schlüssel2=Wert2" als Strings in TStrings oder eine TSringList mit der Funktion:


Quelltext
1:
procedure ReadSectionValues(const Section: string; Strings: TStrings);                    

einlesen.

Konkret geht das so: (Auszug aus der Delphi-Hilfe)


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
uses IniFiles;

procedure TForm1.FormActivate(Sender: TObject);
var
  AppIni: TIniFile;
begin
  AppIni := TIniFile.Create('WIN.INI');
  AppIni.ReadSectionValues('Ports',ListBox1.Items);
  AppIni.Free;
end;


Nun hast du eine "Sammlung" von Strings, die jeweils durch ein "="-Zeichen getrennt sind. Links davon ist der Schlüssel, rechts davon der Wert.

Mit der Funktion Copy kannst du jeweils den gewünschten Teilstring, den du mit der Funktion Pos ermittelst, herausfinden.

So.


wwerner - Mi 24.07.02 06:42

Schau dir mal readsection und readsections an


Bise - Mi 24.07.02 09:20

Super,
ich danke euch beiden.
Wahrscheinlich hab ich gestern abend schon selber fast geschlafen.

Vielen Dank.

Bise


Moritz M. - Mi 14.08.02 10:59

Wenn du das meinst was Ich denke habe ich noch eine Möglichkeit:(Das Tutorials aus diesem Forum)


1. Erste Schritte

Als erstes erweitern wir die Uses-Liste:


Quelltext
1:
Uses {...}, inifiles;                    


Danach benötigen wir eine weitere Variable vom Typ Tinifile:


Quelltext
1:
2:
Var {...} 
  ini:Tinifile;


2. Aufbau von INI-Dateien

Um mit INI-Dateien zu arbeiten muss man wissen wie solche aufgebaut sind. INI-Dateien bestehen aus verschieden Sektionen die verschiedene Eigenschaften enthalten können. Hier ein Beispiel:

[Programm]
lastopen=20.05.2002
version=1.0
[Einstellungen]
fenster=maximiert
[User]
username=Max Mustermann

INI-Dateien können beliebig viele Sektionen und Eigenschaften besitzen.
Die Eigenschaft bekommt Ihren Wert über das = zugewiesen. Der Wert kann auch Leerzeichen enthalten.

Die Namen der Sektionen werden in [] eingeschlossen.

Man kann INI-Dateien selber einfach im Editor anlegen bzw. bearbeiten.


3. In INI-Datei schreiben

Mit folgenden Anweisungen kann man Daten in eine INI-Datei schreiben:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
try 
  ini:=TIniFile.Create('c:\meineini.ini'); 
     // INI erstellen und falls vorhanden initialisieren 
  ini.WriteString('Sektion1','Eigenschaft1','Dein String'); 
     // String in Sektion1 unter Eigenschaft1 abspeichern 
  ini.WriteInteger('Sektion2','Eigenschaft2',1234); 
     // Intergerwert (1234) in Sektion2 unter eigenschaft2 abspeichern 
finally 
  ini.Free; 
     // Variable ini wieder freigeben


Die Befehle WriteString und / oder WriteInteger sooft hinschreiben bis man alle Daten gespeichert hat die man möchte.


4. Aus INI-Datei lesen

Mit folgenden Anweisungen kann man Daten aus einer INI-Datei auslesen. Man benötigt hier allerdings Variablen, um die ausgelesen Werte zu speichern.

In diesem Beispiel var1:string; und var2:integer;


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
try 
  ini:=TIniFile.Create('c:\meineini.ini'); 
      // INI–Datei initialisieren 
  var1:=ini.ReadString('Sektion1','Eigenschaft1',''); 
// Daten aus Sektion1 unter Eigenschaft1 auslesen 
// Der letzte Wert ist ein Standartwert wenn nicht gelesen werden kann 
  var2:=ini.ReadInteger('Sektion1','Eigenschaft1',); 
// Daten aus Sektion1 unter Eigenschaft1 auslesen 
// Der letzte Wert ist ein Standartwert wenn nicht gelesen werden kann 
finally 
  ini.Free; 
   // Variable ini wieder freigeben