Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Mehrere MEMO-Felder speichern. Wo ist hier der Fehler? (https://www.delphipraxis.net/176170-mehrere-memo-felder-speichern-wo-ist-hier-der-fehler.html)

Erutan 15. Aug 2013 23:49

Delphi-Version: 5

Mehrere MEMO-Felder speichern. Wo ist hier der Fehler?
 
Hallo, bei dem Versuch, mehrere Memofelder nach der Methode in einem älteren Delphibuch in eine Datei zu speichern, komme ich nicht weiter.

Delphi-Quellcode:
procedure TForm1.Button16Click(Sender: TObject);
var
Datei: TextFile;
text_datei: TextFile;
text_zeilen: string;
zeilen_num: Integer;
begin
if SaveDialogAlles.Execute then
 

  AssignFile(Datei, SaveDialogAlles.FileName);
  Rewrite(Datei);
  WriteLn(Datei, EditName.Text);
  WriteLn(Datei,EditEmail.Text);
  WriteLn(Datei,EditTelefon.Text);
  WriteLn(Datei,EditAgentur.Text);
  WriteLn(Datei,EditFirma.Text);
  WriteLn(Datei,EditWebseite.Text);
  WriteLn(Datei,EditUsername.Text);
  WriteLn(Datei,EditPassword.Text);
  //WriteLn(Datei,MemoKontaktdaten.Lines);
  //WriteLn(Datei,MemoPortrait.Lines);
  //--------------Test----------------------
   for zeilen_num := 0 to MemoKontaktdaten.Lines.Count -1 do
   begin
   //liest geänderte Zeilen in Variable
   text_zeilen := IntToStr(zeilen_num) + MemoKontaktdaten.Lines(zeilen_num);

   //schreibt in Datei Zeile für Zeile
   WriteLn(datei,text_zeilen);
   end; //for end


  //------------Test Ende---------------------


  CloseFile(Datei);
end;

Der Complier stoppt bei

Delphi-Quellcode:
 MemoKontaktdaten.Lines(zeilen_num);
mit dem Curser zwischen ( und zeilen_num und sagt Missing Operator oder Semicolon.

Das ist eigentlich schon der x-te Versuch, Memofelder zusammen mit Editfeldern in eine Datei zu speichern. Die beiden auskommentieren Zeilen darüber wären mir mit Abstand am liebst. Geht aber nicht.
Hat jemand eine Idee wie ich ähnlich einfach den Inhalt, zusammen mit den anderen Inhalten, abspeichern kann?

Viele Grüße
Erutan

Zacherl 15. Aug 2013 23:51

AW: Mehrere MEMO-Felder speichern. Wo ist hier der Fehler?
 
Lines[], statt Lines() verwenden, dann sollte es funktionieren.

Zu deinen auskommentierten Zeilen:
Delphi-Quellcode:
WriteLn(Datei,MemoKontaktdaten.Lines.DelimitedText);
WriteLn(Datei,MemoPortrait.Lines.DelimitedText);

Union 15. Aug 2013 23:53

AW: Mehrere MEMO-Felder speichern. Wo ist hier der Fehler?
 
Lines ist eine Array-Property mit Index. Also den Parameter mit eckigen Klammern angeben.

Erutan 16. Aug 2013 00:28

AW: Mehrere MEMO-Felder speichern. Wo ist hier der Fehler?
 
Hey,

das gig ja schnell :-)

Funktioniert beides einwandfrei. Kann kaum glauben, daß es nur so ein kleiner Fehler war der mich tagelang umgetrieben hat.
Kann es denn sein, daß sich die Syntax seit Delphi5 geändert hat? Ich habe mir das Codebeispiel aus dem Buch "Delphi5 lernen" noch mal angeguckt. Da stehen runde Klammern.

Ich habe die auskommentierten Zeilen wieder auskommentiert und die Zeilennummerierung abgeschaltet.

Vielen herzlichen Dank dafür!

Der Code sieht jetzt so aus:

Delphi-Quellcode:
procedure TForm1.Button16Click(Sender: TObject);
var
Datei: TextFile;
text_datei: TextFile;
text_zeilen: string;
zeilen_num: Integer;
begin
if SaveDialogAlles.Execute then
 

  AssignFile(Datei, SaveDialogAlles.FileName);
  Rewrite(Datei);
  WriteLn(Datei, EditName.Text);
  WriteLn(Datei,EditEmail.Text);
  WriteLn(Datei,EditTelefon.Text);
  WriteLn(Datei,EditAgentur.Text);
  WriteLn(Datei,EditFirma.Text);
  WriteLn(Datei,EditWebseite.Text);
  WriteLn(Datei,EditUsername.Text);
  WriteLn(Datei,EditPassword.Text);
 // WriteLn(Datei,MemoKontaktdaten.Lines.DelimitedText);
//  WriteLn(Datei,MemoPortrait.Lines.DelimitedText);
  //--------------Test----------------------
   for zeilen_num := 0 to MemoKontaktdaten.Lines.Count -1 do
   begin
   //liest geänderte Zeilen in Variable
   text_zeilen := MemoKontaktdaten.Lines[zeilen_num];

   //schreibt in Datei Zeile für Zeile
   WriteLn(datei,text_zeilen);
   end; //for end


   for zeilen_num := 0 to MemoPortrait.Lines.Count -1 do
   begin
   //liest geänderte Zeilen in Variable
   text_zeilen := MemoPortrait.Lines[zeilen_num];

   //schreibt in Datei Zeile für Zeile
   WriteLn(datei,text_zeilen);
   end; //for end
  //------------Test Ende---------------------


  CloseFile(Datei);
end;

Das führt dazu, daß jeweils die Inhalte der Editfelder zeilenweise gespeichert werden und auch die Inhalte meiner beiden Memofelder zweilenweise gespeichert werden.

Nun habe ich nur noch eine Frage: Wie schreibe ich sie wieder in die entsprechenden Felder zurück?
Bei den Editfeldern weiß ich wie das geht.

Delphi-Quellcode:
 if OpenDialogAlles.Execute
 then
 AssignFile(Datei, OpenDialogAlles.Filename);
 Reset(Datei);
 ReadLn(Datei,String1);
 EditName.Text:=String1;
 ReadLn(Datei,String1);
 EditEmail.Text:=String1;
 ReadLn(Datei,String1);
 EditTelefon.Text:=String1;
 CloseFile(Datei);
Aber wie geht das bei den Memofeldern?

Volker Z. 16. Aug 2013 01:10

AW: Mehrere MEMO-Felder speichern. Wo ist hier der Fehler?
 
Hallo,

Zitat:

Kann es denn sein, daß sich die Syntax seit Delphi5 geändert hat? Ich habe mir das Codebeispiel aus dem Buch "Delphi5 lernen" noch mal angeguckt. Da stehen runde Klammern.
Nein, da liegt wohl ein Tipfehler vor.

Zitat:

Bei den Editfeldern weiß ich wie das geht. [...] Aber wie geht das bei den Memofeldern?

Speicher doch die Anzahl der Zeilen Deiner Memos ab. Also beim Speichern:
Delphi-Quellcode:
procedure TForm1.Button16Click(Sender: TObject);
var
  linecount : Integer;
  //[...]
begin
  linecount := MemoKontaktdaten.Lines.Count;
  WriteLn (Datei, IntToStr (linescount));
  for zeilen_num := 0 to linescount - 1 do
    WriteLn (Datei, MemoKontaktdaten.Lines.Count [zeilen_num]);
end;
und beim Einlesen
Delphi-Quellcode:
var
  linecount : string;

  if OpenDialogAlles.Execute then
    begin
      AssignFile(Datei, OpenDialogAlles.Filename);
      Reset(Datei);
      ReadLn(Datei,String1);
      EditName.Text:=String1;
      ReadLn(Datei,String1);
      EditEmail.Text:=String1;
      ReadLn(Datei,String1);
      EditTelefon.Text:=String1;

      // Exemplarisch für MemoKontaktdaten
      ReadLn (Datei, linecount);
      try
        MemoKontaktdaten.Lines.BeginUpdate;
        MemoKontaktdaten.Lines.Clear;
        for i := 0 to StrToInt (linecount) - 1 do
          begin
            ReadLn (Datei, String1);
            MemoKontaktdaten.Lines.Add (String1)
          end;
      finally
        MemoKontaktdaten.SelStart := 0;
        MemoKontaktdaten.Lines.EndUpdate
      end;

      CloseFile(Datei);
    end
Gruß

Erutan 16. Aug 2013 01:25

AW: Mehrere MEMO-Felder speichern. Wo ist hier der Fehler?
 
Hi Volker,

herzlichen Dank.

Ich werd's ausprobieren sobald meine Acronis-Sicherung, die gerade eben gestartet ist, abgeschlossen ist. Melde mich dann wieder

Viele Grüße

Hansa 16. Aug 2013 03:27

AW: Mehrere MEMO-Felder speichern. Wo ist hier der Fehler?
 
Zitat:

Zitat von Erutan (Beitrag 1225067)
Ich habe mir das Codebeispiel aus dem Buch "Delphi5 lernen" noch mal angeguckt. Da stehen runde Klammern.

Prinzipiell könnte das durchaus sein. "[" = "(." bzw. "]" = ".)". Den Punkt bei den Klammern, den könnte man wohl wirklich leicht übersehen. 8-)


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