Entwickler-Ecke
Dateizugriff - INI-Wert mit mehreren Zeilen
UGrohne - So 16.02.03 23:51
Titel: INI-Wert mit mehreren Zeilen
Moin,
möchte in eine INI-Datei einen Wert speichern, der mehrere Zeilenumbrüche hat (z.B aus nem Memo). Geht das? Bisher speichert der das irgendwie blödsinnig, hat dann zwischen den Werten die einzelnen Zeilen *grml*
gruß
Alibi - Mo 17.02.03 00:10
Ich hab das bis jetzt so gemacht, dass ich für jede Zeile einen Inieintrag mache.
Line0=bla
Line1=blubb
Line2=blablubb
und dann so z.B. auslese:
Quelltext
1: 2: 3: 4: 5:
| i := 0; while Settings.ValueExists('PrintOptions','Top'+inttostr(i)) do begin MemoUpperText.Lines.Add(Settings.ReadString('PrintOptions','Top'+inttostr(i),'')); inc(i); end; |
So schreibe ich das ganze:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| i := 0; while Settings.ValueExists('HTMLExport','HTMLText'+inttostr(i)) do begin Settings.DeleteKey('HTMLExport','HTMLText'+inttostr(i)); inc (i); end;
for i := 0 to MemoHTMLText.Lines.Count-1 do Settings.WriteString('HTMLExport','HTMLText'+inttostr(i),MemoHTMLText.Lines[i]); |
Anonymous - Mo 17.02.03 00:21
Für die Lösung hab ich zwei Tage gebraucht und das soll ich so vertaten? Na gut ;)
Quelltext
1:
| ..., Memo1.Lines.CommaText, ... |
Das einzige Problem ist, daß eine ganze Ini-Zeile ink. Schlüssel 1024 Zeichen fassen kann. Wenn das aber kein Problem ist, dann ist CommaText die Lösung.
UGrohne - Mo 17.02.03 00:22
Danke, funktioniert einwandfrei. Dachte eigentlich erst da gibts irgendne EInstellungsfunktion. Aber auf die Idee bin ich irgendwie net gekommen *g*
Gruß
Alibi - Mo 17.02.03 00:31
Gibt es bei Commatext nicht das Problem, dass das ganze durcheinandergerät, wenn man Kommas im Memo verwendet?
Anonymous - Mo 17.02.03 00:48
| UGrohne hat folgendes geschrieben: |
| Danke, funktioniert einwandfrei. Dachte eigentlich erst da gibts irgendne EInstellungsfunktion. Aber auf die Idee bin ich irgendwie net gekommen *g* |
Das ist ja auch das Problem wieso ich zwei Tage dafür gebraucht habe. Auf das einfachste kommt man garnicht.
| Alibi hat folgendes geschrieben: |
| Gibt es bei Commatext nicht das Problem, dass das ganze durcheinandergerät, wenn man Kommas im Memo verwendet? |
Nein. Wenn Kommas im Text vorkommen, dann wird die Zeile in "Anführungszeichen" gesetzt. Und wenn Anführungszeichen vorkommen, dann werden diese in drei """ Anführungszeichen gesetzt.
Alibi - Mo 17.02.03 01:12
Die Methode ist weitaus eleganter als meine momentane. Es gibt hier jedoch ein Problem.
Wenn hier als Defaultwert eine Zeile mit 2 Wörtern getrennt durch ein Leerzeichen ist:
LissaJous Simulation
Wird das in der Inidatei mit einem Komma dazwischen abgespeichert:
LissaJous,Simulation
!?
Anonymous - Mo 17.02.03 01:28
Der Defaultwert muß dann auch ein CommaText sein, z.B.
Quelltext
1:
| Memo1.Lines.CommaText := ReadString('Section', 'Key', '"Gugalin, Popov"'); |
Wird in eine Zeile geschrieben.
Quelltext
1:
| Memo1.Lines.CommaText := ReadString('Section', 'Key', 'Gugalin, Popov'); |
Wird in zwei Zielen geschrieben.
Alibi - Mo 17.02.03 01:34
Naja, das Einlesen ist ja nicht so das Problem, eher das Abspeichern. :)
Einlesen:
Quelltext
1:
| MemoUpperText.Lines.CommaText := Settings.ReadString('PrintOptions','UpperText',MemoUpperText.Lines.CommaText); |
Abspeichern:
Quelltext
1:
| Settings.WriteString('PrintOptions','UpperText',MemoUpperText.Lines.CommaText); |
Das Abspeichern ergibt bei dem Memotext:
LissaJous Simulation
das hier:
LissaJous,Simulation
// Edit: Korrektur:
Das Speichern scheint einwandfrei zu funktionieren, nur das Laden nicht.
Beim Laden macht der aus dem Abgespeicherten "LissaJous Simulation" einen Zweizeiler...
// Edit: Lösung:
Wenn bei Inifiles ein String in Anführungszeichen steht werden die beim Auslesen nicht beachtet.
Also aus
Text="bla bla bla"
wird
bla bla bla
Eine kleine Korrektur beim Schreiben reicht:
Quelltext
1:
| Settings.WriteString('PrintOptions','UpperText','"'+MemoUpperText.Lines.CommaText+'"'); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!