Entwickler-Ecke
Dateizugriff - Memo Text in Textfile speichern
Wolfgang - Do 19.01.06 12:04
Titel: Memo Text in Textfile speichern
Hi!
Ich will den Editor von Windows nachprogrammieren.
Leider habe ich kleine Probleme damit den Text meines Memos in die Datei zu speichern.
Soweit hab ichs bereits:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| procedure TForm2.Button1Click(Sender: TObject); var Filename: string; outfile: Textfile; a: integer; begin
a:=0; Filename:=directorylistbox1.directory; if FileExists(FileName+edit1.Text+'.txt') then begin if MessageDlg('Die Datei ' + Edit1.Text + '.txt existiert bereits. Wollen Sie sie überschreiben?', mtWarning, [mbYes, mbNo], 0) = mrYes then begin AssignFile(outfile, filename+Edit1.Text+'.txt'); Rewrite(outfile); repeat Writeln(outfile, form1.memo1.lines.strings[a]); a:=a+1; until form1.memo1.lines.strings[a]=''; CloseFile(outfile); end; end; AssignFile(outfile, filename+Edit1.Text+'.txt'); Rewrite(outfile); repeat Writeln(outfile, form1.memo1.lines.strings[a]); a:=a+1; until form1.memo1.lines.strings[a]=''; CloseFile(outfile);
end; |
Er speichert immer nur ein Textfile mit einem Enter (leer).
Kann mir bitte wer sagen was der Fehler ist?
thx im Vorhinein!
Moderiert von
Gausi: Topic aus Sonstiges (Delphi) verschoben am Do 19.01.2006 um 16:51
Gausi - Do 19.01.06 12:09
Hmmm. ich weiß nicht, wo dein Fehler liegt. Aber warum nimmst du nicht einfach Memo1.lines.Savetofile('c:\Test.txt');?
Wolfgang - Do 19.01.06 12:18
Danke sehr!
Das Problem ist gelöst.
Ich hab den Befehl nicht genutzt, weil ich ihn nicht kannte und nicht in der Hilfe gefunden habe.
thx a lot!
Crowbar - Di 07.02.06 13:36
Hi,
ich möchte das Thema noch einmal aufgreifen.
Ist es möglich, den Inhalt von 2 Memo-Feldern in eine Datei zu speichern und natürlich wieder entsprechend zu laden, damit der Text1 im Memo-Feld1 und Text2 im Memofeld2 steht?
Cu
Crowbar
Marco D. - Di 07.02.06 13:41
Ja.
Du kannst beide 'Lines' von beiden Memos in einer Stringlist zusammenfassen und diese dann abspeichern. Du musst dann aber zwischen erstem Memo und zweitem Memo eine Markierung setzen, um sie beim Laden auseinanderhalten zu können.
Crowbar - Di 07.02.06 13:58
Das ist ein guter Anhaltspunkt. Ich werde es austesten.
(Ich hoffe, dass der Programmier-"Aufwand" nicht zu gross wird. :roll: )
Dankeschön.
Cu
Crowbar
Crowbar - Di 07.02.06 15:54
So,
den folgenden Code habe ich getestet und funktioniert. :D
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| ... Var memoAll : TStringList; ... procedure TForm1.SpeicherBtnClick(Sender: TObject); begin memoAll:=TStringList.Create; memoAll.Add('Memo 1:'); memoAll.AddStrings(Memo1.Lines); memoAll.Add('Memo 2:'); memoAll.AddStrings(Memo2.Lines); memoAll.Add('Memo 3:'); memoAll.AddStrings(Memo3.Lines); memoAll.SaveToFile('F:\Text.txt'); memoAll.Free; end;
procedure TForm1.LadenBtnClick(Sender: TObject); Var x,m1,m2,m3 : Integer;
begin Memo1.Clear; Memo2.Clear; Memo3.Clear; memoAll:=TStringList.Create; memoAll.LoadFromFile('F:\Text.txt'); for x:=0 to memoAll.Count-1 do begin m1:=memoAll.IndexOf('Memo 1:'); m2:=memoAll.IndexOf('Memo 2:'); m3:=memoAll.IndexOf('Memo 3:'); end; for x:=m1+1 to m2-1 do Memo1.Lines.Add(memoAll.Strings[x]); for x:=m2+1 to m3-1 do Memo2.Lines.Add(memoAll.Strings[x]); for x:=m3+1 to memoAll.Count - 1 do Memo3.Lines.Add(memoAll.Strings[x]); memoAll.Free; end; |
Natürlich müssen noch die entsprechenden Fehlerbehandlungsroutinen eingebaut werden.
Cu
Crowbar
Moderiert von
Gausi: Code- durch Delphi-Tags ersetzt
Marco D. - Di 07.02.06 15:59
Crowbar hat folgendes geschrieben: |
So,
den folgenden Code habe ich getestet und funktioniert. :(
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| ... Var memoAll : TStringList; ... procedure TForm1.SpeicherBtnClick(Sender: TObject); begin memoAll:=TStringList.Create; memoAll.Add('Memo 1:'); { Marker 1 setzen } memoAll.AddStrings(Memo1.Lines); memoAll.Add('Memo 2:'); { Marker 2 setzen } memoAll.AddStrings(Memo2.Lines); memoAll.Add('Memo 3:'); { Marker 3 setzen } memoAll.AddStrings(Memo3.Lines); memoAll.SaveToFile('F:\Text.txt'); memoAll.Free; end;
procedure TForm1.LadenBtnClick(Sender: TObject); Var x,m1,m2,m3 : Integer;
begin Memo1.Clear; Memo2.Clear; Memo3.Clear; memoAll:=TStringList.Create; memoAll.LoadFromFile('F:\Text.txt'); for x:=0 to memoAll.Count-1 do begin m1:=memoAll.IndexOf('Memo 1:'); { Position der Marker finden } m2:=memoAll.IndexOf('Memo 2:'); m3:=memoAll.IndexOf('Memo 3:'); end; for x:=m1+1 to m2-1 do Memo1.Lines.Add(memoAll.Strings[x]); for x:=m2+1 to m3-1 do Memo2.Lines.Add(memoAll.Strings[x]); for x:=m3+1 to memoAll.Count - 1 do Memo3.Lines.Add(memoAll.Strings[x]); memoAll.Free; end; |
Natürlich müssen noch die entsprechenden Fehlerbehandlungsroutinen eingebaut werden.
Cu
Crowbar |
Warum machst du dann einen Smiley der traurig guckt? :gruebel: --> :(
Crowbar - Di 07.02.06 16:12
Ups, da habe ich mit wohl vertippt! 8)
Cu
Crowbar
P.S. Schon geändert!
zivi - Di 21.02.06 17:38
Titel: frage...
Hallo zusammen...
ich hab ein problem und bitte deshalb um hilfe
ich möchte einen memo text in eine text dati speichern, habe auch bereits die letzten beiträge zum thema angesehn, habe aber das problem, dass ich den text in einen bestimmten pfad speichern möchte und diesen nicht vorher im quelltext deklarieren möchte, deshalb hilft mir leider auch dieser beitrag nicht weiter:
"Aber warum nimmst du nicht einfach Memo1.lines.Savetofile('c:\Test.txt');?"
denn soweit war ich leider schon...
wie gesagt möchte ich den pfad auswälen können, in einem popupfesnter oder so...
Marco D. - Di 21.02.06 17:42
So:
Delphi-Quelltext
1:
| memo1.lines.savetofile(edit1.text); |
Der Pfad steht hier in edit1.
zivi - Di 21.02.06 17:47
habe eien möglichkeit selber herausgefunden... für alle die#s wissen wollen :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); var temp : string; begin temp := edit1.text ; memo1.Lines.SaveToFile(temp); showmessage ('Gespeichert') end; |
dann brauch man den pfad nur noch in ein editfenster schreiben,
fände ein popupfenster aber schöner, also wenn es irgentwer weiß, dann bitte sagen...
dankeschön...
Moderiert von
Gausi: Beitragsformatierung überarbeitet.
Marco D. - Di 21.02.06 17:49
Was verstehst du unter einem Popup?
zivi - Di 21.02.06 17:49
sorry, habe deinen beitrag zu spät gesehn... danke trotzdem
zivi - Di 21.02.06 17:51
wenn man ein normales word dokument öffnet, dann öffnet sich ein fenster, bei welchem man den pfad auswählen kann... so hätte ich mir das gewünscht, ist das nicht ein popupfenster ???
Marco D. - Di 21.02.06 18:00
Das ist ein SaveDialog. Setz einen aufs Formular und schreib
Delphi-Quelltext
1: 2: 3: 4:
| if savedialog1.execute then begin memo1.lines.savetofile(savedialog1.filename); end; |
Schau dir mal im OI die Properties des SaveDialogs an (Filter,InitialDir usw.)
zivi - Di 21.02.06 18:14
habe diesen befehl schon in meinem buch vorgefunden, wusste ihn aber nicht anzuwenden, was bedeutet der "execute" befehl und wie muss ich das "dialog" verstehen ???
Marco D. - Di 21.02.06 18:19
Lies das so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| if savedialog1.execute then begin memo1.lines.savetofile(savedialog1.filename); end |
Funzt das denn?
zivi - Di 21.02.06 18:29
hab ich noch nicht ausprobiert, wollte erst das system verstehen...
muss ich denn nicht erst den memotext als mein Savedialog deklarieren oder weiß delphie sofort was ich speichern möchte ??? ich glaub nicht und deshalb wollt ich das erst verstehen, mein quelltext sagt mir nämlich, wie soll es auch anders, undefinierter bezeichner...
werd mich aber noch mal mit der methode dran versuchen ...
interessenfrage : wie kommst du an delphie ?? schule ?? ich ja ich arbeite mit borland delphi, projektorientierte programmierung, dem ersten band, informatik grundkurs stufe 11
sitze im moment an meiner facharbeit, die mit einer klausur gleichzusetzen ist...
Marco D. - Di 21.02.06 18:35
Wo undefinierter Bezeichner?
Du musst da nix deklarieren oder so.
Wir hatten delphi in der Schule.
Ich hab mir ein Buch aus der Bibliothek geliehen.
zivi - Di 21.02.06 18:43
[Fehler] Unit3.pas(33): Undefinierter Bezeichner: 'savedialog1'
das ist alles was ich als fehler gemaldet bekomm... und nun ???
Marco D. - Di 21.02.06 18:44
Du hast den SaveDialog aufs Formular gepackt? Der liegt im Register Dialoge.
zivi - Di 21.02.06 18:47
hatte vergessen savedialog1 als variabel entsprechend zu vermerken...
trotzdem geht's nch nicht... bekomm währen des probelaufes eine exception vom debugger...keinplan ...
Marco D. - Di 21.02.06 18:49
Fehlermeldung und betreffenden Codeschnipsel posten.
zivi - Di 21.02.06 18:55
im projekt project1.exe ist eine exception der klasse EAccessViolation aufgetreten. Meldung : 'zugriifsverletzung bei Adresse 00458b03 in modul ' project1.exe'.lesen von adresse 0000000000'. process wurde angehalten it einzelne anweisung (...)
kannst du mit dem gefritzel was anfangen?!?!?!?!?!?
ich nich...
Marco D. - Di 21.02.06 18:59
Zugriffsverletzungen sind immer Murks :roll:
Poste mal den Code!
zivi - Di 21.02.06 19:01
der quellcode für den button lautet :
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm3.bt_speichernClick(Sender: TObject); begin if savedialog1.execute then begin m_1.lines.savetofile(savedialog1.filename); end |
das ist alles, mein memo fentser hat die name egenschaft m_1...
Moderiert von
Gausi: Beitragsformatierung überarbeitet.
Milhouse2500 - Di 21.02.06 19:03
Hast du denn einen SaveDialog ober aus der KomponentenLeiste ausgewählt und aufs Formular gesetzt oder einfach nur eine Variable vom Typ TSaveDialog im Quelltext hinzugefügt?
Die Fehlermeldung deutet darauf hin das du versuchst auf ein Objekt zuzugreifen, welches noch nicht erzeugt wurde.
zivi - Di 21.02.06 19:04
glaub er hat probleme mit der zeile, die markiert er immer grün wenn der fehler auftritt :
if savedialog1.execute then
wüsst aber nicht was daran falsch ist...
Marco D. - Di 21.02.06 19:04
Ich habe gesagt aus der Palette aufs Formular ziehen ;)
zivi - Di 21.02.06 19:07
hab schon alles aus der komonentenleiste, außer die sachen,die ich tippen muss, wie zum beispiel bei der zeile das savedialog
if savedialog1.execute then...
ansonsten alles augewählt...
Marco D. - Di 21.02.06 19:12
Wenn ich jetzt nicht auf der Leitung stehe, dann weiß ich nicht, wo der Fehler liegt. Kannst ja mal den Debugger zur Fehlersuche benutzen.
zivi - Di 21.02.06 19:26
ich weiß es auch nicht, und selbst mein vater, edv-organisator mit eigener firma weiß es nicht... muss ich mal schauen... vielen dank für deine bemühungen...
mfg josh...aka zivi
T3cn0 - Mo 27.02.06 16:51
hallo,
ich bin auch grad dabei so ein programm zu machen wo man was in ein memo eingeben kann und es dann speichert.
Im Moment hab ich auf meiner Form ein Memo und einen Button...der Butten hat folgenden Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm2.Button1Click(Sender: TObject);
begin memo1.lines.savetofile('c:\test2.txt')
end;
end. |
jetzt möchte ich es aber so machen das man noch auswählen kann wohin und unter welchem namen die datei gespeichert wird.
ihr habt ja auch schon diesen code hier gepostet:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| if savedialog1.execute then begin memo1.lines.savetofile(savedialog1.filename); end |
hab ich auch schon probiert aber wo muss ich den code einfügen???
(ich weiß es is eine neewbe frage ich hoff trotzdem ihr antwortet mir)
danke schon im vorraus.
Marco D. - Mo 27.02.06 17:18
Alle haben mal klein angefangen ;)
Dort einfügen, wo die Abfrage zum Speichern erfolgen soll. Gewöhnlich im OnClick des Speichern-Buttons.
azubi_20 - Mo 27.02.06 17:20
Der Code offnet den Standard-Dialog "Speichern unter ... ", wie du ihn in vielen Programmen findest. Platziere ihn dahin wo du deinen Text abspeichern möchtest. Wenn du also einen Button hast, nach dessen Klick gespeichert werden soll, plazierst du den Code in diese Prozedur.
T3cn0 - Mo 27.02.06 17:30
ok danke das funktioniert mal.
so jetzt hab ich noch ein anderes fenster.dort hab ich ebenfalls ein Memo1, einen button und jetzt aber ein opendialog.
ich hab beim button on klick jetzt eingegeben das er dann den opendialog öffnen soll.
das macht er auch alles ok.
aber wie kann ichs jetzt machen das er die datei dann wieder im Memo1 öffnet?
Marco D. - Mo 27.02.06 17:41
So geht das ;)
Delphi-Quelltext
1: 2: 3: 4:
| if opendialog1.execute then begin memo1.lines.loadfromfile(opendialog1.filename); end; |
Alles klar?
T3cn0 - Mo 27.02.06 17:44
Ok super! funktioniert!
danke für die schnelle hilfe!
mfg T3cn0
T3cn0 - Mo 27.02.06 19:55
So nochmal ich :-)
das is jetzt mein bisheriger code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm2.Button1Click(Sender: TObject); var i:Integer; StringList:TStringList; begin StringList := TStringList.Create(); StringList.BeginUpdate(); for i:=0 to ComponentCount-1 do begin if Components[i] is TEdit then begin StringList.Add( TEdit(Components[i]).Text ); end; if Components[i] is TMemo then begin StringList.Add( TMemo(Components[i]).text ); end; end; StringList.EndUpdate(); StringList.SaveToFile( 'c:\myEditFelder.txt' ); end; |
wenn ich jetzt irgendwas in meine beiden memos reinschreib und speichern drück speichert der der is die datei C:\myEditFelder.txt wie oben angegeben.
wie kann ichs machen das ich noch mit meinem savedialog1 auswählen kann wohin und unter welchem namen ich des speicher??
mfg T3cn0
Marc. - Mo 27.02.06 20:22
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var s:string; f: textfile; begin if NOT savedialog1.execute then exit;
s := memo1.text;
assignfile(f, savedialog1.filename+'.txt'); rewrite(f); write(f, s); closefile(f); end; |
so in etwa ;)
T3cn0 - Mo 27.02.06 20:31
ok aber was ist wenn ich mehrer memos hab , weil im mom speichert es ja nur des erste memo
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!