Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ZipForge: Textdatei entpacken und in Stringliste einlesen (https://www.delphipraxis.net/166813-zipforge-textdatei-entpacken-und-stringliste-einlesen.html)

devidespe 1. Mär 2012 10:45

ZipForge: Textdatei entpacken und in Stringliste einlesen
 
Hi,

ich möchte ZipForge verwenden, um eine Textdatei mit ca. 50000 Zeilen aus einer Zip-Datei im Arbeitsspeicher zu entpacken und in eine TStringList einzulesen. Leider kennt ZipForge nur die 4 Entpackfunktionen ExtractFiles, ExtractToBuffer, ExtractToStream und ExtractToString, wovon letztere nur die Angabe eines normalen Strings erlaubt. Das reicht für diese Datenmenge natürlich nicht aus.

Geschrieben habe ich eine entsprechende Testfunktion, wie das ursprünglich mit der StringListe geplant war. Leider funktioniert ExtractToString mit diesem Parameter nicht:

Delphi-Quellcode:
procedure TMainForm.bnStartClick(Sender: TObject);
var testliste : TStringList;
begin
  testliste:=TStringList.Create; {initialize Stringlist}
  with Archiver do
  begin
    FileName := 'zipfile.zip';
    Password := 'test';
    OpenArchive;
    ExtractToString('TextFileWithinZipFile.txt', testliste);
    CloseArchive;
  end;
  ProcessStringList(testliste); {internal function to proces the contents of the stringlist}

  testliste.Free; {deinitialize stringlist}
end;
Kennt jemand einen anderen Weg, die Textdatei in die StringListe einzulesen, ohne temporär eine Textdatei zu erstellen und diese wiederum einzulesen?

Danke für die Vorschläge.

Lemmy 1. Mär 2012 10:48

AW: ZipForge: Textdatei entpacken und in Stringliste einlesen
 
Hi,

warum verwendest DU nicht ExtractToStream? Das ganze dann in einen MemoryStream speichern und den dann über StringList.LoadFromStream in deine Stringlist bringen?

devidespe 1. Mär 2012 11:52

AW: ZipForge: Textdatei entpacken und in Stringliste einlesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm, der Ansatz klingt gut und ich habe die Procedure umgeschrieben. Entweder arbeitet ExtractToStream nicht richtig, oder ich mache was falsch. Die Ergebnisse des Streams und damit auch der Stringliste sind nach dem Einlesen leer. Anbei noch einmal der aktuelle Code mit der Testdatei als Anhang.

Delphi-Quellcode:
procedure TMainForm.bnStartClick(Sender: TObject);
var testliste   : TStringlist;
    memorystream : TStream;
begin
  MemoryStream:=TMemoryStream.Create;

  with Archiver do
  begin
    FileName := 'testdatei.zip';
    OpenArchive;
    ExtractToStream('testdatei.txt', MemoryStream);
    CloseArchive;
  end;

  testliste:=TStringList.Create; {initialize Stringlist}
  testliste.LoadFromStream(MemoryStream);
  MemoryStream.Free;

  ProcessStringList(testliste); {internal function to proces the contents of the stringlist}

  testliste.Free; {deinitialize stringlist}
end;
Vielleicht kann jemand den entscheidenden Tipp geben...

Uwe Raabe 1. Mär 2012 12:07

AW: ZipForge: Textdatei entpacken und in Stringliste einlesen
 
Delphi-Quellcode:
MemoryStream.Position := 0;
testliste.LoadFromStream(MemoryStream);

devidespe 1. Mär 2012 12:29

AW: ZipForge: Textdatei entpacken und in Stringliste einlesen
 
Danke, das war die Lösung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 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