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 Mehrzeiligen Text in Ini speichern (https://www.delphipraxis.net/14494-mehrzeiligen-text-ini-speichern.html)

citybreaker 10. Jan 2004 14:33


Mehrzeiligen Text in Ini speichern
 
Hallo,

wie kann man einen Mehrzeiligentext (aus einem TMemo Feld)
in eine Ini Datei speichern und anschließend wieder auslesen?

MrKnogge 10. Jan 2004 14:50

Re: Mehrzeiligen Text in Ini speichern
 
Speicher doch die Anzahl deiner Zeilen, und dann Zeile für Zeile ab:
Delphi-Quellcode:
ZeilenAnzahl := Memo1.Lines.Count
ErsteZeile := Memo1.Lines.Strings[0];

MathiasSimmack 10. Jan 2004 14:56

Re: Mehrzeiligen Text in Ini speichern
 
Zitat:

Zitat von MrKnogge
Speicher doch die Anzahl deiner Zeilen, und dann Zeile für Zeile ab:

Zeile für Zeile ist ein guter Vorschlag. Die Anzahl der Zeilen ist es allerdings IMHO nicht. Wenn du das Einlesen von diesem Wert abhängig machst und jemand treibt Schabernack und verändert den Wert, dann liest du entweder zuwenig oder zuviel ein, bzw. es erscheint evtl. eine Fehlermeldung.

Ich würde für den Memo-Inhalt eine eigene Sektion anlegen und dort die einzelnen Zeilen speichern. Einlesen lässt es sich dann mit "ReadSection" (Anzahl und Namen der Einträge ermitteln), und damit ist man vor Schabernack zumindest technisch geschützt.
"zumindest technisch" heißt, natürlich kann jemand ganze Zeilen löschen. Allerdings ist man von einem Wert für die Anzahl unabhängig und liest damit nur die tatsächlich vorhandenen Einträge ein.

citybreaker 10. Jan 2004 15:26

Re: Mehrzeiligen Text in Ini speichern
 
Zitat:

Zitat von MrKnogge
Speicher doch die Anzahl deiner Zeilen, und dann Zeile für Zeile ab:
Delphi-Quellcode:
ZeilenAnzahl := Memo1.Lines.Count
ErsteZeile := Memo1.Lines.Strings[0];

Ich versteh nicht ganz wie ich das jetzt mit ner Ini machen soll. :oops:
@MathiasSimmack Danke, werde es mal ausprobieren.

axelf98 10. Jan 2004 16:05

Re: Mehrzeiligen Text in Ini speichern
 
So gehts mit einer Ini-Datei:

Delphi-Quellcode:
  files := tinifile.Create('C:\test.ini');

   files.Writeinteger('Text','lines',memo1.lines.count-1); // Anzahl Zeilen

  for i := 0 to (memo1.Lines.Count-1) do
     files.WriteString('Text','Zeile'+inttostr(i),memo1.Lines.Strings[i]);
  files.Free;

Beim Auslesen natürlich einfach das Memo mit einer Schleife füllen:

Delphi-Quellcode:
  memo1.Lines.Clear;
  files := tinifile.Create('C:\test.ini');

  for i := 0 to files.ReadInteger('Text','lines',-1) do      // Memo füllen
   begin
    Memo1.Lines.Add( files.readstring('Text','Zeile'+inttostr(i),'-'));
   end;

  files.free;

citybreaker 10. Jan 2004 16:30

Re: Mehrzeiligen Text in Ini speichern
 
Danke, es klappt. :thuimb:

Duffy 10. Jan 2004 16:51

Re: Mehrzeiligen Text in Ini speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo alle zusammen,
so wäre es auch elegant gegangen ...

Lesen:
Delphi-Quellcode:
Memo1.Lines.CommaText := IniFile.ReadString('Memo', 'Commatext', '');
Schreiben:
Delphi-Quellcode:
IniFile.WriteString('Memo', 'Commatext', Memo1.Lines.CommaText);
bye
Claus

citybreaker 10. Jan 2004 17:14

Re: Mehrzeiligen Text in Ini speichern
 
Zitat:

Zitat von Duffy
Hallo alle zusammen,
so wäre es auch elegant gegangen ...

Lesen:
Delphi-Quellcode:
Memo1.Lines.CommaText := IniFile.ReadString('Memo', 'Commatext', '');
Schreiben:
Delphi-Quellcode:
IniFile.WriteString('Memo', 'Commatext', Memo1.Lines.CommaText);
bye
Claus

Huch, das ist ja ne schöne kurze Lösung, danke!
Werde dann das nehmen.

--- Edit ---
So kann man aber keinen vernüftigen text speichern.

Beispiel:

Hallo Citybreaker,
wie gehts.

Ausgabe nach dem öffnen:

Hallo
Citybreaker
,
wie gehts

MathiasSimmack 10. Jan 2004 17:23

Re: Mehrzeiligen Text in Ini speichern
 
Zitat:

Zitat von axelf98
Delphi-Quellcode:
files.Writeinteger('Text','lines',memo1.lines.count-1); // Anzahl Zeilen
[...]

Delphi-Quellcode:
for i := 0 to files.ReadInteger('Text','lines',-1) do      // Memo füllen

Das ist genau das, was ich meinte und nicht benutzen würde. Ändert jetzt jemand den Wert in der INI-Datei, liest du entweder zuwenig Zeilen, bzw. es könnte eine Fehlermeldung auftauchen, wenn nicht genug Zeilen da sind. :roll:

Zitat:

Zitat von Duffy
so wäre es auch elegant gegangen ...

Lesen:
Delphi-Quellcode:
Memo1.Lines.CommaText := IniFile.ReadString('Memo', 'Commatext', '');
Schreiben:
Delphi-Quellcode:
IniFile.WriteString('Memo', 'Commatext', Memo1.Lines.CommaText);

Davon würde ich persönlich abraten. Wenn ich mich recht erinnere, gab´s bei INI-Dateien ein Maximum. Sprich: die Anzahl der Zeichen, die man lesen bzw. schreiben kann. Die Idee, den kompletten Text zu schreiben, könnte u.U. bei einem sehr umfangreichen Dokument nicht funktionieren.

Dann würde ich doch empfehlen, die eingebaute Memo-Speicherfunktion "SaveToFile" und ihr Gegenstück "LoadToFile" zu benutzen. Das ist dann zwar keine INI-Datei, aber man könnte ja in die INI eine Referenz auf die vom Memo erzeugte Datei schreiben und diese dann auch im selben Ordner ablegen.

Duffy 10. Jan 2004 17:25

Re: Mehrzeiligen Text in Ini speichern
 
Hallo citybreaker,
ich glaube, da hast Du Recht. Ich habe es auf die schnelle mit einfachen Texten (siehe Beispiel) probiert.
Also bleibt nur Methode 1.

bye
Claus

[Edit]habe nochmal nachgeschaut, für diese Zwecke ist ist CommaText ein Flop, SORRY[/Edit]


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