AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Problem : Schreiben eines Memo1.Text in ein IniFile

Problem : Schreiben eines Memo1.Text in ein IniFile

Ein Thema von EccoBravo · begonnen am 10. Apr 2008 · letzter Beitrag vom 30. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#1

Problem : Schreiben eines Memo1.Text in ein IniFile

  Alt 10. Apr 2008, 11:51
Hallo
nun habe ich folgendes Problem:

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

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
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
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.
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 10. Apr 2008, 11:55
Ersetzte die Zeilenumbrüche durch andere Zeichen und rekostruiere sie beim Einlesen wieder,
Markus Kinzler
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#3

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

  Alt 10. Apr 2008, 12:13
CommaText
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von calculon
calculon

Registriert seit: 16. Sep 2006
256 Beiträge
 
Delphi 7 Personal
 
#4

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

  Alt 10. Apr 2008, 12:41
Vielleicht hilft dir ja das weiter.
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#5

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

  Alt 10. Apr 2008, 13:18
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.
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#6

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

  Alt 10. Apr 2008, 13:23
Gibt allerdings ein Problem, wenn gewollt mal ein ## drin stehen soll.
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#7

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

  Alt 10. Apr 2008, 14:28
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
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#8

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

  Alt 10. Apr 2008, 14:28
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
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#9

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

  Alt 12. Apr 2008, 20:59
Man probiert ja einigen Leuten zu helfen aber wenn dann so ein schwachsinn bei rum oder raus kommt. Sorry ich konnt nicht anders.
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#10

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

  Alt 30. Apr 2008, 10:43
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.
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 Uhr.
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