Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Text Dateien (500mb+) in einen String einlesen (https://www.delphipraxis.net/31754-text-dateien-500mb-einen-string-einlesen.html)

FAlter 14. Okt 2004 13:41

Re: Text Dateien (500mb+) in einen String einlesen
 
DumpFile :shock: Die Variable war in deinem Letzten Code noch gar nicht drin :(

Folgendes gilt, wenn es ein String ist, was ich vermute:

Delphi-Quellcode:
DestStream.Write(DumpFile,Length(Buffer));
1. Du solltest statt Length(Buffer) Length(DumpFile) verwenden, ich nehme an, dass die beiden unterschiedliche Größen haben wegen dem
Delphi-Quellcode:
DumpFile:= FastReplace(Buffer[1],'\n', '', False);
2. Außerdem habe ich dir bereits gesagt, dass du bei Read und Write in einen String nicht den Pointer verwenden sollst, sondern die Daten, auf die er zeigt. Also nimm DumpFile[1] statt DumpFile

Dann wird daraus
Delphi-Quellcode:
DestStream.Write(DumpFile[1],Length(DumpFile));
PS: Meine OH kennt FastReplace nicht. Hast du die selbst geschrieben oder gibt es die erst bei neueren Delphi-Versionen?

supermuckl 14. Okt 2004 18:51

Re: Text Dateien (500mb+) in einen String einlesen
 
mach es doch mit memory mapped files ! dann kümmert windows sich ums caching und du arbeitest mit der datei alsob du sie komplett im speicher hättest

endeffects 14. Okt 2004 19:01

Re: Text Dateien (500mb+) in einen String einlesen
 
nabends,

ich möchte euch nochmal für eure hilfe und gedult danken,
im großen und ganzen läuft das nun, die 500mb datei
wird innerhalb von ein paar sekunden abgearbeitet,
jetzt muss ich nur noch sicher stellen das strings
die ersetzt werden sollen nicht durch die puffer
größe zerstückelt werden, aber ich denke das bekomm
ich auch alleine hin

@FAlter die fastreplace funktion stammt aus einer unit
deren link ich am anfang gepostet hab, damit lassen sich
sehr schnell stringfunktionen abarbeiten, kann ich dir
sehr empfehlen

der aktuelle code schaut nun so aus:

Delphi-Quellcode:
const
BlockSize = 1024;
var SrcStream, DestStream: TFileStream;
    FileName, FileName2, Buffer: String;
    N, ChunkLen: Integer;
begin
  FileName:= 'dump.txt';
  FileName2:= 'dump2.txt';
  try
  SrcStream:=TFileStream.Create(FileName,fmOpenread or fmShareDenyNone);
  DestStream:=TFileStream.Create(FileName2,fmCreate);
    N:=SrcStream.Size;
    while N>0 do
      begin
        if N>BlockSize
          then ChunkLen:=BlockSize
          else ChunkLen:=N;
        SetLength(Buffer,ChunkLen);
        SrcStream.Read(Buffer[1],ChunkLen);
        Buffer:= FastReplace(Buffer,'\n', '', False);
        N:=N-ChunkLen;
        DestStream.Write(Buffer[1],Length(Buffer));
      end;
  finally
    SrcStream.Free;
    DestStream.Free;
  end;

endeffects 14. Okt 2004 19:03

Re: Text Dateien (500mb+) in einen String einlesen
 
@supermuckl
davon hör ich nun das erste mal, wüßte nicht das es sowas auch gibt
naja ich werds auch nochmal probieren

supermuckl 14. Okt 2004 19:13

Re: Text Dateien (500mb+) in einen String einlesen
 
würde sich bestimmt lohnen..

man nennt es auch MMF abgekürzt..

falls du hilfe brauchst findest ein paar threads hier im forum oder frag mich.. hab da nen großes projekt under linux und windows gemacht mit MMF

endeffects 14. Okt 2004 19:19

Re: Text Dateien (500mb+) in einen String einlesen
 
ich hab schon ein wenig rumgesucht und folgenden thread gefunden:
http://www.delphipraxis.net/internal...&highlight=mmf

hast du den code von Christian Seehase auch genutzt?

supermuckl 14. Okt 2004 19:50

Re: Text Dateien (500mb+) in einen String einlesen
 
naja ich hab mir ne komplette klasse selbst geschrieben ( 25kb )

ausserdem auch für linux..

das is nimmer mit einem stück code zu vergleichen

aber die grundzüge sind die richtigen
.. ist genau das worauf es aufbaut

endeffects 16. Okt 2004 07:53

Re: Text Dateien (500mb+) in einen String einlesen
 
hm


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:36 Uhr.
Seite 3 von 3     123   

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