Einzelnen Beitrag anzeigen

dust258

Registriert seit: 18. Aug 2008
62 Beiträge
 
#1

Kommentare In Ini Ignorieren?

  Alt 3. Nov 2009, 16:49
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?
  Mit Zitat antworten Zitat