00 Stimmen

Delphi: INI-Dateien: Probleme mit Anführungszeichen

Frage von Chematik | 01.12.2012 um 23:03

Ich benutze in Delphi Ini-Files um einige Einstellungen meines Programms zu speichern. Das schreiben und lesen der Dateien funktioniert auch ganz gut, nur mit Anführungszeichen kommt es zu kuriosen Problemen.

Das Problem betrifft sowohl doppelte als auch einfache Anführungszeichen (" und ') und taucht nur manchmal auf, eine Logik ist für mich nicht erkennbar. Meine erste Idee war, die Anführungszeichen zu verdoppeln, das funktioniert aber auch nur manchmal.

Falls es wichtig ist, hier ein paar Code-Fragmente:

uses IniFiles;
...

procedure ...
var
  ini: TIniFile;
  str: string;
begin
  ini:=TIniFile.Create(dateiname);

  //schreiben
  ini.WriteString('Section', 'Identifier', 'Value');

  //lesen
  str:=ini.ReadString('Section', 'Identifier', 'Default');

  ini.free;
end;


Ich denke aber nicht, dass es daran liegen wird, da dieser Code so auch im Internet zu finden ist. Aber woran liegt es dann?

AntwortenPositivNegativ
Avatar
2Beste Antwort2 Stimmen

Die von dir benutzen Funktionen WriteString und ReadString benutzen intern die Windows API Funktionen ReadPrivateProfileString und GetPrivateProfileString. 

Bei diesen Funktionen ist folgendes zu beachten: Ist der String in einfache oder doppelte Anführungszeichen eingefasst, gibt die Funktion den String ohne die Anführungszeichen zurück. Aus "string" wird also string. Kommt nur ein Anführungszeichen vor oder kommen Anführungszeichen in der Mitte vor, werden diese normal zurück gegeben. Das erklärt dein beschriebenes Verhalten.

Die Lösung ist folgende:

function DoubleQuotes(s: string): string;
var
  k: integer;
begin
  k:=length(s);
  if k>1 then begin
    if (s[1])='''') and (s[k]='''') then s:=''''+s+'''';
    if (s[1])='"') and (s[k]='"') then s:='"'+s+'"';
  end;
  result:=s;
end;

...

s = '"WERT"';
ini.WriteString('Section','Identifier',DoubleQuotes(s));

Wir überprüfen also, bevor wir den String in die INI-Datei schreiben, ob sowohl vorne als auch hinten Anführungszeichen eines bestimmten Typs vorkommen. Falls ja, verdoppeln wir diese hinten und vorne. Ansonsten bleibt der String, wie er ist.
04.12.2012 um 16:20

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

Delphi: Dateien verstecken

Frage | 2 Antworten

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.