![]() |
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:
1. Du solltest statt Length(Buffer) Length(DumpFile) verwenden, ich nehme an, dass die beiden unterschiedliche Größen haben wegen dem
DestStream.Write(DumpFile,Length(Buffer));
Delphi-Quellcode:
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
DumpFile:= FastReplace(Buffer[1],'\n', '', False);
Dann wird daraus
Delphi-Quellcode:
PS: Meine OH kennt FastReplace nicht. Hast du die selbst geschrieben oder gibt es die erst bei neueren Delphi-Versionen?
DestStream.Write(DumpFile[1],Length(DumpFile));
|
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
|
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; |
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 |
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 |
Re: Text Dateien (500mb+) in einen String einlesen
ich hab schon ein wenig rumgesucht und folgenden thread gefunden:
![]() hast du den code von Christian Seehase auch genutzt? |
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 |
Re: Text Dateien (500mb+) in einen String einlesen
hm
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 Uhr. |
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