![]() |
TIniFile und Kommentare
Heute scheint mein Frage Tag zu sein.
Habe folgendene INI Zeile:
Delphi-Quellcode:
Nun wollte ich den Wert mit ReadBool('Communications','alternate_ip_addr_looku p',false) auslesen. Klappt nicht wegen dem doofen Kommentar. Gleiche wenn ich es als ReadInteger. Alles unter Vista. Ich habe es auch mal als ReadString getestet und siehe da er liest mir den Kommentar mit ein :wall:
[ Communications ]
alternate_ip_addr_lookup = 1 ; Find IP addresses another way 0 = No alternate lookup * 1 = Use alternate way Da ich die Kommentare nicht beeinflussen kann (also keine Diskussion ob das die richtige ini interne Syntax ist) meine Frage ob es eine einfach Möglichkeit gibt an die Werte zu kommen (ohne den String auseinander zu nehmen) ? |
Re: TIniFile und Kommentare
momentan scheinst du TIniFile zu verwenden das unterstützt es von haus aus nicht.
Und eine einfache Variante ohne den String auseinander zu nehmen? Ich dachte dein Ziel ist es den String auseinander zu nehmen?! (wenn du den String nicht ändern willst kannst du logicher Weise nix abschneiden). |
Re: TIniFile und Kommentare
Nun, wäre das schlimm, wenn du den String auseinandernehmen musst?
Im Prinzip musst du doch nur mit pos() die Position des ersten Leerzeichens im String finden und dann den Rest mit delete() löschen (oder mit copy() alles davor rauskopieren). Die Funktionen sind in StrUtils. Ohne Auseinandernehmen fällt mir nichts ein. |
Re: TIniFile und Kommentare
Das Auseinandernehmen des Strings kannst Du abtippen aus der Unit Inifiles. ReadBool benutzt ReadInteger:
Delphi-Quellcode:
Grüße, Messie
IntStr := ReadString(Section, Ident, '');
if (Length(IntStr) > 2) and (IntStr[1] = '0') and ((IntStr[2] = 'X') or (IntStr[2] = 'x')) then IntStr := '$' + Copy(IntStr, 3, Maxint); Result := StrToIntDef(IntStr, Default); |
Re: TIniFile und Kommentare
Danke schonmal. Es kann sein das ich das sogar so auf meinem anderem PC gemacht habe ("m Prinzip musst du doch nur mit pos() die Position des ersten Leerzeichens im String finden und dann den Rest mit delete() löschen (oder mit copy() alles davor rauskopieren). Die Funktionen sind in StrUtils.").
Klar ich habe jetzt die Unit inifile benutzt und bin gerade darüber gestolpert :-D Geht es mit einer anderen Unit ? Ich habe mal ein bisschen gegoogelt und es scheint an der Art und Weise zu liegen wie Winodws ( GetPrivateString ) eine Ini Datei ausliest. Das Programm (nicht von mir) scheint aber die Daten anders auszulesen, da die Kommentare so nicht stören. Und ist das Verhalten von GetPrivateString in allen Windows Versionen von WIN95-Vista gleich ? |
Re: TIniFile und Kommentare
Habe es gefunden :)
Ich habe es so gemacht:
Delphi-Quellcode:
Kann man das besser machen (Habe englische Kommentare falls ich die Quellen des Programmes veröffentliche) ?
j := ini.ReadString('Communications','alternate_ip_addr_lookup','-5');
// We look for ; and use this position to strip off the rest comment posfound := AnsiPos(';', j); if posfound > 0 then SetLength(j, posfound-1); // We use trim to cut off blanks trimmed := Trim(j); // We use StrToIntDef to have the Integer regardless if the string is // a number or something else i := StrToIntDef(trimmed, -1); |
Re: TIniFile und Kommentare
Schreib den Kommentar einfach vor die Zeile in die INI Datei. Die TIniFile kennt Kommentare ( ; als Kennung als erstes Zeichen) und ignoriert sie ordentlich. Auch beim Schreiben lässt er sie drinne. Also einfach die Einträge vor dem Eintrag an sich kommentieren und du hast keinen Aufwand und keine Probleme...
Und grundsätzlich: INI sind alle Strings. ReadInteger liest den String und versucht ihn in einen Integer umzuwandeln. Beim Lesen kenn er keinen Typ und liest immer String. Von daher fängt INIfile niemals an irgendwas auf Gültigkeit zu prüfen oder nur passende Dinge auszulesen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz