AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Text Dateien (500mb+) in einen String einlesen
Thema durchsuchen
Ansicht
Themen-Optionen

Text Dateien (500mb+) in einen String einlesen

Ein Thema von endeffects · begonnen am 13. Okt 2004 · letzter Beitrag vom 16. Okt 2004
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#11

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

  Alt 13. Okt 2004, 16:26
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
Felix Alter
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#12

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

  Alt 13. Okt 2004, 20:56
also zur zeit schaut das ganze wie folgt aus:

Code:
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;
endet allerdings in einer Zugriffsverletzung unbekannter Herkunft =(
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#13

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

  Alt 13. Okt 2004, 21:03
Zitat von endeffects:
Delphi-Quellcode:
...
        DestStream.WriteBuffer(Buffer,Length(Buffer));
...
endet allerdings in einer Zugriffsverletzung unbekannter Herkunft =(
Ja, nach 4 Bytes ist Schluss, der String selbst ist nur ein Pointer (weshalb man ihn mit PChar typecasten kann). Du musst ab dem ersten Zeichen des Strings schreiben, also WriteBuffer(Buffer[1], Length(Buffer))
Felix Alter
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#14

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

  Alt 13. Okt 2004, 21:13
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
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#15

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

  Alt 13. Okt 2004, 21:20
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.
Felix Alter
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#16

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

  Alt 13. Okt 2004, 21:23
ich nutze doch read & writebuffer ?
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#17

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

  Alt 13. Okt 2004, 21:29
Nehm doch Delphi-Referenz durchsuchenTStream.Read und Delphi-Referenz durchsuchenTStream.Write und nicht die ...Buffer-Funktionen. Dann geht es viel einfacher.

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.
Felix Alter
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#18

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

  Alt 13. Okt 2004, 21:36
wahrscheinlich stell ich mich einfach zu dumm an

Delphi-Quellcode:
srcStream.Read(Buffer,ChunkLen);
N:=N-ChunkLen;
DestStream.Write(Buffer[1],Length(Buffer));
erzeugt auch eine zugriffsverletzung
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#19

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

  Alt 13. Okt 2004, 21:39
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.

http://www.delphi-groups.de/YaBBSe/i...=22608;start=0

[edit=Admin]BBCode korrigiert. Mfg, Daniel[/edit]
Felix Alter
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#20

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

  Alt 13. Okt 2004, 21:50
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));
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 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