Entwickler-Ecke
Sonstiges (Delphi) - .txt Formatieren und per Email senden
fdbfgh - So 03.10.10 18:14
Titel: .txt Formatieren und per Email senden
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 - 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:
Delphi-Quelltext
1:
| MemoX.Lines.SaveToFile(...); |
Tranx - 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 - So 03.10.10 18:22
jaenicke hat folgendes geschrieben : |
| 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
Narses: Zitat gekürzt.
jaenicke - So 03.10.10 18:24
fdbfgh hat folgendes geschrieben : |
| 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 - 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.
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 - 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 - So 03.10.10 18:45
fdbfgh hat folgendes geschrieben : |
| 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.
fdbfgh hat folgendes geschrieben : |
| 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 - 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 - 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.
fdbfgh - 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 - So 03.10.10 18:55
Ja, das geht sowohl mit TStringList als auch mit nachträglichem Anhängen via Append.
fdbfgh - 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?
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
Narses: Delphi-Tags hinzugefügt
jaenicke - So 03.10.10 19:12
Wie ich schon sagte: Append statt Rewrite in deinem ursprünglichen Code. ;-)
fdbfgh - So 03.10.10 19:20
So jetzt verstehe ich nur noch ein wenig Bahnhof ;)
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
Narses: Code- durch Delphi-Tags ersetzt
Moderiert von
Narses: Delphi-Tags hinzugefügt
jaenicke - 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. ;-)
fdbfgh - So 03.10.10 19:28
So, an alle die geholfen haben: DANKE!
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
Narses: Delphi-Tags hinzugefügt
jaenicke - 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 - 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 - So 03.10.10 22:54
fdbfgh hat folgendes geschrieben : |
| 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.
fdbfgh hat folgendes geschrieben : |
| 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. ;-)
Martok - Mo 04.10.10 00:41
Genau,
bitte erstelle für jede deiner Fragen ein separates Topic, da die Diskussion mehrerer Fragen in einem Topic für gewöhnlich für Verwirrung und Durcheinander sorgt. Daher:
*geschlossen*
Viele Grüße,
Martok
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!