Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem beim einlesen einer Datei in einen Stream (https://www.delphipraxis.net/90196-problem-beim-einlesen-einer-datei-einen-stream.html)

CCRDude 13. Apr 2007 10:05

Re: Problem beim einlesen einer Datei in einen Stream
 
Zitat:

Zitat von lizardking
An der Stelle sollte es eigentlich schon knallen. Versuch mal
Delphi-Quellcode:
    Stream.Read(@Len, SizeOf(Len));

Wieso? So intelligent ist Delphi schon, die Adresse zu verwenden ist da keineswegs notwendig (habe ich auf zwei Seiten voller gegrepter .Read-Aufrufe nie verwenden müssen ;) ).

Chilled86 13. Apr 2007 10:07

Re: Problem beim einlesen einer Datei in einen Stream
 
Zitat:

Zitat von lizardking
An der Stelle sollte es eigentlich schon knallen. Versuch mal

Delphi-Quellcode:
    Stream.Read(@Len, SizeOf(Len));
;)

"Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden" :wall:



***EDIT***
Len ist irgendwie immer gleichgroß, selbst wenn ich im Stream ne andere Datei öffne

CCRDude 13. Apr 2007 10:14

Re: Problem beim einlesen einer Datei in einen Stream
 
Deswegen sag ich ja, daß die Adresse unnötig ist ;)

Und eine Größe von $2D2D2D2D erscheint mir heftig, da bin ich mir unsicher, ob dynamische Arrays diese Größe überhaupt unterstützen? Außerdem erscheint mir $2D2D2D2D auch nicht wie das typische Größenfeld. Hat die Datei vielleicht am Anfang noch einen Header? Ich würd vorschlagen Du liest Dir den Anfang der Datei erstmal mit einen Hexeditor durch, bevor Du weiter Fehler im Code suchst ;)

Chilled86 13. Apr 2007 10:19

Re: Problem beim einlesen einer Datei in einen Stream
 
Zitat:

Zitat von CCRDude
Deswegen sag ich ja, daß die Adresse unnötig ist ;)

Und eine Größe von $2D2D2D2D erscheint mir heftig, da bin ich mir unsicher, ob dynamische Arrays diese Größe überhaupt unterstützen? Außerdem erscheint mir $2D2D2D2D auch nicht wie das typische Größenfeld. Hat die Datei vielleicht am Anfang noch einen Header? Ich würd vorschlagen Du liest Dir den Anfang der Datei erstmal mit einen Hexeditor durch, bevor Du weiter Fehler im Code suchst ;)

Die Datei hat keinen Header. Ist ne stink normale TXT Datei

CCRDude 13. Apr 2007 10:29

Re: Problem beim einlesen einer Datei in einen Stream
 
Und warum versuchst Du dann, Binärfelder für Längen aus einer TEXT-Datei auszulesen? :shock:

Las mich raten... die ersten 4 Zeichen der Textdatei sind "----" - das entspricht dann Deiner "Länge"...

Du vermischt hier dann wohl zwei Sachen: typisierte Dateien mit Textdateien. Das wär auch "klassisch" ohne Streams (file of record vs. textfile) nicht machbar. Du mußt dann hier byteweise bis #13 bzw. #13#10 oder #10 auslesen etc...

PS: Wo ich mir das oben näher ansehe, merke ich auch, daß es um ICQ-Logs geht? Ja, die sind wahrscheinlich wirklich Text... da Du geschrieben hast, daß Du Dich mit Streams nicht genau auskennst, kennst Du ja vielleicht normale Textdateien wenigstens? Dann würde ich die empfehlen... Hier mal ein DelphiBasics-Beispiel.

Chilled86 13. Apr 2007 10:32

Re: Problem beim einlesen einer Datei in einen Stream
 
Zitat:

Zitat von CCRDude
Und warum versuchst Du dann, Binärfelder für Längen aus einer TEXT-Datei auszulesen? :shock:

Las mich raten... die ersten 4 Zeichen der Textdatei sind "----" - das entspricht dann Deiner "Länge"...

Du vermischt hier dann wohl zwei Sachen: typisierte Dateien mit Textdateien. Das wär auch "klassisch" ohne Streams (file of record vs. textfile) nicht machbar. Du mußt dann hier byteweise bis #13 bzw. #13#10 oder #10 auslesen etc...

:wiejetzt: Das könnte natürlich mein Problem sein :oops: Hast du ein Tutorial wie das ganze funzt?

TeronG 13. Apr 2007 10:39

Re: Problem beim einlesen einer Datei in einen Stream
 
Wie gesagt ich bin kein Stream-Experte aber warum verwendest du nicht TMemoryStream? Das ding hat nämlich ein .LoadFromFile ... :gruebel:

CCRDude 13. Apr 2007 10:43

Re: Problem beim einlesen einer Datei in einen Stream
 
Naja, einen TMemoryStream kann man als Cache dazwischenschalten, aber prinzipiell würde ich fast nie TMemoryStream.LoadFromFile verwenden, solange die Größe der verwendeten Dateien beliebig sein kann. Eher blockweise von TFileStream nach TMemoryStream umkopieren, aber das ist für nen Streamneuling nicht wirklich das wahre...

Ein wirklich simples Beispiel, das eine einzelne Zeile in eine Textdatei schreibt und danach alle Zeilen dieser Datei nacheinander ausliest, ist schon in meinem PS darüber verlinkt. Nochmal grob das zeilenweise auslesen zusammengefasst:

Delphi-Quellcode:
var tf: TextFile;
    sLine: string;
begin
   AssignFile(tf, 'c:\meincqlog.txt');
   while not EoF(tf) do begin
      ReadLn(tf, sLine);
      DoSomethingWithText(sLine);
   end;
   CloseFile(tf);
end;
Ist zwar nicht bis ins letzte objektorientiert, aber manchmal muss man das mit der OO ja auch nicht übertreiben ;)

Chilled86 13. Apr 2007 10:49

Re: Problem beim einlesen einer Datei in einen Stream
 
DANKE FÜR EURE HILFE!!!!
habs hinbekommen, und sorry dass ich als so dumme Fragen stell, bin halt noch Anfänger. :coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:58 Uhr.
Seite 2 von 2     12   

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