![]() |
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:
Inhalt des 3-zeiligen Memos soll dabei sein:
DIni.WriteString('Protokoll', 'Fehler', Memo_Fehler.Text);
Delphi-Quellcode:
Im IniFile 'DIni' sieht das Ergebnis wie folgt aus:
Dieses ist die 1. Zeile
Dieses ist die 2. Zeile Schluss
Delphi-Quellcode:
...und wenn ich das Memo 'Memo_Fehler' wieder einlese
...
[Protokoll] Fehler=Dieses ist die 1. Zeile Dieses ist die 2. Zeile Schluss ...
Delphi-Quellcode:
führt das - wie jeder ahnen kann - zu dem Problem,
Memo_Fehler.Text := DIni.ReadString('Protokoll', 'Fehler', EmptyStr);
daß im Memo 'Memo_Fehler' nur noch die erste Zeile angezeigt wird
Delphi-Quellcode:
Weil im IniFile hinter '...Dieses ist die 1. Zeile' ein Zeilenumbruch erfolgte und
Dieses ist die 1. Zeile
'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. |
Re: Problem : Schreiben eines Memo1.Text in ein IniFile
Ersetzte die Zeilenumbrüche durch andere Zeichen und rekostruiere sie beim Einlesen wieder,
|
Re: Problem : Schreiben eines Memo1.Text in ein IniFile
CommaText
|
Re: Problem : Schreiben eines Memo1.Text in ein IniFile
Vielleicht hilft dir ja
![]() |
Re: Problem : Schreiben eines Memo1.Text in ein IniFile
Danke allerseits,
funktioniert wunderbar Code hängt bei. Die Wandlung MemoToStr();
Delphi-Quellcode:
Die Wandlung StrToMemo();
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;
Delphi-Quellcode:
Das Abspeichern eines Memos in ein IniFile
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;
Delphi-Quellcode:
Das zurückladen eines Memos aus dem IniFile
...
DIni.WriteString('Protokoll', 'Fehler', MemoToStr(M_Fehler.Text)); ...
Delphi-Quellcode:
Dank und
...
M_Fehler.Text := StrToMemo(FIni.ReadString('Protokoll', 'Fehler', EmptyStr)); ... Grüße E. B. |
Re: Problem : Schreiben eines Memo1.Text in ein IniFile
Gibt allerdings ein Problem, wenn gewollt mal ein ## drin stehen soll.
|
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 |
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:
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 :)
[Section]
1=zeile eins 2=zeile zwei usw. |
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.
|
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:
über die SetNotiz wird das schreibfähige FNotiz richtig erzeugt,
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. 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 04:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz