![]() |
Ini-Datei-Äquivalent mit Kommentarfunktion - Klasse wie realisieren?
Ich möchte in Zukunft gerne ein Dateiformat erstellen, welches einer Ini-Datei ähnelt mit dem Unterschied, dass man Kommentare hinzufügen kann.
Das Format selber ist kein Problem auszudenken. Aber wie würde man das ganze Konstrukt dann auslesen? Am besten wäre natürlich eine eigene Klasse aber wie geht man so etwas am besten an? Erste Überlegungen gingen Richtung TStringList und Find aber ich denke das ist wenig performant!
Code:
#comment line
[testsection] testident=testvalue |
AW: Ini-Datei-Äquivalent mit Kommentarfunktion - Klasse wie realisieren?
Das Semikolon ist eigentlich der de-Facto-Standard für Kommentare in ini-Dateien
Code:
[abschnitt]
;Die Zeile drunter wird nicht geparsed ;thisIsNotParsed=42 thisIsParsed=99 ( ![]() |
AW: Ini-Datei-Äquivalent mit Kommentarfunktion - Klasse wie realisieren?
Ok nehmen wir das Semikolon. Was für eine Klasse könnte man für dieses Beispiel hier verwenden?
Code:
Meine Idee bisher (leider gibt showmessage sl.text eine AV + der Destruktor wird nicht aufgerufen)
;comment line
[testsection] testident=testvalue
Delphi-Quellcode:
unit classIniTest;
interface uses System.SysUtils, System.IniFiles, System.Classes, Dialogs; type TIniTest = class private Fsl: TStringList; public constructor Create(const aFileName: string); overload; constructor Create(const aFileName: string; Encoding: TEncoding); overload; destructor Destroy; override; property sl: TStringList read Fsl write Fsl; end; implementation constructor TIniTest.Create(const aFileName: string); begin TIniTest.Create(aFileName, TEncoding.Default); end; constructor TIniTest.Create(const aFileName: string; Encoding: TEncoding); begin sl := TStringList.Create; sl.LoadFromFile(aFileName, Encoding); end; destructor TIniTest.Destroy; begin sl.Free; inherited Destroy; end; end. var Test: TIniTest; begin Test := TIniTest.Create('TestDatei.txt'); try ShowMessage(Test.sl.Text); finally Test.Free; end; |
AW: Ini-Datei-Äquivalent mit Kommentarfunktion - Klasse wie realisieren?
Willst Du die Kommentare in deinem Programm einfügen? Dann versuche TStringList. Geht es nur darum, dass Kommentare erlaubt sind (von Hand eingefügt), dann nimm TIniFile, die Klasse kann damit gut umgehen.
...:cat:... |
AW: Ini-Datei-Äquivalent mit Kommentarfunktion - Klasse wie realisieren?
Zitat:
Zitat:
Zitat:
|
AW: Ini-Datei-Äquivalent mit Kommentarfunktion - Klasse wie realisieren?
Zitat:
|
AW: Ini-Datei-Äquivalent mit Kommentarfunktion - Klasse wie realisieren?
---
moment bitte muss was ändern/testen Zitat:
Delphi-Quellcode:
Ok das funktioniert. ;test bleibt erhalten und wegen ;not=parsed gibt es keine Probleme. Ein ReadSections ignoriert ;not=parsed ebenfalls und ;comment line wird auch ignoriert. Also alles OK.
var
Test: TMemIniFile; begin Test := TMemIniFile.Create('TestDatei.txt'); try ShowMessage(Test.ReadString('testsection', 'testident', '')); finally Test.Free; end; |
AW: Ini-Datei-Äquivalent mit Kommentarfunktion - Klasse wie realisieren?
Falls der unwahrscheinliche Fall auftreten sollte, daß sich in ferner Zukunft jemand hierfür interessieren könnte, wäre es nett von Dir, wenn Du Deine Lösung Deines Problems hier noch einmal explizit beschreiben würdest.
Gruß K-H |
AW: Ini-Datei-Äquivalent mit Kommentarfunktion - Klasse wie realisieren?
Das ist ja das Schöne: ich mache nichts weiter als TIniFile/TMemIniFile zu nutzen :thumb:
Meine Interposer-Klasse nutze ich für andere Zwecke aber an den Create/Read-Funktionen habe ich nichts geändert. |
AW: Ini-Datei-Äquivalent mit Kommentarfunktion - Klasse wie realisieren?
"reine" Kommentare kann man mit der TIniFile und der Windows-INI-API nicht erstellen (sind sie aber in der Datei drin, dann bleiben sie erhalten)
Delphi-Quellcode:
geht eben nur über TStringList oder Sonstwas, bzw. bei TMemIniFile über die internen StringListen.
;comment line
"auskommentierte" Wertpaare lassen sich aber behandeln. Ganz einfach das Semikolon mit in den Valuenamen.
Delphi-Quellcode:
INI.WriteString('testsection', ';not', 'parsed')
Also praktisch gibt es keine Kommentare in INIs, einmal ignoriert die API alles Unbekannte, bzw. das Zeichen gehört mit zum Namen (geht aber nur bei Key=Value Paaren) Aber in der Realität hat sich bei Vielen durchgesetzt, dass ein ; für einen Kommentar steht, womit man das schon als "Quasi-Standard" ansehen könnte, aber es wären auch andere Zeichen möglich (im ASCII gibt es noch ein paar freie Zeichen und ich hab auch schon # als Kommentar gesehn) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 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 by Thomas Breitkreuz