![]() |
Re: Text Dateien (500mb+) in einen String einlesen
Ich würde dann aber bei GetMem mehr nehmen (4096) als bei BlockSize (3072) und eben notfalls (ReAllocMem) Speicher nachladen, nicht immer.
Der Rückgabewert ist ein Integer, und zwar die Anzahl der tatsächlich gelesenen Bytes |
Re: Text Dateien (500mb+) in einen String einlesen
also zur zeit schaut das ganze wie folgt aus:
Code:
endet allerdings in einer Zugriffsverletzung unbekannter Herkunft =(
const
BlockSize = 1024; var SrcStream, DestStream: TFileStream; FileName, FileName2, Buffer: String; N, ChunkLen :integer; begin FileName:= 'dump1.txt'; FileName2:= 'dump2.txt'; SrcStream:=TFileStream.Create(FileName,fmOpenread or fmShareDenyNone); DestStream:=TFileStream.Create(FileName2,fmCreate); try N:=SrcStream.Size; while N>0 do begin if N>BlockSize then ChunkLen:=BlockSize else ChunkLen:=N; SetLength(Buffer,ChunkLen); srcStream.ReadBuffer(Buffer,ChunkLen); N:=N-ChunkLen; FastReplace(Buffer,'\n', '', False); DestStream.WriteBuffer(Buffer,Length(Buffer)); end; finally SrcStream.Free; DestStream.Free; end; |
Re: Text Dateien (500mb+) in einen String einlesen
Zitat:
Delphi-Quellcode:
WriteBuffer(Buffer[1], Length(Buffer))
|
Re: Text Dateien (500mb+) in einen String einlesen
nein das klappt leider auch noch nicht,
ich hab die abwandlung von jemanden aus einer newsgroup im orginal sah das ganze so aus: srcStream.ReadBuffer(PChar(Buffer),ChunkLen); und DestStream.WriteBuffer(PChar(Buffer),Length(Buffer )); allerdings ging das ganze so nicht durch den compiler |
Re: Text Dateien (500mb+) in einen String einlesen
Warum nimmst du nicht einfach Read oder Write oder [oh]ReadBuffer, WriteBuffer[/oh]
PS: Ich sehe keinen Grund, hier etwas anderes als Read oder Write zu verwenden, außer, du willst es dir unnötig kompliziert machen. |
Re: Text Dateien (500mb+) in einen String einlesen
ich nutze doch read & writebuffer ?
|
Re: Text Dateien (500mb+) in einen String einlesen
Nehm doch
![]() ![]() Ich weiß nicht, wozu es überhuptpt die ...Buffer gibt, jedenfalls scheint mit nach Studieren der OH, dass sie eigentlich das gleiche wie Read und Write machen. Aber nimm lieber die normalen Read und Write. |
Re: Text Dateien (500mb+) in einen String einlesen
wahrscheinlich stell ich mich einfach zu dumm an
Delphi-Quellcode:
erzeugt auch eine zugriffsverletzung
srcStream.Read(Buffer,ChunkLen);
N:=N-ChunkLen; DestStream.Write(Buffer[1],Length(Buffer)); |
Re: Text Dateien (500mb+) in einen String einlesen
Du musst es beim Lesen genauso wie beim schreiben machen, Buffer[1] und nicht Buffer. Das sollte man sich angewöhnen, wenn man bei Streams mit Strings arbeitet.
![]() [edit=Admin]BBCode korrigiert. Mfg, Daniel[/edit] |
Re: Text Dateien (500mb+) in einen String einlesen
oh danke für deine gedult *gg*
auf jeden fall gibts nun keine zugriffsverletzung mehr, allerdings wenn ich nun versuche die inhalte aus dem buffer auf folgendem weg zu parsen dann erhalte ich ein wildes ascii kaos
Code:
SetLength(Buffer,ChunkLen);
srcStream.Read(Buffer[1],ChunkLen); N:=N-ChunkLen; DumpFile:= FastReplace(Buffer[1],'\n', '', False); DestStream.Write(DumpFile,Length(Buffer)); |
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