![]() |
Binäre Datei lesen - 2 Werte gleichzeitig
Liebe Gemeischaft
Ich zerbreche mir den Kopf über folgendes Problem mit einer Schleife: Ich habe binäre Dateien in deren jeweils eine Serie von Werten stehen (single type). Diese sind sequenziell angeordnet, aber die erste Hälfte sind X-Werte und die zweite hälfte sind Y-Werte und ich kenne die Anzahl X-Werte (n). zb: 1.2345 2.3456 3.4567 4.5678 5.6789 6.7890 (n=3, X-Werte: 1.2345 2.3456 3.4567, Y-Werte: 4.5678 5.6789 6.7890) - eigentlich gibt es keinen Abstand zwischen den Werten, aber die Länge der einzelnen Werten ist ja bekannt. Nun müsste ich in einer Schleife die entsprechenden X & Y-Werte-paare auslesen und übergeben (X=1.2345,Y=4.5678, ...). Habe (u.a) folgendes versucht, wobei es nun am Seek zu scheitern scheint:
Delphi-Quellcode:
Wüsste mir jemand Rat geben ?var k, BinSize: integer; BinDat: array of Real; BinFile : TStream; Xnum, Ynum, t: single; ... SetLength(BinDat, BinSize); BinSize:= n*2; for k := 0 to BinSize-n-1 do begin BinFile.Read(t, 4); // lese single, 4 bites BinDat[k]:=t; Xnum:=BinDat[k]; Seek(BinFile, BinSize-n+k); BinFile.Read(t, 4); BinDat[k]:=t; Ynum:=BinDat[k]; AddXY(Xnum,Ynum); // fügt Werte-paar in TeeChart-Serie ein end; |
Re: Binäre Datei lesen - 2 Werte gleichzeitig
Ich würde zuerst alle Werte sequentiell Einlesen und dann erst nach x/y Trennen.
|
Re: Binäre Datei lesen - 2 Werte gleichzeitig
Oh - das war schnell :-)
aber wohin damit in der zwischenzeit - und wie dann auftrennen ? |
Re: Binäre Datei lesen - 2 Werte gleichzeitig
Zitat:
Zitat:
|
Re: Binäre Datei lesen - 2 Werte gleichzeitig
Habe eigentlich zuwenig erfahrung mit Arrays! - hättest du mir ein beispielcode ? Das Array müsste ich dann wieder lesen können, und ich stünde vor dem gleichen Problem.
|
Re: Binäre Datei lesen - 2 Werte gleichzeitig
Zitat:
Zitat:
Delphi-Quellcode:
var
k, BinSize: integer; BinDat: array of Real; BinFile : TStream; Xnum, Ynum, t: single; ... BinSize:= n*2; SetLength(BinDat, BinSize); for k := 0 to BinSize-1 do begin BinFile.Read(t, 4); // lese single, 4 bites BinDat[k]:=t; end; for k = 0 to n-1 do begin AddXY(BinDat[k],BinDat[k+n]); // fügt Werte-paar in TeeChart-Serie ein end; |
Re: Binäre Datei lesen - 2 Werte gleichzeitig
Hey cool -
bin nun aber duch meine beschränkten Kenntnisse verunsichert - wird dadurch nicht die erste for-Schleife (für X-Werte) vollständig durchgelafen bevor die zweite (für Y-Werte) zum Zuge kommt - sodass sich die Werte gar nich paaren ? |
Re: Binäre Datei lesen - 2 Werte gleichzeitig
Hi,
wenn der Buffer schon groß genug angelegt wird um alle Werte aufzunehmen, dann könnte man auch mit nur einem einzigen Lesebefehl operieren:
Delphi-Quellcode:
Freundliche Grüße
function LoadValues(cs: TChartSeries; fn: TFileName): Integer;
var s: TStream; i, n: Integer; xy: TSingleDynArray; begin with TFileStream.Create(fn, fmOpenRead or fmShareDenyWrite) do begin SetLength(xy, Size div SizeOf(Single)); ReadBuffer(xy[0], Length(xy)); cs.Clear; n := Length(xy) div 2; for i := 0 to Pred(n) do cs.AddXY(xy[i], xy[i + n]); Free; end; end; |
Re: Binäre Datei lesen - 2 Werte gleichzeitig
Hallo marabu
Danke für dein Tip. Den Buffer groß genug anlegen - heisst das mit dem TSingleDynArray ? Besten Dank natürlich auch an mkinzler ! |
Re: Binäre Datei lesen - 2 Werte gleichzeitig
TSingleDynArray ist ein array of Single aus der Unit Types. Dimensioniert habe ich es mittels SetLength().
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 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