Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Datei mit FileStream auslesen (https://www.delphipraxis.net/154085-datei-mit-filestream-auslesen.html)

p80286 2. Sep 2010 12:31

AW: Datei mit FileStream auslesen
 
Entschuldigt,
aber wenn ich soetwas als Beschreibung von Daten in einer Datei lese, fühle ich mich doch sehr unwohl:
Delphi-Quellcode:
formula : array[1..255] of string;
was verbirgt sich hinter "String"?
Handelt es sich um den "klassischen" Pascal-String Längenbyte,Nutzdaten[1]..Nutzdaten[längenbyte] oder ist es ein LängenWort(16Bit)/(32Bit), sind für jeden String 255 Bytes reserviert oder sind die Längenangaben/Strings mit oder ohne Trennzeichen hintereinander "geklatscht"??????
Unicode und 16Bit-Chars sparen wir uns einmal.

Und dann gibt es noch die Frage ob die Zahlen Leastsignifikant (Intel) gespeichert wurden, denn wenn dies nicht der Fall ist, dann kann man kein Word/Integer oder was auch immer sondern nur Bytes lesen, die dann erst einmal "richtig" sortiert werden müssen.

(Falls man das Format einer Datei nicht genau kennt, dann geht kein Weg an Filestream vorbei)

Gruß
K-H

mkinzler 2. Sep 2010 12:33

AW: Datei mit FileStream auslesen
 
In einem Record sollte/darf man nur ShortString verwenden

p80286 2. Sep 2010 16:17

AW: Datei mit FileStream auslesen
 
Zitat:

Zitat von mkinzler (Beitrag 1046970)
In einem Record sollte/darf man nur ShortString verwenden

"sollte" kann ich nur voll unterstützen,
bei "darf" hab' ich so meine Zweifel. Wenn ich mich richtig erinnere geistern hier einige Records mit AnsiStrings herum.

Gruß
K-H

mkinzler 2. Sep 2010 16:25

AW: Datei mit FileStream auslesen
 
Man kann es schon verwenden. Eine solche Struktur kann man dann aber nicht in typisierten Datein o.ä. verwenden

delphinewbie 10. Sep 2010 10:57

Problem gelöst
 
Hi,
nach unendlich vielen Versuchen bin ich nun zu einer Lösung meines Problems gekommen. Auch wenn ich nicht ganz nachvollziehen kann, wo letztendlich der Unterschied dieser beiden Varianten besteht, bin ich nun erstmal erleichtert, dass der Fehler beim Programm beenden nicht mehr auftritt. Vielleicht kann mir von euch jemand erklären, wo hier der feine Unterschied liegt.
Also: meine ursprüngliche Variante
Delphi-Quellcode:
Read(ds.size_ext_ch_header[i],sizeof(longint));
Setlength(ds.ext_ch_header[i], ds.size_ext_ch_header[i]);
Read(ds.ext_ch_header[i],ds.size_ext_ch_header[i]);
habe ich nun verändert in
Delphi-Quellcode:
Read(ds.size_ext_ch_header[i],sizeof(longint));
for k:=1 to ds.size_ext_ch_header[i] do
     Read(ds.ext_ch_header[i],1);
Es wird nun also byteweise ausgelesen, und zwar so oft, wie es in ds.size_ext_ch_header[i] drin steht. Und es funktioniert :thumb:
Da ich den Inhalt dieser Bytes nicht weiter benötige, kann ich also diese auch immer wieder überschreiben.
Kann ich eigentlich in so einem Fall auch einfach 100 Byte oder so viel Bytes, wie in ds.size_ext_ch_header[i] steht, weiter springen, um so bspw. 'uninteressante' Daten zu überspringen ? Dann könnte ich mir ja diese for-Schleife sparen...

Vielen Dank für Eure Tipps

shmia 10. Sep 2010 11:10

AW: Datei mit FileStream auslesen
 
Du kannst Daten, die du nicht braucht ganz einfach so überspringen:
Delphi-Quellcode:
Position := Position + 100; // aktuelle Position im Stream um 100 Bytes nach "hinten" verschieben.

himitsu 10. Sep 2010 11:25

AW: Datei mit FileStream auslesen
 
Zitat:

Zitat von shmia (Beitrag 1048659)
Delphi-Quellcode:
Position := Position + 100;

Oder man nehme .Seek :angel:

delphinewbie 10. Sep 2010 11:28

AW: Datei mit FileStream auslesen
 
Sooooo einfach kann es sein !!!
Hat geklappt,
Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 Uhr.
Seite 4 von 4   « Erste     234   

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