![]() |
Mehrere Memo's Speicher
Hi, habe mal ne Frage.
Kann man z.B. 5 Memo inhalte zusammen in einer *.txt Speichern und die Gepeicherten inhalte, wieder in die einzelnen Memos Laden. :gruebel: z.B. so
Delphi-Quellcode:
procedure TForm7.Button2Click(Sender: TObject);
Var memos :TFileName; begin memos:= ExtractFilePath(ParamStr(0))+'Bemerkungen\'+ Edit3.Text +'.txt'; Memo1-5.SaveToFile(memos);// sowas ähnliches end; |
Re: Mehrere Memo's Speicher
Hallo Sascha,
keine Frage - du kannst den Inhalt mehrerer Memos hintereinander in dieselbe Text-Datei schreiben. Damit du beim Einlesen merkst, welche Zeilen zusammen gehören, musst du entweder die Zeilenanzahl voran stellen oder eine Trennzeile mit ausgeben.
Delphi-Quellcode:
Getippt und nicht getestet.
procedure SaveMemos(memos: array of TMemo; fn: TFileName);
var i: Integer; s: TStream; line: String; begin s := TFileStream.Create(fn, fmCreate); for i := 0 to High(memos) do begin line := IntToStr(memos[i].Lines.Count) + sLineBreak; // memos statt memo s.Write(line[1], Length(line)); memos[i].Lines.SaveToStream(s); // memos statt memo end; s.Free; end; Grüße vom marabu |
Re: Mehrere Memo's Speicher
Speichern:
Delphi-Quellcode:
Laden:
var
FileStream: TMemoryStream; begin FileStream := TMemoryStream.Create; FileStream.Write(Length(Memo1.Text), SizeOf(Integer)); FileStream.Write(Memo1.Text, Length(Memo1.Text)); FileStream.Write(Length(Memo2.Text), SizeOf(Integer)); FileStream.Write(Memo2.Text, Length(Memo1.Text)); {...} FileStream.SaveToFile('FileName'); FileStream.Free; end;
Delphi-Quellcode:
Ist ungetestet, aber müsste so klappen.
var
FileStream: TMemoryStream; pos,l,i: Integer; begin FileStream := TMemoryStream.Create; FileStream.LoadFromFile('FileName'); pos := 0; l := 0; for i := 1 to 5 do begin FileStream.Position := pos; FileStream.Read(l, SizeOf(Integer)); FileStream.Position := pos + SizeOf(Integer); case i of 1: FileStream.Read(Memo1.Text ,l); {...} 5: FileStream.Read(Memo5.Text ,l); end; pos := pos + l + SizeOf(Integer); end; FileStream.Free; end; Zur Struktur: Du speicherst immer zuerst die Anzahl der Zeichen und dann den Text selber. Beim Auslesen ebenso. |
Re: Mehrere Memo's Speicher
Etwas, womit man leichter zurecht kommt:
--------------------- Aso... Bevor der Code kommt ^^ Falsche Sparte! Definition von "Freeware" (siehe Hauptseite): "Freeware-Programme (mit oder ohne Sourcecode) zum Testen und Diskutieren" --------------------- Speichern:
Delphi-Quellcode:
Lesen:
memoFile := TStringList.Create;
try memoFile.Add(IntToStr(High(memos))); for i := 0 to High(memos) do begin memoFile.Insert(i + 1, memos[i].Count); memoFile.Add(memos[i].Text); end; memoFile.SaveToFile(FILENAME); finally memoFile.Free; end;
Delphi-Quellcode:
memoFile := TStringList.Create;
try memoFile.OpenFromFile(FILENAME); for i := 0 to StrToIntDef(memoFile[0], 0) do begin bufferText := ''; if i < StrToIntDef(memoFile[0], 0) then for j := StrToInt(memoFile[i + 1]) to StrToInt(memoFile[i + 2]) - 1 do begin bufferText := bufferText + memoFile[j]; end else for j := StrToInt(memoFile[i + 1]) to memoFile.Count - 1 do begin bufferText := bufferText + memoFile[j]; end memos[i].Text := bufferText; end; finally memoFile.Free; end; |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Freeware" nach "VCL / WinForms / Controls" verschoben.
Es handelt sich nicht um Freeware. Daher *schieb* ;) |
Re: Mehrere Memo's Speicher
Hi danke erstmal für die Zahlreichen Antworten :lol:
Womit ich etwas leichter zurecht komme ist das vom Cruiser aber da fehlen anscheinen noch Variablen Kann mir da mal einer bitte weiter helfe finde es leider nicht. Welche Variablen :gruebel:
Delphi-Quellcode:
procedure TForm7.Panel1Click(Sender: TObject);
var FileStream: TMemoryStream; memos :TFileName; begin FileStream := TMemoryStream.Create; FileStream.Write(Length(Memo1.Text), SizeOf(Integer)); FileStream.Write(Memo1.Text, Length(Memo1.Text)); FileStream.Write(Length(Memo2.Text), SizeOf(Integer)); FileStream.Write(Memo2.Text, Length(Memo1.Text)); memos:= ExtractFilePath(ParamStr(0))+'Bemerkungen\'+ Edit3.Text +'.txt'; FileStream.SaveToFile(memos); FileStream.Free; end; |
Re: Mehrere Memo's Speicher
Was für Variablen sollen denn da fehlen, was für eine Fehlermeldung kommt ?
Gruß |
Re: Mehrere Memo's Speicher
Dieser Fehler
Delphi-Quellcode:
an jeder stelle an der Text steht
[Fehler] Unit7.pas(417): Variable erforderlich
|
Re: Mehrere Memo's Speicher
Sind die Memos auf derselben Form ?
|
Re: Mehrere Memo's Speicher
Ja
|
Re: Mehrere Memo's Speicher
Daran liegt es nicht, es liegt daran, das die Funktion "Write" eine Variable braucht, Text ist eine Property. Du musst also vorher Memo1.Text in einen String kopieren und den dann in den Stream schreiben.
|
Re: Mehrere Memo's Speicher
Sorry wenn ich so dumm Frage aber.
Mit Streams habe ich noch nie gearbeitet wie macht man sowas :oops: |
Re: Mehrere Memo's Speicher
Delphi-Quellcode:
usw.
var s: String
[...] s:=Memo1.text; FileStream.Write(Length(s), SizeOf(Integer)); FileStream.Write(s, Length(Memo1.Text)); |
Re: Mehrere Memo's Speicher
Sorry aber irgendwie habe ich immernoch den gleichen Fehler
Delphi-Quellcode:
procedure TForm7.Panel1Click(Sender: TObject); var FileStream: TMemoryStream; memos :TFileName; a,b: String; begin a:=Memo1.Text; b:=Memo1.Text; FileStream := TMemoryStream.Create; FileStream.Write(Length(a), // und zwar hier SizeOf(Integer)); FileStream.Write(a, Length(Memo1.Text)); FileStream.Write(Length(b), // und hier SizeOf(Integer)); FileStream.Write(b, Length(Memo1.Text)); memos:= ExtractFilePath(ParamStr(0))+'Bemerkungen\'+ ComboBox4.Text+'.txt'; FileStream.SaveToFile(memos); FileStream.Free; end;
Delphi-Quellcode:
[Fehler] Unit7.pas(426): Variable erforderlich
|
Re: Mehrere Memo's Speicher
Dann speicherst du SizeOf(Integer) vorher eben genauso in eine Variable wie du es bei Memo2.Text gemacht hast.
Gruß |
Re: Mehrere Memo's Speicher
Auch daran liegt es nicht ;)
Er muss Length(a) bzw length(b) vorher in eine eigene Variable packen. |
Re: Mehrere Memo's Speicher
so etwa
Delphi-Quellcode:
:cry:
procedure TForm7.Panel1Click(Sender: TObject);
var FileStream: TMemoryStream; memos :TFileName; a,b :String; c,d :integer; begin a:=Memo1.Text; b:=Memo2.Text; c:= SizeOf(Integer); d:= SizeOf(Integer); FileStream := TMemoryStream.Create; FileStream.Write(Length(a), c)); FileStream.Write(a, Length(Memo1.Text)); FileStream.Write(Length(b), d)); FileStream.Write(b, Length(Memo2.Text)); memos:= ExtractFilePath(ParamStr(0))+'Bemerkungen\'+ ComboBox4.Text+'.txt'; FileStream.SaveToFile(memos); FileStream.Free; end; |
Re: Mehrere Memo's Speicher
Das ist nicht das Problem. Das Problem ist das length(a), das macht Ärger. Speicher das in eine Variable.
Delphi-Quellcode:
procedure TForm7.Panel1Click(Sender: TObject);
var FileStream: TMemoryStream; memos: TFileName; a,b: String; la, lb: Integer; begin a:=Memo1.Text; b:=Memo2.Text; c:= SizeOf(Integer); d:= SizeOf(Integer); FileStream := TMemoryStream.Create; la:=length(a); FileStream.Write(la, sizeof(Integer)); FileStream.Write(a, la); lb:=length(b); FileStream.Write(lb, sizeof(Integer)); FileStream.Write(b, lb); memos:= ExtractFilePath(ParamStr(0))+'Bemerkungen\'+ ComboBox4.Text+'.txt'; FileStream.SaveToFile(memos); FileStream.Free; end; |
Re: Mehrere Memo's Speicher
Habs jetzt so aber die *.txt ist jetzt unleserlich
Delphi-Quellcode:
procedure TForm7.Button7Click(Sender: TObject); var FileStream: TMemoryStream; memos :TFileName; a,b :String; c,d :integer; begin a:=Memo1.Text; b:=Memo2.Text; c:=Length(a) ; d:=Length(b) ; FileStream := TMemoryStream.Create; FileStream.Write(c, SizeOf(Integer)); FileStream.Write(a, Length(Memo1.Text)); FileStream.Write(d, SizeOf(Integer)); FileStream.Write(b, Length(Memo2.Text)); memos:= ExtractFilePath(ParamStr(0))+'Bemerkungen\'+ ComboBox4.Text+'.txt'; FileStream.SaveToFile(memos); FileStream.Free; end; |
Re: Mehrere Memo's Speicher
Wie, "unleserlich"?
Die ersten 4 Zeichen sind "unleserlich" und später mal 4 Zeichen ebenfalls, das ist normal. Ansonsten müsste es eigentlich so stimmen. Wie sieht sie denn aus, die TXT? |
Re: Mehrere Memo's Speicher
Das bei meiner "Lösung"
Delphi-Quellcode:
èݤ ÷ êãE 𤠽EE D P¯¤ èݤ ÷ êãE ð¤ Das bei deiner:
Delphi-Quellcode:
Øn£
|
Re: Mehrere Memo's Speicher
Delphi-Quellcode:
So gehts.
procedure TForm7.Button7Click(Sender: TObject);
var FileStream: TMemoryStream; memos :TFileName; a,b :String; c,d :integer; begin a:=Memo1.Text; b:=Memo2.Text; c:=Length(a) ; d:=Length(b) ; FileStream := TMemoryStream.Create; FileStream.Write(c, SizeOf(Integer)); FileStream.Write(a[1], c); FileStream.Write(d, SizeOf(Integer)); FileStream.Write(b[1], d); memos:= ExtractFilePath(ParamStr(0))+'Bemerkungen\'+ ComboBox4.Text+'.txt'; FileStream.SaveToFile(memos); FileStream.Free; end; |
Re: Mehrere Memo's Speicher
Super das Klappt so
Will nicht unhöfflich sein aber könntest du mir noch bei wiederherstellen helfen
Delphi-Quellcode:
das ist schwerer als ich gedacht habe :pale:
procedure TForm7.Button9Click(Sender: TObject);
var memos :TFileName; FileStream: TMemoryStream; pos,l,i: Integer; begin FileStream := TMemoryStream.Create; memos:= ExtractFilePath(ParamStr(0))+'Bemerkungen\'+ ComboBox4.Text+'.txt' FileStream.LoadFromFile(memos); pos := 0; l := 0; for i := 1 to 5 do begin FileStream.Position := pos; FileStream.Read(l, SizeOf(Integer)); FileStream.Position := pos + SizeOf(Integer); case i of 1: FileStream.Read(Memo1.Text ,l); {...} 5: FileStream.Read(Memo5.Text ,l); end; pos := pos + l + SizeOf(Integer); end; FileStream.Free; end; end; Danke |
Re: Mehrere Memo's Speicher
Lass die ganzen TStream.Position-Zuweisungen weg. Setze nur am Anfang die Position auf 0, alles weitere erledigt TStream.Read automatisch.
Delphi-Quellcode:
procedure TForm7.Button9Click(Sender: TObject);
var memos :TFileName; FileStream: TMemoryStream; l,i: Integer; begin FileStream := TMemoryStream.Create; memos:= ExtractFilePath(ParamStr(0))+'Bemerkungen\'+ ComboBox4.Text+'.txt' FileStream.LoadFromFile(memos); l := 0; for i := 1 to 5 do begin FileStream.Position := 0; FileStream.Read(l, SizeOf(Integer)); case i of 1: FileStream.Read(Memo1.Text ,l); {...} 5: FileStream.Read(Memo5.Text ,l); end; end; FileStream.Free; end; end; |
Re: Mehrere Memo's Speicher
Hallo,
Zitat:
Was ich nicht verstehe: marabu hat in Beitrag #2 eine elegante Routine zum Schreiben der Memos gepostet. Es sollte doch möglich sein, diese Routine zu verstehen und eine analoge Routine zum Lesen der Memos zu entwickeln, oder? Gruß Hawkeye |
Re: Mehrere Memo's Speicher
Ich hab nie behauptet, meines sei das non-plus-ultra... Im Nachhinein seh ich das speichern der Lines-Anzahl im Klartext auch als... mh... hübscher an.. vor allem bleibt es so immer Klartext
|
Re: Mehrere Memo's Speicher
Ja marabu gibt sehr gute Tips, nur Leider bin ich noch nicht so gut in Programmieren, das ich diesen Code interpretieren und einbinden kann, geschweige denn eine procedure entwickeln zum laden
(Schande über mich) Also hier gibt es echt leute die es richtig drauf haben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:09 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