Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Mehrere Memo's Speicher (https://www.delphipraxis.net/85017-mehrere-memos-speicher.html)

SaFu 24. Jan 2007 18:36


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;

marabu 24. Jan 2007 18:54

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:
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;
Getippt und nicht getestet.

Grüße vom marabu

cruiser 24. Jan 2007 19:06

Re: Mehrere Memo's Speicher
 
Speichern:

Delphi-Quellcode:
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;
Laden:

Delphi-Quellcode:
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;
Ist ungetestet, aber müsste so klappen.

Zur Struktur: Du speicherst immer zuerst die Anzahl der Zeichen und dann den Text selber. Beim Auslesen ebenso.

xZise 24. Jan 2007 19:55

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:
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;
Lesen:
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 24. Jan 2007 20:13

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Freeware" nach "VCL / WinForms / Controls" verschoben.
Es handelt sich nicht um Freeware. Daher *schieb* ;)

SaFu 24. Jan 2007 21:08

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;

MrKnogge 24. Jan 2007 21:11

Re: Mehrere Memo's Speicher
 
Was für Variablen sollen denn da fehlen, was für eine Fehlermeldung kommt ?

Gruß

SaFu 24. Jan 2007 21:13

Re: Mehrere Memo's Speicher
 
Dieser Fehler

Delphi-Quellcode:
[Fehler] Unit7.pas(417): Variable erforderlich
an jeder stelle an der Text steht

MrKnogge 24. Jan 2007 21:18

Re: Mehrere Memo's Speicher
 
Sind die Memos auf derselben Form ?

SaFu 24. Jan 2007 21:20

Re: Mehrere Memo's Speicher
 
Ja


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

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