Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem : Schreiben eines Memo1.Text in ein IniFile (https://www.delphipraxis.net/111845-problem-schreiben-eines-memo1-text-ein-inifile.html)

EccoBravo 10. Apr 2008 10:51


Problem : Schreiben eines Memo1.Text in ein IniFile
 
Hallo
nun habe ich folgendes Problem:

Ich schreibe den Inhalt eines mehrzeiligen Memos 'Memo_Fehler' in eine IniFile 'DIni'.

Delphi-Quellcode:
DIni.WriteString('Protokoll', 'Fehler', Memo_Fehler.Text);
Inhalt des 3-zeiligen Memos soll dabei sein:
Delphi-Quellcode:
Dieses ist die 1. Zeile
Dieses ist die 2. Zeile
Schluss
Im IniFile 'DIni' sieht das Ergebnis wie folgt aus:

Delphi-Quellcode:
...
[Protokoll]
Fehler=Dieses ist die 1. Zeile
Dieses ist die 2. Zeile
Schluss
...
...und wenn ich das Memo 'Memo_Fehler' wieder einlese
Delphi-Quellcode:
Memo_Fehler.Text := DIni.ReadString('Protokoll', 'Fehler', EmptyStr);
führt das - wie jeder ahnen kann - zu dem Problem,
daß im Memo 'Memo_Fehler' nur noch die erste Zeile angezeigt wird
Delphi-Quellcode:
Dieses ist die 1. Zeile
Weil im IniFile hinter '...Dieses ist die 1. Zeile' ein Zeilenumbruch erfolgte und
'Dieses ist die 2. Zeile' und 'Schluss' ohne Erklärung dastehen
werden die 2. und 3. Zeile beim Einlesen des IniFiles nicht mehr erkannt
-- und fehlen somit im eingelesenen Memo 'Memo_Fehler'.

Gibt es eine Methode, dieses Dilemma einfach zu umgehen?


Danke

E. B.

mkinzler 10. Apr 2008 10:55

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Ersetzte die Zeilenumbrüche durch andere Zeichen und rekostruiere sie beim Einlesen wieder,

Blackheart 10. Apr 2008 11:13

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
CommaText

calculon 10. Apr 2008 11:41

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Vielleicht hilft dir ja das weiter.

EccoBravo 10. Apr 2008 12:18

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Danke allerseits,
funktioniert wunderbar

Code hängt bei.

Die Wandlung MemoToStr();
Delphi-Quellcode:
function MemoToStr(M: string): string;
var
    i, l: integer;
begin
    l := Length(M);
    for i := 1 to l - 1 do
    begin
        if (M[i] = #13) and (M[i + 1] = #10) then
        begin
            M[i] := '#';
            M[i + 1] := '#';
        end;
    end;
    result:=M;
end;
Die Wandlung StrToMemo();
Delphi-Quellcode:
function StrToMemo(S: string): string;
var
    i, l: integer;
begin
    l := Length(S);
    for i := 1 to l - 1 do
    begin
        if (S[i] = '#') and (S[i + 1] = '#') then
        begin
            S[i] := #13;
            S[i + 1] := #10;
        end;
    end;
    result:=S;
end;
Das Abspeichern eines Memos in ein IniFile
Delphi-Quellcode:
...
DIni.WriteString('Protokoll', 'Fehler', MemoToStr(M_Fehler.Text));
...
Das zurückladen eines Memos aus dem IniFile
Delphi-Quellcode:
...
M_Fehler.Text := StrToMemo(FIni.ReadString('Protokoll', 'Fehler', EmptyStr));
...
Dank und
Grüße

E. B.

Die Muhkuh 10. Apr 2008 12:23

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Gibt allerdings ein Problem, wenn gewollt mal ein ## drin stehen soll.

EccoBravo 10. Apr 2008 13:28

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Danke für den Einwand,
weiss ich, nehme ich in Kauf, will ich so und alle sind informiert.

aber danke


PS.:
Lustiger Name -
Eine Kuh macht Muh - viele Kühe machen Mühe

TonyR 10. Apr 2008 13:28

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Ich hätte dir auch empfohlen, das memo in eine Textdatei zu speichern (die du ja meinetwegen "Datei.INI" nennen kannst).

Alternativ würde ja auch noch gehen die Zeilen einzeln einzuspeichern und in eine eigene Section zu hauen
Code:
[Section]
1=zeile eins
2=zeile zwei
usw.
Da benötigst du aber dann noch eine Routine zum Elemente-zählen der Sections oder ein Extra Eintrag für die Menge der Zeilen :)

Blackheart 12. Apr 2008 19:59

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Man probiert ja einigen Leuten zu helfen aber wenn dann so ein schwachsinn bei rum oder raus kommt. Sorry ich konnt nicht anders.

EccoBravo 30. Apr 2008 09:43

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Hallo, meine Fragerei geht weiter, wenn es nach einiger Leute Meinung auch reiner Schwachsinn ist, aber es gibt auch Leute die bauen Bomben und behaupten, wir Menschen bräuchten diese - Schwachsinn!

Ersterer Code mit dem Tauschen von #13#10 mit irgendwelchen "Pseudozeichen"("##") und das Rücktauschen, alles zum Zwecke, ein mehrzeiliges TMemo in einem IniFile zwischenzulagern funktioniert zur Zufriedenheit. Dafür erst mal - auch trotz der Einwände - vielen Dank!

Aber nun von mir zu gleicher Sache eine vollständige Konsternation, als ich diese Aufgabe zur Ausführung in eine "eigene" Klasse auslagerte.
Der Code ist hier angefügt:

[hier nochmal ausprobiert und Frage ünerarbeitet]

Delphi-Quellcode:
unit EB_Pat_Foto_Satz_U;

interface

uses
    variants, sysutils, classes, contnrs;

type
    TSatz = class(TObject)
    private
        ...
        FNotiz: string;
        ...
        ...
        function GetNotiz: string;
        ...
        procedure SetNotiz(const Value: string);
        ...
    public
        ...
        property Notiz: string read GetNotiz write SetNotiz;
        ...
    end;

implementation

uses EB_Pat_Foto_U, controls;
...

// das lesen und Schreiben in die Ini erfolgt über FNotiz
// also im Hauptprogramm über Satz.Notiz

function TSatz.GetNotiz: string;
begin
    result := StringReplace(FNotiz, '##', #13 + #10, [rfReplaceAll]);
    // damit liesst er nicht richtig in die TMemo zurück
    // ins Memo erhalte ich z.B. "Dieses##ist##ein##Vogel" zurück
    // also keinen Vierzeiler wie erwartet
end;

...

procedure TSatz.SetNotiz(const Value: string);
begin
    FNotiz := StringReplace(Value, #13 + #10,'##', [rfReplaceAll]);
    // damit schreibt er richtig in die Ini
    // Vom Vierzeiler aus dem TMemo
    // gelangt ins Ini z.B.:
    // [Tier]
    // Memo=Dieses##ist##ein##Vogel
end;

...

end.
über die SetNotiz wird das schreibfähige FNotiz richtig erzeugt,
also werden #13#10 gegen ## richtig ausgetauscht um als eine Zeile ins Ini zu gelangen
aber
über GetNotiz werden die Ersatzzeichen ## für die erneute Anzeige im TMemo
nicht zu #13#10 zurückgetauscht, um im TMemo als mehrzeiligen Text anzuzeigen

Habe ich da etwas falsch gemacht oder sie Get... und Set...Methoden nicht richtig verstanden?

Habt vielen Dank für Hilfe

E. B.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz