Autor Beitrag
fdbfgh
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 03.10.10 18:14 
Hallo Ihr,

ich hab ein Problem:

Ich lese die Lines eines Memofelds in 24 Variablen ein.(umständlich aber okay).
Das speichere ich nun in eine Datei und versende sie als Datei. Alles kein Problem.

Doch die .txt Datei in die das Memofeld gespeichert wird, ist total unübersichtlich...

Es wird alles in die oberste Zeile in der .txt gespeichert, nur ich würde das sehr gerne untereinander stehen haben.
Nur wie?

Also anstatt:
Hallo. Ich heiße Peter. Wohne in München.
------------------------------
Hallo.
Ich heiße Peter.
Wohne in München.


Könnte mir bitte jemand dabei helfen?
Die Lines des Memos sind so eingelesen:

a1 := Memo.Lines[0]
b1 := Memo.Lines[1]
und so weiter...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.10.10 18:18 
Hallo und :welcome:

Also erstens: Beim Speichern musst du die Zeilenumbrüche mit speichern.

Zweitens: Ich glaube du hast vergessen dir die Möglichkeiten eines Memos einmal anzuschauen. Wie wäre es mit:
ausblenden Delphi-Quelltext
1:
MemoX.Lines.SaveToFile(...);					

Für diesen Beitrag haben gedankt: fdbfgh
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: So 03.10.10 18:22 
Wie speicherst Du die Variablen in der Datei?

Über Write(Ln)? oder Memo.Lines.SaveTofile?

Bei der Savetofile-Prozedur werden die in einzelnen Zeilen gespeichert, also nicht so, wie Du beschreibst. Ich habe es getestet.
fdbfgh Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 03.10.10 18:22 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Also erstens: Beim Speichern musst du die Zeilenumbrüche mit speichern.

Ähm, okay. Erscheint mir logisch. Doch muss ich zugeben, dass ich nicht weiß, wie ich das hinbekomme...

Und das mit den a1,b1, etc. muss schon so sein ;) Ich muss auf die nochmal zugreifen...

Moderiert von user profile iconNarses: Zitat gekürzt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.10.10 18:24 
user profile iconfdbfgh hat folgendes geschrieben Zum zitierten Posting springen:
Und das mit den a1,b1, etc. muss schon so sein ;) Ich muss auf die nochmal zugreifen...
Dann nimm am besten eine TStringList zum Zwischenspeichern. Du kannst auch direkt mit den Zeilen arbeiten.
Oder nacheinander mit einer Variable.

Wie speicherst du denn jetzt?
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: So 03.10.10 18:27 
Dann nimm doch besser einen Array von Variablen, dann ist das Speichern der Zeilen in die Variablen einfacher. Aber eigentlich sind ja die Lines von TMemo schon ein Arry. Warum also das doppelte Speichern? Und - wie schon gesagt, das Savetofile erledigt das ganze so wie gewünscht. Am besten lädst Du Dir in Deiner Anwendung einen Speicherdialog. Dann wird das Speichern einfacher. s. u.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure Speichern;
begin
  with Savedialog1 do
  begin
    if Execute then
      Memo1.Lines.SaveToFile(Filename);
  end;
end;


das war's dann schon.
fdbfgh Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 03.10.10 18:43 
Momentan speichere ich so:

AssignFile(textdatei,'C:\Dokumente und Einstellungen\Administrator\Desktop\Anfrage.txt');
Rewrite(textdatei);
writeln(textdatei,a1, b1,c1,d1,e1,f1,g1,h1, i1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1, t1, u1, v1, w1, x1, y1, z1);
closefile(Textdatei);

Ich würde das halt auch gerne so beibehalten, da ich ja jetzt auch nicht Delphi-Genie bin.
Das mit Save To File finde ich interessant und werds mir mal anschauen, aber benutzen soll/muss ich das Obere...
TStringList benutze ich wie?

Vielleicht noch eine andere, unwichtigere Frage:
'C:\Dokumente und Einstellungen\Administrator\Desktop\Anfrage.txt'
Wie lasse ich den Benutzer entscheiden wo er speichert?


Liebe Grüße
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.10.10 18:45 
user profile iconfdbfgh hat folgendes geschrieben Zum zitierten Posting springen:
Wie lasse ich den Benutzer entscheiden wo er speichert?
Siehe den Beitrag vor dir. ;-)

Dann schreibe die Writeln-Befehle einfach einzeln. Dann wird auch jeweils eine Zeile geschrieben, wenn du nicht alle Variablen in das eine Writeln und damit in die eine Zeile schreibst.

user profile iconfdbfgh hat folgendes geschrieben Zum zitierten Posting springen:
Ich würde das halt auch gerne so beibehalten, da ich ja jetzt auch nicht Delphi-Genie bin.
Und deshalb machst du es dir unnötig schwer? ;-)
fdbfgh Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 03.10.10 18:47 
So Habs jetzt mit SaveToFile gemacht.
Punkt, soll der Lehrer machen was er will. Das ist ja wirklich 100 Mal einfacher :D

