Autor Beitrag
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: So 16.02.03 23:51 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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]);
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 17.02.03 00:21 
Für die Lösung hab ich zwei Tage gebraucht und das soll ich so vertaten? Na gut ;)

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Mo 17.02.03 00:31 
Gibt es bei Commatext nicht das Problem, dass das ganze durcheinandergerät, wenn man Kommas im Memo verwendet?
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: 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
!?
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 17.02.03 01:28 
Der Defaultwert muß dann auch ein CommaText sein, z.B.

ausblenden Quelltext
1:
Memo1.Lines.CommaText := ReadString('Section', 'Key', '"Gugalin, Popov"');					


Wird in eine Zeile geschrieben.

ausblenden Quelltext
1:
Memo1.Lines.CommaText := ReadString('Section', 'Key', 'Gugalin, Popov');					


Wird in zwei Zielen geschrieben.
Alibi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Mo 17.02.03 01:34 
Naja, das Einlesen ist ja nicht so das Problem, eher das Abspeichern. :)

Einlesen:
ausblenden Quelltext
1:
    MemoUpperText.Lines.CommaText := Settings.ReadString('PrintOptions','UpperText',MemoUpperText.Lines.CommaText);					


Abspeichern:
ausblenden 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:
ausblenden Quelltext
1:
Settings.WriteString('PrintOptions','UpperText','"'+MemoUpperText.Lines.CommaText+'"');