Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi in eine Ini – Datei den Text von einem Memofeld speichern (https://www.delphipraxis.net/10613-eine-ini-%96-datei-den-text-von-einem-memofeld-speichern.html)

Remote1 22. Okt 2003 09:17


in eine Ini – Datei den Text von einem Memofeld speichern
 
Wie kann ich in eine Ini – Datei den Text von einem Memofeld speichern?
Mit
Ini.WriteString(datetimetostr(datum),'Text',form1. memo1.text);
wird nur die 1. Zeile des Memos gespeichert.
Ich könnte natürlich auch Memo1.Lines.SaveToFile(’C:\test.txt’) verwenden, aber ich brauche unbedingt die Einteilung in Sections wie bei Ini - Dateien.
Ich kann auch nicht alle Zeilen einzeln durchgehen und speichern, da ich natürlich auch alle ENTER vom Memo mit übertragen möchte (nicht einzelne Lines, da jede Zeile nicht unbedingt durch ein ENTER, sondern auch durch Zeilensprung neue Line).
Kann mir irgend jemand weiterhelfen oder gibt es noch ein ähnliches Objekt was ich verwenden könnte???
Im Prinzip bräuchte ich ein SaveToFile mit Sections

Remote1 22. Okt 2003 09:40

Re: in eine Ini – Datei den Text von einem Memofel
 
Hab’s jetzt mal mit noch ner StringList probiert, aber ist natürlich ein wenig billig gemacht (aber es funktioniert zumindest schon mal annähernd so wie ich das will)
Ich denke aber mal, dass ich da irgend wann Probleme mit dem
temp.LoadFromFile(pfad);
bekommen werde, da es ja auch immer mehr Text wird welcher geladen werden muss.
Da würde schon mal mein Programm immer langsamer und was ist wenn der Arbeitsspeicher nicht mehr ausreicht???
Zumal hat ein Memo ja auch eine begrenzte Anzahl von Zeichen (habs mal ausprobiert, waren ca. 56511)
Also Ihr seht, keine perfekte Lösung, aber ein Ansatz.
Vielleicht habt Ihr ja noch ne zündende Idee.


Delphi-Quellcode:
if form1.Memo1.Lines[0]=''
 then
  begin
   Form1.Memo1.Clear;
   exit;
  end;
pfad:='D:\memo.txt';
temp:=TStringList.Create;
if not fileexists(pfad)
 then
  begin
   temp.Clear;
   temp.SaveToFile(pfad);
  end;
temp.LoadFromFile(pfad);
temp.Add('['+datetimetostr(now)+']');
temp.Add(memo1.Text);
temp.Add('');
temp.SaveToFile(pfad);
memo1.Clear;
temp.Clear;
[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

Alexander 22. Okt 2003 10:12

Re: in eine Ini – Datei den Text von einem Memofeld speicher
 
einfahc mit einer For-SChleife jede Zeile durchgehen, am besten du speicherst es in der Form ab:
Code:
1=erste Zeile..
2=zweite Zeile...
Edit: Du weißt, dass es beim Memo auch die Funktion SaveToFile() gibt, oder?

Remote1 22. Okt 2003 10:18

Re: in eine Ini – Datei den Text von einem Memofeld speicher
 
wie im oberen komment angegeben möchte ich savetofile() nicht verwenden, da ich eine einteilung in sections brauche und wenn ich jede zeile einzeln iun eine ini schreibe komme ich irgend wann an meine 32 einträge ran
zudem geht mir dann das enter verlogen, da nicht jede zeile ein enter druck ist sondern auch ein zeilenumsprung sein kann.
mit savetofile() ist dies nicht der fall. es werden alle zeilen richtig mit enter gespeichert (bei enter neue zeile), aber ich hab da keine sections.
mir würde es ja schon helfen, wenn ich die datei nicht jedes mal neu lade müsste, sondern einfach etwas hinten dran hengen könnte

Alexander 22. Okt 2003 10:23

Re: in eine Ini – Datei den Text von einem Memofeld speicher
 
Dann machst du halt ne kleine Schleife, die immer nach dem #13#10 (Enter) sucht und dann den entsprechenden text rauskopiert und den speicherst du dann ab.
Kuck dir dazu mal die While-Schliefen und POS an.

Christian Seehase 22. Okt 2003 10:26

Re: in eine Ini – Datei den Text von einem Memofel
 
Moin Remote,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Zitat:

Zitat von Remote1
wenn ich jede zeile einzeln iun eine ini schreibe komme ich irgend wann an meine 32 einträge ran

:gruebel:

was für 32 Einträge?

Zitat:

Zitat von Remote1
da nicht jede zeile ein enter druck ist sondern auch ein zeilenumsprung sein kann.
mit savetofile() ist dies nicht der fall. es werden alle zeilen richtig mit enter gespeichert (bei enter neue zeile),

Da hab' ich auch ein Verständnisproblem.
Wenn Du jede Zeile als Eintrag in einer INI speicherst, und wieder lädst, indem Du sie mit Memo.Lines.Add hinzufügst, hast Du auch einen Zeilenvorschub.
Beim Einlesen über LoadFromFile werden sogar einzelne #10 in #13#10 umgewandelt. D.h.: Im Memo ist immer #13#10 als Zeilenende enthalten.

Remote1 22. Okt 2003 10:33

Re: in eine Ini – Datei den Text von einem Memofeld speicher
 
hi Chris
ist ja im prinzip meine rede.
ich will halt eine ini welche mehrzeilige strings speichert und zwar nach jedem enter eine neue zeile.
wenn ich nun das memo durchgehe und #10#13 durch einen platzhalter ersetze habe ich zwar dann insgesammt eine zeile und könnte dies in meine ini speichern, aber was ist wenn der nutzer duch einen blöden zufall genau diesen platzhalter in das memo schreibt, dann stimmen die enter nicht mehr

Christian Seehase 22. Okt 2003 10:35

Re: in eine Ini – Datei den Text von einem Memofel
 
Moin Remote,

ich dachte eigentlich daran, jeder Zeile im Memo eine Zeile in der INI zu spendieren:

Code:
[MEMO]
Zeile1=aljalsfdjlsad
Zeile2=ajlflaöasdfj

usw.

Remote1 22. Okt 2003 10:37

Re: in eine Ini – Datei den Text von einem Memofeld speicher
 
seht euch doch bitte mal oben meinen ansatz an
da hab ichs ja schon fast (alle enter richtig gesetzt und als section das datum)
mein problem bei dem ansatz ist halt nur das laden der datei, denn was ist wenn die datei mal ein paar MB groß ist
dann würde die ganze sache zu lange dauern
und problem nummer zwei ist die beschränkte zeichenanzahl (blöd wenn man z.b. texte mit Str+V einfügt und die zu groß sind, dann wird nähmlich einfach das ende abgeschnitten)

Billa 22. Okt 2003 11:04

Re: in eine Ini – Datei den Text von einem Memofeld speicher
 
Hallo Remote1,

abgesehen davon, daß INI-Files schon ein etwas betagtes Konzeot sind (MS empfiehlt die Registry zu verwenden): brauchst Du wirklich immer den ganzen Text? Dann speichere doch den Text direkt aus dem Memo in eine Datei mit eindeutigem Namen und speichere in der INI nur den Namen (mit Pfad o.ä.), das reduziert die Lesezeiten der INI erheblich und Du lädst den Text halt bei Bedarf. Das sind nur wenige Anweisungen mehr und geht sehr zügig. So arbeiten übrigens viele Datenbanken!
Damit bleibt der Hauptvorzug von INI-Dateien (schneller Zugriff wg. Section etc.) einigermaßen erhalten. Jede zeilenweise Behandlung ist deutlich langsamer und aufwendiger!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:03 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