So, und wenn ich jetzt zum Beispiel was aus einem Editfeld noch an den Text dranhängen will mit ner Leerzeile dazwischen?
Kann ich dann writeln noch benutzen?


LG

Danke nochmal!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.10.10 18:51 
Du kannst die Zeilen z.B. vor dem Speichern an den Text im Memo anhängen. Mit Lines.Add. Writeln brauchst du bei SaveToFile aber auch gar nicht mehr, was machst du damit denn noch? :gruebel:

Sauberer wäre es natürlich den Text zuerst in eine TStringList zu kopieren und diese dann mit SaveToFile zu speichern.

Du kannst aber auch einfach nach dem Speichern die Datei mit Append statt Rewrite öffnen, dann kannst du mit Writeln Text an die Datei anhängen.

Für diesen Beitrag haben gedankt: fdbfgh
fdbfgh Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 03.10.10 18:54 
Nun, ich will den Inhalt des Edits ja jetzt nicht in das Memofeld einfügen, sondern allein in die .txt-Datei.

Deswegen will ich da halt noch was dranhängen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.10.10 18:55 
Ja, das geht sowohl mit TStringList als auch mit nachträglichem Anhängen via Append.
fdbfgh Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 03.10.10 19:07 
Okay, ich habe mir gerade Append in der F1-Hilfe durchgelesen.
Der Zeiger springt auf die letzte Zeile...
Nur wie weiß der Befehl denn in welcher Datei er das machen soll bzw. wie sage ich ihm das, wenn ichs ja per SaveDialog mache?
ausblenden Delphi-Quelltext
1:
2:
3:
Memo.Lines.SaveToFile(FileName);
        Append(Filename); --> Das ist falsch, aber Filename.Append geht auch nicht.
        writeln(FileName, 'Blabla');

Irgendwo stehe ich auf dem schlauch, oder sehe den Wald vor lauter Bäumen nicht.
Möglich? :P

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.10.10 19:12 
Wie ich schon sagte: Append statt Rewrite in deinem ursprünglichen Code. ;-)
fdbfgh Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 03.10.10 19:20 
So jetzt verstehe ich nur noch ein wenig Bahnhof ;)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
      with Savedialog1 do
      begin
      if Execute then
        Memo.Lines.SaveToFile(FileName);
      end;

      AssignFile(textdatei,'Filename');
      Append(textdatei);
      writeln(textdatei, 'Hallo');
      closefile(Textdatei);

EInOutError markiert er bei Append.

Jetzt speichert er doch irgendwo die Datei hin. Öffnet sie und soll dann bei writeln noch Hallo reinschreiben.

Where can I find the problem, guys? :D

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.10.10 19:22 
Du hast Filename als String angegeben, du versuchst also an die Datei 'Filename' anzuhängen statt an die Datei, deren Name in der Variablen Filename gespeichert ist. ;-)

Für diesen Beitrag haben gedankt: fdbfgh
fdbfgh Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 03.10.10 19:28 
So, an alle die geholfen haben: DANKE!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
      with Savedialog1 do
      begin
      if Execute then
        Memo.Lines.SaveToFile(FileName);
        AssignFile(textdatei,Filename);
        Append(textdatei);
        writeln(textdatei, EdBeginn.Text);
        closefile(Textdatei);
      end;

Ist nun der Endgültige, funktionierende Quellcode ;)

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.10.10 19:29 
Dein if gilt aber nur für die folgende Zeile (da du das begin..end vergessen hast), das heißt du versuchst ggf. an eine nicht existierende Datei anzuhängen, wenn der Benutzer im Dialog abbrechen drückt.
fdbfgh Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 03.10.10 22:36 
1.)Wie baue ich denn ein, dass der Benutzer eine Datei : blabla.txt nennen muss?

2.) Wie erstelle ich denn über Delphi einen eigenen Ordner? Jedoch so, dass der Benutzer auswählen kann, wo?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.10.10 22:54 
user profile iconfdbfgh hat folgendes geschrieben Zum zitierten Posting springen:
1.)Wie baue ich denn ein, dass der Benutzer eine Datei : blabla.txt nennen muss?
Hört sich so an als wolltest du nur den Ordner auswählbar machen? Dann zeige den entsprechenden Dialog an, entweder mit der Funktion SelectDirectory oder über den Code hier in der Library.

Aber warum willst du den Dateinamen vorgeben? Üblich ist das ja eher nicht.

user profile iconfdbfgh hat folgendes geschrieben Zum zitierten Posting springen:
2.) Wie erstelle ich denn über Delphi einen eigenen Ordner? Jedoch so, dass der Benutzer auswählen kann, wo?
In dem Speichern-Dialog gibt es die Möglichkeit. Per Code geht das mit CreateDirectory (wer hätte das gedacht, dass die Funktion heißt wie das was sie macht :D).

Aber: andere Frage, neuer Thread bitte. ;-)
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.