![]() |
Eine Datei in 3 Memos laden
Hey Leute,
bräuchte mal wieder eure Unterstützung.. Ich lade mittels Stringliste die Inhalte von 3 Memos in eine Datei. Jetzt möchte ich den Inhalt, der zu Memo1 gehörte, wieder in Memo1 laden, den Inhalt von Memo2 in Memo2 usw. laden. Wie mache ich das am Besten? Ich habe das noch nie gemacht. Es könnte evtl was mit pos() oder so zu tun haben, oder? Wäre für einen Codeschnipsel mit Erklärung sehr sehr dankbar! Wie immer, Danke im Vorraus Bye! PS: Auch mein Glückwunsch! :sharkylinchen: |
Re: Eine Datei in 3 Memos laden
Also wenn du in der Datei nicht irgendwie deutlich machst (Seperator) was zu was gehört geht das schlecht :wink:
|
Re: Eine Datei in 3 Memos laden
Naja, einen Seperator eintragen ist ja auch nicht gerade die Welt. Dann nehmen wir doch einfach ein ";"...ok?
|
Re: Eine Datei in 3 Memos laden
naja, wenns ein text is besser net, da würde ich eher sowas wie [/\Memo1/\] nehmen
und dann das:
Delphi-Quellcode:
event. bei den pos und so nochn +1 oder -1 hin, aber der ansatz müsste es sein....
Sep[1]:='[/\Memo1/\]';
Sep[2]:='[/\Memo2/\]'; Sep[3]:='[/\Memo3/\]'; Temp.LoadFromFile('x.y'); Memo1.Text:=copy(Temp.Text,0,Pos(Sep[1],Temp.Text)); Memo2.Text:=copy(Temp.Text,Pos(Sep[1],Temp.Text)+length(Sep[1],Temp.Text),Pos(Sep[2],Temp.Text)); Memo3.Text:=copy(Temp.Text,Pos(Sep[2],Temp.Text)+length(Sep[2],Temp.Text),Pos(Sep[3],Temp.Text)); achso: so markiert [/\Memo1/\] das ende des "Memo1-Textes" |
Re: Eine Datei in 3 Memos laden
Cool, ich danke dir. Werde es mal testen und mich bei Fragen nochmal melden ;-)
|
Re: Eine Datei in 3 Memos laden
Naja,
so ganz will es noch net. Ich habe jetzt daraus ein Array of String gemacht und dann bekomme ich in den letzten 3 Zeilen die Meldung vom Compiler: Inkompatible Typen.. Habe es auch mit array of Char probiert, doch dann sagt der Compiler bei den Sep[x]-Zeilen: Inkompatible Typen Char und String Was nun? |
Re: Eine Datei in 3 Memos laden
dann setz jeweils die sachen ein...
sollte ein array of string sein... |
Re: Eine Datei in 3 Memos laden
Hm... das klappt bei mir aber nicht. Habe das auch noch nie gemacht :oops:
|
Re: Eine Datei in 3 Memos laden
Hat niemand mehr eine Idee? *GanzVorsichtigNachfrag*
|
Re: Eine Datei in 3 Memos laden
Pushen ist doch erst nach 24h erlaubt... :evil:
Du kannst auch einfach den gesamten Text von Memo1 in die erste Zeile der Datei schreiben und dann den Zeilenumsprung als Trennzeichen missbrauchen. |
Re: Eine Datei in 3 Memos laden
wie wäre es denn, wenn du den Text in eine Variable lädst.
und dann sollte folgendes gehen:
Delphi-Quellcode:
(ungetestet !!)
var text,textM1,textM2,textM2:string;
i:integer; begin i:=pos('[/\Memo1/\]',text); textM1 := copy(text,1,i); delete(text,1,i + 10); i:=pos('[/\Memo2/\]',text); textM2 := copy(text,1,i); delete(text,1,i + 10); textM3 := text; den 3. seperator kannst du ja weglassen, denn dann kann ja nurnoch was für das letzte memo kommen... ist nur ein lösungs ansatz, hoffe das ich helfen konnte. hibbert |
Re: Eine Datei in 3 Memos laden
aber wenn da auch zeilentrennzeichen sind?
ich würde meine methode oben zum laufen bringen :mrgreen: |
Re: Eine Datei in 3 Memos laden
Danke, ich werde auch dies mal ausprobieren...
@glkgereon: Ja, aber wie... |
Re: Eine Datei in 3 Memos laden
hm wieso machsts nich mit ner ini-Datei?
|
Re: Eine Datei in 3 Memos laden
Zitat:
Delphi-Quellcode:
so in etwa (ungetestet).
//speichern
var ini: TIniFile; begin ini := TIniFile.create; try ini.loadfromfile('...'); ini.writestring('Memos', 'Memo1', memo1.lines.DelimitedText); ini.writestring('Memos', 'Memo2', memo2.lines.DelimitedText); ini.writestring('Memos', 'Memo3', memo3.lines.DelimitedText); finally ini.free; end; end; //laden var ini: TIniFile; begin ini := TIniFile.create; try ini.loadfromfile('...'); memo1.lines.delimitedtext := ini.readstring('Memos', 'Memo1', ''); memo2.lines.delimitedtext := ini.readstring('Memos', 'Memo2', ''); memo3.lines.delimitedtext := ini.readstring('Memos', 'Memo3', ''); finally ini.free; end; end; Aenogym |
Re: Eine Datei in 3 Memos laden
Unter Win9x ist die größe von Ini-Dateien auf 32Kb begrenzt, dann müsstest du, falls es größere Datenmengen sind, eine passende Komponente, wie TBigIniFile nehmem.
Aber es geht auch als Textdatei:
Delphi-Quellcode:
Aufruf:
procedure WriteMemos(AMemo1, AMemo2, AMemo3: TMemo; const AFilename: String);
var SL: TStrings; begin SL := TStringList.Create; try SL.AddStrings(AMemo1.Lines); SL.Add('[/\Memo/\]'); SL.AddStrings(AMemo2.Lines); SL.Add('[/\Memo/\]'); SL.AddStrings(AMemo3.Lines); SL.SaveToFile(AFilename); finally SL.Free; end; end; procedure ReadMemos(AMemo1, AMemo2, AMemo3: TMemo; const AFilename: String); var SL: TStrings; i, Memo: Integer; begin AMemo1.Clear; AMemo2.Clear; AMemo3.Clear; SL := TStringList.Create; try SL.LoadFromFile(AFilename); Memo := 1; for i := 0 to SL.Count - 1 do begin if SL[i] = '[/\Memo/\]' then begin Inc(Memo); Continue; end; case Memo of 1: AMemo1.Lines.Add(SL[i]); 2: AMemo2.Lines.Add(SL[i]); 3: AMemo3.Lines.Add(SL[i]); end; end; finally SL.Free; end; end;
Delphi-Quellcode:
Ich sage nicht, dass es die beste Lösung ist, aber sie funktioniert ;)
WriteMemos(Memo1, Memo2, Memo3, 'c:\test.txt');
// und ReadMemos(Memo1, Memo2, Memo3, 'c:\test.txt'); MfG Pr0g |
Re: Eine Datei in 3 Memos laden
Hey,
ihr seid klasse. Ich werde alles mal probieren. Aber auf die Idee mit der Ini-Datei hätte ich auch kommen können. Außerdem ist das Ziel-OS WinXP, so dass ich mit der größe keine Probs bekomme. Danke an alle. Falls wir uns nicht mehr lesen sollten, wünsche ich euch einen guten Rutsch in 2005! Bye |
Re: Eine Datei in 3 Memos laden
Moin DJ-SPM,
vor kurzem hatte ich hier mal eine Methode gepostet, wie man mehrere TRichEdit in eine Datei schreiben, und sie getrennt wieder auslesen kann. Das funktioniert natürlich auch mit TMemo. ![]() |
Re: Eine Datei in 3 Memos laden
Hi chris,
meinst du diesen Code:
Delphi-Quellcode:
Wenn ja, kannst du mir kurz sagen, wo die Seperatoren sind, also, wie der Code funzt?
// schreiben
var iLen : integer; fs : TFileStream; ms : TMemoryStream; begin ms := TMemoryStream.Create; fs := TFileStream.Create(....,fmCreate); try ms.Clear; RichEdit1.Lines.SaveToStream(ms); iLen := ms.Position; fs.Write(iLen,4); fs.CopyFrom(ms,0); finally FreeAndNil(fs); FreeAndNil(ms); end; end; // lesen var iLen : integer; fs : TFileStream; ms : TMemoryStream; begin ms := TMemoryStream.Create; fs := TFileStream.Create('c:\temp\riform.txt',fmOpenRead); try fs.Read(iLen,4); ms.Clear; ms.CopyFrom(fs,iLen); ms.Position := 0; RichEdit1.Lines.LoadFromStream(ms); finally FreeAndNil(fs); FreeAndNil(ms); end; end; Danke |
Re: Eine Datei in 3 Memos laden
Moin DJ-SPM,
nein, ich meinte den Code davor. Das was Du da gepostet hast ist nur erforderlich, wenn man die, in einem Memo ja nicht vorhandenen, Formatierungen mit speichern will. Das Prinzip bleibt aber gleich. Wie ich in dem genannten Thread weiter oben beschrieben hatte: Es wird erst die Länge gespeichert, dann der Inhalt. Bei Auslesen liest man dann also die Länge ein, reserviert sich in einem Buffer entsprechend Platz, und liest ein. Das Beispiel bezieht sich nur auf eine Datei, aber in einer Schleife gehen dann auch mehrere. |
Re: Eine Datei in 3 Memos laden
stimmt, danke.
Jetzt habe ich so viele Lösungsvorschläge, da weiß ich garnet, welchen ich nehmen soll... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 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