![]() |
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:
was verbirgt sich hinter "String"?
formula : array[1..255] of 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 |
AW: Datei mit FileStream auslesen
In einem Record sollte/darf man nur ShortString verwenden
|
AW: Datei mit FileStream auslesen
Zitat:
bei "darf" hab' ich so meine Zweifel. Wenn ich mich richtig erinnere geistern hier einige Records mit AnsiStrings herum. Gruß K-H |
AW: Datei mit FileStream auslesen
Man kann es schon verwenden. Eine solche Struktur kann man dann aber nicht in typisierten Datein o.ä. verwenden
|
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:
habe ich nun verändert in
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]);
Delphi-Quellcode:
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:
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); 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 |
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.
|
AW: Datei mit FileStream auslesen
Zitat:
|
AW: Datei mit FileStream auslesen
Sooooo einfach kann es sein !!!
Hat geklappt, Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 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 by Thomas Breitkreuz