Gehen wir im Beispiel von folgender INI-Datei aus, die ein paar Benutzerangaben enthält (Ähnlichkeiten mit lebenden Personen sind rein zufällig!):
[names] Paul=Paul
[Paul] location=Salzburg age=45
Wie Sie sehen können, befindet sich in der INI-Datei eine Sektion names, in der zweimal der Name "Paul" aufgeführt ist. Der Hintergedanke dabei wird zu einem späteren Zeitpunkt erklärt werden (s. hier). Weiterhin sehen Sie, dass der Name "Paul" noch einmal als eigene Sektion erscheint und dass dort Wohnort und Alter eingetragen sind.
Wir wollen nun folgendes machen: Wir gehen davon aus, dass uns der gesuchte Name bekannt ist. "Paul" in diesem Fall. Also öffnen wir direkt die gleichnamige Sektion und lesen Wohnort und Alter aus. Dazu steht uns für Strings die Funktion "GetPrivateProfileString" zur Verfügung. Es wäre natürlich auch möglich, damit numerische Werte zu lesen, aber das wäre nicht im Sinne dieses Beitrags. Daher lesen wir das Alter mit der Funktion "GetPrivateProfileInt".
Der erste Parameter der Funktion "GetPrivateProfileString" ist der Name der Sektion, aus der wir einen String auslesen wollen:
GetPrivateProfileString('Paul',
Der nächste Parameter ist der Name des Topics, der auf den gesuchten String verweist
'location',
Es folgt ein Vorgabewert, der im Fehlerfall benutzt wird. Kann der gesuchte Topic nicht gefunden werden, wird stattdessen dieser Wert zurückgeliefert
nil,
Nun folgt der Textpuffer, der den gesuchten String aufnehmen soll, und dessen Größe:
location, BUFSIZE,
Und zu guter Letzt muss der Name der INI-Datei angegeben werden
pchar(ExtractFilePath(paramstr(0)) + szIniFile));
Der Rückgabewert der Funktion ist die Anzahl der kopierten Zeichen. Das ist sehr hilfreich, da Sie so auch mit String-Variablen arbeiten können; beispielsweise:
SetLength(szBuffer,MAX_PATH); SetLength(szBuffer,GetPrivateProfileString('Paul', 'location',nil,@szBuffer[1],MAX_PATH,'userdata.ini'));
In unserem Fall interessiert uns der Rückgabewert allerdings nicht, da der Puffer entweder den Wohnort enthält oder (im Fehlerfall) auf den Vorgabewert nil gesetzt wird. Mit anderen Worten: entweder wird der Wohnort der ausgewählten Person angezeigt, oder das Feld bleibt leer.
Das Prinzip zum Auslesen von numerischen Werten ähnelt dem der Strings. Es entfällt eigentlich nur der Textpuffer und dessen Größe. Und der Vorgabewert ist hier natürlich auch ein numerischer Typ:
age := GetPrivateProfileInt('Paul', // Sektionsname 'age', // Topic -1, // Vorgabewert pchar(ExtractFilePath(paramstr(0)) + szIniFile)); // Datei
Allerdings spielt diesmal der Rückgabewert eine sehr große Rolle, denn er ist der ausgelesene Wert, bzw. im Fehlerfall unser Vorgabewert.