Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eine Datei in 3 Memos laden (https://www.delphipraxis.net/37054-eine-datei-3-memos-laden.html)

hibbert 30. Dez 2004 21:31

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:
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;
(ungetestet !!)
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

glkgereon 30. Dez 2004 21:31

Re: Eine Datei in 3 Memos laden
 
aber wenn da auch zeilentrennzeichen sind?

ich würde meine methode oben zum laufen bringen :mrgreen:

TheMiller 30. Dez 2004 23:19

Re: Eine Datei in 3 Memos laden
 
Danke, ich werde auch dies mal ausprobieren...

@glkgereon: Ja, aber wie...

Wuaegner 30. Dez 2004 23:43

Re: Eine Datei in 3 Memos laden
 
hm wieso machsts nich mit ner ini-Datei?

Aenogym 31. Dez 2004 00:00

Re: Eine Datei in 3 Memos laden
 
Zitat:

Zitat von Wuaegner
hm wieso machsts nich mit ner ini-Datei?

genau:

Delphi-Quellcode:
//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;
so in etwa (ungetestet).

Aenogym

Pr0g 31. Dez 2004 00:05

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:
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;
Aufruf:
Delphi-Quellcode:
  WriteMemos(Memo1, Memo2, Memo3, 'c:\test.txt');
// und
  ReadMemos(Memo1, Memo2, Memo3, 'c:\test.txt');
Ich sage nicht, dass es die beste Lösung ist, aber sie funktioniert ;)

MfG Pr0g

TheMiller 31. Dez 2004 10:45

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

Christian Seehase 31. Dez 2004 13:27

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.

10 Richedit in eine Datei speichern und wieder auslesen

TheMiller 31. Dez 2004 13:46

Re: Eine Datei in 3 Memos laden
 
Hi chris,

meinst du diesen Code:

Delphi-Quellcode:
// 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;
Wenn ja, kannst du mir kurz sagen, wo die Seperatoren sind, also, wie der Code funzt?
Danke

Christian Seehase 31. Dez 2004 13:53

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 Uhr.
Seite 2 von 3     12 3      

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