![]() |
Delphi-Version: 5
Mehrere Memos in einer Datei Speichern
Hallöchen!
Ich bräuchte dringend fachkundige Hilfe! Zurzeit arbeite ich an einem Projekt, das auf Memofelder basiert. Ich würde gerne eine Speichern und Laden Option hinzufügen weis nur nicht wie ich es anstellen soll. Die erste Möglichkeit bot sich durch
Delphi-Quellcode:
Ich verwende bis zu 5 Memofelder und würde deren inhalt gerne in eine Datei speichern.... if OpenDialog1.Execute then begin Memo1.Lines.SaveToFile(OpenDialog1.Filename); end; ... und ... if OpenDialog1.Execute then begin Memo1.Lines.LoadFromFile(OpenDialog1.Filename); end; ... Ich hab es schon mit Assignfile etc. probiert. Leider ohne erfolg :( Danke für angebotene Hilfe! |
AW: Mehrere Memos in einer Datei Speichern
Hallo
Ein Stichwort: Streams |
AW: Mehrere Memos in einer Datei Speichern
.SaveToFile() erzeugt eine neue Datei bzw. überschreibt eine vorhandene.
Delphi-Quellcode:
var
sl: TStrings; begin sl := TStringList.Create; ... sl.Append( Memo1.Lines); sl.Append( Memo2.Lines); ... sl.SaveToFile(OpenDialog1.Filename); ... sl.Free; |
AW: Mehrere Memos in einer Datei Speichern
Das Problem ist, wie mkinzler schon gesagt hat, dass
Delphi-Quellcode:
leider den schon vorhandenen Inhalt überschreibt, d.h. du solltest das nach Möglichkeit selbst machen. Das kannst du entweder über Streams handeln, oder auch via
SaveToFile()
![]() ![]() ![]() ![]() ![]() Zuvor müsstest du dir allerdings das Format überlegen, in welchem du die Daten speichern willst. Du musst beim Auslesen später ja wieder den Text trennen können! |
AW: Mehrere Memos in einer Datei Speichern
oder eine spezielle Zeile einfügen, woran man die Texte wieder trennen kann.
Also jeweils ein Memo.Lines mit .AddStrings zu einer StringListe hinzufügen, dann über .Add eine Kennzeile (eine Zeile/Wörter, welche es sonst nicht gibt) anhängen und nun weitere Memos dran. Beim Auslesen nun Anhand dieser Zeile(n) die Stringliste wieder auf die Memos aufteilen. |
AW: Mehrere Memos in einer Datei Speichern
Vielen Dank für die Antworten!
Mittlerweile hab ich's geschafft die Inhalte der Memofelder 1-3 in eine *.txt zu speichern.
Delphi-Quellcode:
Dadurch konnte ich eine geordnete struktur beim speichern herstellen die so ausssah
procedure TRechner.BtSaveClick(Sender: TObject);
var myFile : TextFile; text : string; begin AssignFile(myFile, EdFileName.Text); ReWrite(myFile); //Memo1 Write(myFile,'Memo1Anfang', ''); WriteLn(myFile); Write(myFile, Memo1.Text, ' '); Write(myFile,'Memo1Ende', ''); WriteLn(myFile); WriteLn(myFile); //Memo2 Write(myFile, 'Memo2Anfang', ''); WriteLn(myFile); Write(myFile, Memo2.Text,' '); Write(myFile,'Memo2Ende', ''); WriteLn(myFile); WriteLn(myFile); //Memo3 Write(myFile, 'Memo3Anfang', ''); WriteLn(myFile); Write(myFile, Memo3.Text,' '); Write(myFile,'Memo3Ende', ''); WriteLn(myFile); CloseFile(myFile); Reset(myFile); while not Eof(myFile) do begin ReadLn(myFile, text); end; CloseFile(myFile); end; Zitat:
Irgendwie soll das programm die Werte zuordnen können. Brauche nochmals eure hilfe :)! Danke!! |
AW: Mehrere Memos in einer Datei Speichern
wenn Du schon so angefangen hast,
in einem Loop readln und Ziel.add wenn Ziel<>nil wenn Du eine Anfangmarke findenst, Ziel=Zielmemo wenn Du eine EndeMarke findest Ziel=nil |
AW: Mehrere Memos in einer Datei Speichern
Danke!!
Nurnoch eine unverschämte bitte ^^": Ich bräuchte eine kleine starthilfe in sachen eines loops in verbindung mit dem einlesen. Hihi... ^^" |
AW: Mehrere Memos in einer Datei Speichern
am Ende von Posting #6 machst Du es doch schon...
|
AW: Mehrere Memos in einer Datei Speichern
Zitat:
|
AW: Mehrere Memos in einer Datei Speichern
Zitat:
|
AW: Mehrere Memos in einer Datei Speichern
...und das ganze ein wenig schöner und allgemeiner gehalten:
Speichern:
Delphi-Quellcode:
SaveStrings(fs, [Memo1.Lines, Memo2.Lines, ListBox1.Items]);
Laden:
Delphi-Quellcode:
LoadStrings(fs, [Memo1.Lines, Memo2.Lines, ListBox1.Items]);
Delphi-Quellcode:
const
FILE_SIG = 'MyFileSignature'; BUF_SIZE = 4096; function SaveStrings(AStream: TStream; const Strings: array of TStrings; FileSig: string = ''): Boolean; var Writer: TWriter; i: Integer; begin Result := False; Writer := TWriter.Create(aStream, BUF_SIZE); try if FileSig <> '' then begin Writer.WriteSignature; Writer.WriteIdent(FileSig); end; Writer.WriteListBegin; for i := Low(Strings) to High(Strings) do begin Writer.WriteString(Strings[i].Text); end; Writer.WriteListEnd; Result := True; finally Writer.Free; end; end; function LoadStrings(AStream: TStream; const Strings: array of TStrings; FileSig: string = ''): Boolean; var Reader: TReader; i: Integer; begin Result := False; Reader := TReader.Create(aStream, BUF_SIZE); try if FileSig <> '' then begin Reader.ReadSignature; if Reader.ReadIdent <> FileSig then raise Exception.Create('ungültige Datei...'); end; i := Low(Strings); Reader.ReadListBegin; while not Reader.EndOfList do begin if i <= High(Strings) then Strings[i].Text := Reader.ReadString; Inc(i); end; Reader.ReadListEnd; Result := True; finally Reader.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var fs: TFileStream; begin fs := TFileStream.Create('C:\MyStrings.txt', fmCreate); try SaveStrings(fs, [Memo1.Lines, Memo2.Lines, ListBox1.Items], FILE_SIG); finally fs.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); var fs: TFileStream; begin fs := TFileStream.Create('C:\MyStrings.txt', fmOpenRead); try LoadStrings(fs, [Memo1.Lines, Memo2.Lines, ListBox1.Items], FILE_SIG); finally fs.Free; end; end; |
AW: Mehrere Memos in einer Datei Speichern
Soweit fuktioniert alles danke. Allerdings Meldet mir das programm einen Fehler sobald ich die datei laden möchte.
Zitat:
EDIT: Hab den Eintrag ", FILE_SIG" in der Button2 Prozedur entfernt und schon funktioniert ist. Wofür ist die FILE_SIG notwendig?? |
AW: Mehrere Memos in einer Datei Speichern
Zitat:
Die Signatur ist ein Schutz: Zitat:
|
AW: Mehrere Memos in einer Datei Speichern
Vielen dank für die kompetente hilfe!!!
Thread kann geschlossen werden! |
AW: Mehrere Memos in einer Datei Speichern
Ich danke euch nochmal sehr für die geleistete Hilfe!
Folgenden Code nutze ich zum speichern.
Delphi-Quellcode:
Ich habe auch ein SaveDialog eingebaut, dass ohne probleme funkltioniert ALLERDINGS:
procedure TRechner.BtSaveClick(Sender: TObject);
var fs: TFileStream; begin PfadSave; if EdDir.Text = '' then begin end else begin fs := TFileStream.Create(EdDir.Text+'.ini', fmCreate); //EdDir ist der Speicherpfad + Dateiname try SaveStrings(fs, [Memo1.Lines, Memo2.Lines], FILE_SIG); finally fs.Free; end; Fall 1. Die Datei ist noch nicht vorhanden -> Dateiname wird eingeben -> Speichern ->> klappt. Fall 1. Die Datei ist vorhanden und soll überschrieben werden -> Datei wird markiert -> Speichern ->> DATEI bist zweimal die gleiche Endung (XX.ini.ini). Im Savedialog habe ich zudem einen filter auf ini gesetzt (Filtername: .ini" und Filter: *.ini) Lösungsversuche 1.)Habe mal im dialog den filter oder ein teil des filter rausgehauen, das ergebniss war, dass nun alle dateien angezeigt wurden und das .ini problem beim überschreiben bestand immernoch. 2.) Savedialogfilter nicht verändert (filter auf .ini usw.). In der prozedur den +'.ini' eintrag entfernt. Ergebnis ->> Datei besitz keine endnung 3.) Per if abfrage FileExists(EdDit.Text+'.ini') then DeleteFile(EdDit.Text+'.ini') else... ->> brachte nichts... Woran kann es liegen? |
AW: Mehrere Memos in einer Datei Speichern
Delphi-Quellcode:
ChangeFileExt(EdDir.Text,'.ini')
|
AW: Mehrere Memos in einer Datei Speichern
Danke!
Aber entweder setze ich es an die falsche stelle oder es klappt nicht :(. Also beim Auswählen der Datei, nimmt EdDir nicht nur den Dateipfad auf sondern auch Dateiname.Dateiendun (C:\test.ini). D.h. Die procedure erkennt nicht dass dort ein .ini bereits vorhanden ist und hängt noch ein dran (C:\test.ini.ini). Folglich bringt ein Delete nichts da beim markieren der pfad + endung ebenfalls an EdDir gegeben wird. Kusios...:( |
AW: Mehrere Memos in einer Datei Speichern
Delphi-Quellcode:
:shock:
Showmessage( ChangeFileExt('C:\test\test.ini','.ini') +#13#10 + ChangeFileExt('C:\test\test.txt','.ini') +#13#10 + ChangeFileExt('C:\test\test','.ini'));
EDIT
Delphi-Quellcode:
fs := TFileStream.Create(ChangeFileExt(EdDir.Text,'.ini'), fmCreate)
|
AW: Mehrere Memos in einer Datei Speichern
Fertig DANKESCHÖN!!
|
AW: Mehrere Memos in einer Datei Speichern
Zitat:
Delphi-Quellcode:
wegzulassen, egals in welcher Weise es eingefügt wird).
+'.ini'
|
AW: Mehrere Memos in einer Datei Speichern
Zitat:
|
AW: Mehrere Memos in einer Datei Speichern
Zitat:
|
AW: Mehrere Memos in einer Datei Speichern
Danke, aber im Filter des Savedialogs hatte ich schon die ini als filter angeben, bzw. ist es immer noch, allerdings fehlt dann beim speichern wenn
Delphi-Quellcode:
nicht mehr vorhanden ist. So wie es Bummi gelöst hat klappt es 1a, und ohne komplikationen :)
EdDit.Text+'.ini'
|
AW: Mehrere Memos in einer Datei Speichern
Dafür gibt es die angesprochene DefaultExt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz