Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#37

AW: INI File Schreiben und auslesen

  Alt 20. Mär 2014, 10:01
Gut, ich hab die Frage missverständlich gestellt, ist aber nicht schlimm.

silang1.Language := Ini.ReadString('language', 'last language', 'Deutsch' );

Eigentlich wollte ich wissen, in welchem Teil der Ini er sucht. Man muss sich zuerst über den Aufbau der Ini im klaren sein, man muss sich bewusst sein, dass es bei der Ini drei Schritte bis zu gesuchten Info gibt - zuerst muss man die Ini-Datei wählen, dann muss man innerhalb der Ini den Teilbereich (Section) wählen, zuletzt muss man den Schlüssel (Ident) wählen:
Code:
IniFile
     |
     +-Section1
     |   |
     |   +-Ident1 = Value
     |   +-Ident2 = Value
     |   +-Ident3 = Value
     |
     +-Section2
     |   |
     |   +-Ident1 = Value
     |   +-Ident4 = Value
     |   +-Ident5 = Value
     |
     +-Section3
Man kann übrigens auch eine normale Textdatei nehmen, sie über TStringLIst laden und Werte über Schlüssel suchen. Das kann jede StringList, sie kennt nur keine Sektionen. Das würde dann so aussehen:
Code:
TxtFile
     |
     +-Name1 = Value
     +-Name2 = Value
     +-Name3 = Value
     +-Name4 = Value
     +-Name5 = Value
     +-Name6 = Value
Die StrlingList hat dann also eine Liste in der Form:
Code:
Info1 = Wert A
Info2 = Wert B
Info1 = Wert C
Man kann hier also genauso an die Daten kommen wie bei einer Ini. Was ist aber der Unterschied? Die StringList kennt keine Unterteilung innerhalb der Liste. In der ganzen Liste müssen alle Schlüssel (also Ident oder Names) stets einmalig sein, sonst werden sie nicht gefunden. Auf den Wert in Zeile 3 kommt man bei einer StringList nie dran - Grund: sie benutzt als Schlussel die Bezeichnung "Info1", und das taucht in der Liste in der ersten Zeile bereits auf. Die dritte Zeile kann also nicht angesprochen werden.

Hier schlaft die Ini-Datei Abhilfe, denn sie kann die Datei noch ein weiteres Mal unterteilen, und zwar in Sektionen.
Code:
[Sektion1]
Info1 = Wert A
Info2 = Wert B

[Sektion2]
Info1 = Wert C
Und nun kann man an den Wert drann, man muss aber der Funktion zum auslesen der Info sagen an welche Info1 in der Liste will man. In welcher Sektion befindet es sich. Also schriebt man:
Delphi-Quellcode:
xyz := Ini.ReadString('Sektion2', 'Info1 ', 'Erstzwert');
//
Sektion unterteilt also die eine große Ini Liste mit Werten in kleine Teillisten, geordnet nach Themen
Delphi-Quellcode:
silang1.Language := Ini.ReadString('language', 'last language', 'Deutsch' );
//
Man kann sich die Sektion auch als Ordner vorstellen und die Idents als Blätter mit Infos. In einen Ordner kann man viel Blätter legen. In einen weiteren Ordner kann man andere Blätter legen.
  Mit Zitat antworten Zitat