Hi Leute,
ich hab mal wieder ein Problem: Ich möchte Werte in einer vorhandenen Ini-Datei verändern. Nun habe ich das Problem das der Autor "//" nutzt um Bestimmte Werte zu ignorieren...
Das Ganze sieht in der Ini so aus:
Delphi-Quellcode:
[Terminal3]
ID=3
Description=Terminal
DataSource=Importdaten
MaxAttempts=3
DatabaseID=1
//[Terminal4]
//ID=4
//Description=Mobile
//DataSource=UDP
//MaxAttempts=3
//DatabaseID=1
Im 1. Schritt lösche ich die alten Werte. Dabei Ignoriere ich Sektionen die mit "//" anfangen. Danach also:
Delphi-Quellcode:
[Terminal3]
//[Terminal4]
//ID=4
//Description=Mobile
//DataSource=UDP
//MaxAttempts=3
//DatabaseID=1
Damit die Kommentare nicht in Terminal3 geschrieben werden habe ich mir folgende Funktion überlegt:
Delphi-Quellcode:
function TIniAccess.writeDataToIni (inSSCategory, inSDescription, inSValue : String) : Boolean;
var
lInifile:TIniFile;
lStringsDiscription,
lStringsValue : TStringList;
i:integer;
begin
if fSPath = '' then setAppDir;
Result:=False;
if inSValue <> '' then
begin
lStringsDiscription := TStringList.Create;
lStringsValue := TStringList.Create;
try
ForceDirectories(Copy(fSPath, 0, LastDelimiter('\', fSPath)));
lInifile := TIniFile.Create(fSPath);
lInifile.ReadSection(inSSCategory, lStringsDiscription);
for i := 0 to lStringsDiscription.Count - 1 do
begin
lStringsValue.Add(lInifile.ReadString(inSSCategory, lStringsDiscription[i],''))
end;
if lStringsDiscription.Count = lStringsValue.Count then
begin
for I := 0 to lStringsDiscription.Count - 1 do
begin
lInifile.DeleteKey(inSSCategory, lStringsDiscription[i] );
end;
end;
lInifile.writestring(inSSCategory, inSDescription, inSValue);
for i := 0 to lStringsDiscription.Count - 1 do
lInifile.writestring(inSSCategory, lStringsDiscription[i], lStringsValue[i]);
Result:=true;
finally
lInifile.Free;
lStringsDiscription.free;
lStringsValue.free;
end;
end;
end;
Leider werden hier keine Sektionen ohne Wert gefiltert... Das "//[Terminal4]" erscheint also immer unter Terminal 3:
Delphi-Quellcode:
[Terminal3]
//[Terminal4]
ID=3
Description=Terminal
DataSource=Importdaten
MaxAttempts=3
DatabaseID=1
//ID=4
//Description=Mobile
//DataSource=UDP
//MaxAttempts=3
//DatabaseID=1
Gibt es eine Möglichkeit Sektionen denen kein Wert zugewiesen ist zu bearbeiten? Oder muss ich hier selber Parsen?