Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TStringList aus Datei nicht definierten Typs wieder einlesen (https://www.delphipraxis.net/12237-tstringlist-aus-datei-nicht-definierten-typs-wieder-einlesen.html)

-P-A-X- 23. Nov 2003 16:33


TStringList aus Datei nicht definierten Typs wieder einlesen
 
Hallo!

Ich habe mit BlockWrite den Inhalt eines TStringList-Ausdrucks in eine Datei geschrieben. Wie kann ich dies nun wieder in eine solche Variable einlesen?
Danke Leute!

PAX

Alter Mann 23. Nov 2003 16:42

Re: TStringList aus Datei beliebigen Typs wieder einlesen
 
Hi,
was macht das Wetter am St. Nikolai?

Die Frage ist: 'wie' hast Du mit Blockwrite geschrieben.

-P-A-X- 23. Nov 2003 16:49

Re: TStringList aus Datei beliebigen Typs wieder einlesen
 
Is grad stockdunkel draußen und regnet zur Zeit nicht ;-) . Wenns morgen früh auch nicht regnet, wenn ich mit dem Fahrrad fahre, dann is der Tach wenigstens schon zumindest ein bisschen gerettet.
Ja, du meinst "wie" hab ich TStringList in file geschrieben? Ich hab einfach:
BlockWrite(DatenDatei,TStringsVariable,1);

PAX

Luckie 23. Nov 2003 16:58

Re: TStringList aus Datei beliebigen Typs wieder einlesen
 
Warum benutzt du nicht die Methode SaveToFile von TStringlist? :gruebel:

-P-A-X- 23. Nov 2003 17:49

Re: TStringList aus Datei beliebigen Typs wieder einlesen
 
Weil ich es nicht in eine Textfile gespeichert haben möchte. Ich weiß nicht in welcher Form es BlockWrite macht (wüsste ich auch mal gern :-) ), aber in dieser verschlüsselten Form muss es geschehen. Dazu kommt noch, dass in selbiger Datei mit BlockWrite Inhalt von String-Ausdrücken gespeichert wurde.
Es muss doch möglich sein, das wieder einzulesen, wenns auch zu schreiben ging?!

PAX

toms 23. Nov 2003 18:34

Re: TStringList aus Datei nicht definierten Typs wieder einl
 
Im Prinzip funktioniert das etwa so:

Delphi-Quellcode:
procedure BlockWriteStringList(sl: TStrings; FileName: TFileName);
var
  lIntSize, toWrite: LongInt;
  fil: file;
begin
  AssignFile(fil, filename);
  try
    Rewrite(fil, 1);
    try
      lIntSize := SizeOf(toWrite);
      toWrite := Length(sl.Text);
      BlockWrite(fil, toWrite, lIntSize);
      if toWrite > 0 then
        BlockWrite(fil, sl.Text[1], toWrite);
    finally
      CloseFile(fil);
    end;
  except
  end;
end;

procedure BlockReadStringList(sl: TStrings; FileName: TFileName);
var
  s: string;
  lIntLth,
  lth: LongInt;
  fil: file;
begin
  AssignFile(fil, filename);
  try
    Reset(fil, 1);
    lIntLth := SizeOf(lth);
    try
      BlockRead(fil, lth, lIntLth);
      if lth > 0
        then begin
          SetLength(s, lth);
          BlockRead(fil, s[1], lth);
          sl.Text := s;
        end
      else sl.Text := '';
    finally
      CloseFile(fil);
    end;
  except
  end;
end;

// Testen:
procedure TfrmMain.Button1Click(Sender: TObject);
var
  SL: TStringList;
begin
  sl := TStringList.Create;
  try
    // Der Stringliste Items hinzufügen
    SL.Add('test1');
    SL.Add('test2');
    SL.Add('test3');
    // Stringliste in Datei speichern
    BlockWriteStringList(SL, 'c:\temp\test.dat');
    // Stringliste löschen
    SL.Clear;
    // StringListe laden
    BlockReadStringList(SL, 'c:\temp\test.dat');
    // 2. Item der StringListe anzeigen
    ShowMessage(SL[1]);
  finally
    SL.Free;
  end;
end;

-P-A-X- 24. Nov 2003 16:25

Re: TStringList aus Datei nicht definierten Typs wieder einl
 
Das heißt, er schreibt in diese Datei verschlüsselt jede einzelne Zeile des TStrings immer jeweils als neuen Block, als wenn ich jede Zeile einem anderen String zuorde und mit BlockWrite schreibe?

PAX


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz