AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Binäre Datei lesen - 2 Werte gleichzeitig
Thema durchsuchen
Ansicht
Themen-Optionen

Binäre Datei lesen - 2 Werte gleichzeitig

Ein Thema von danieleh · begonnen am 23. Dez 2006 · letzter Beitrag vom 23. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
danieleh

Registriert seit: 1. Dez 2005
54 Beiträge
 
#1

Binäre Datei lesen - 2 Werte gleichzeitig

  Alt 23. Dez 2006, 10:56
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:
 
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;
Wüsste mir jemand Rat geben ?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Binäre Datei lesen - 2 Werte gleichzeitig

  Alt 23. Dez 2006, 10:59
Ich würde zuerst alle Werte sequentiell Einlesen und dann erst nach x/y Trennen.
Markus Kinzler
  Mit Zitat antworten Zitat
danieleh

Registriert seit: 1. Dez 2005
54 Beiträge
 
#3

Re: Binäre Datei lesen - 2 Werte gleichzeitig

  Alt 23. Dez 2006, 11:07
Oh - das war schnell

aber wohin damit in der zwischenzeit - und wie dann auftrennen ?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Binäre Datei lesen - 2 Werte gleichzeitig

  Alt 23. Dez 2006, 11:09
Zitat:
aber wohin damit in der zwischenzeit
Z.B. in einen Array
Zitat:
- und wie dann auftrennen ?
Damit meinte ich Unterscheiden ob X oder Y.
Markus Kinzler
  Mit Zitat antworten Zitat
danieleh

Registriert seit: 1. Dez 2005
54 Beiträge
 
#5

Re: Binäre Datei lesen - 2 Werte gleichzeitig

  Alt 23. Dez 2006, 11:16
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Binäre Datei lesen - 2 Werte gleichzeitig

  Alt 23. Dez 2006, 11:23
Zitat:
Das Array müsste ich dann wieder lesen können, und ich stünde vor dem gleichen Problem.
Nein, da man auf Arrays indiziert zugreifen kann.
Zitat:
hättest du mir ein beispielcode ?
Ja, du machst das ja schon fast richtig:

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;
Markus Kinzler
  Mit Zitat antworten Zitat
danieleh

Registriert seit: 1. Dez 2005
54 Beiträge
 
#7

Re: Binäre Datei lesen - 2 Werte gleichzeitig

  Alt 23. Dez 2006, 11:31
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 ?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Binäre Datei lesen - 2 Werte gleichzeitig

  Alt 23. Dez 2006, 11:32
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:
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;
Freundliche Grüße
  Mit Zitat antworten Zitat
danieleh

Registriert seit: 1. Dez 2005
54 Beiträge
 
#9

Re: Binäre Datei lesen - 2 Werte gleichzeitig

  Alt 23. Dez 2006, 11:42
Hallo marabu

Danke für dein Tip. Den Buffer groß genug anlegen - heisst das mit dem TSingleDynArray ?

Besten Dank natürlich auch an mkinzler !
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Binäre Datei lesen - 2 Werte gleichzeitig

  Alt 23. Dez 2006, 11:56
TSingleDynArray ist ein array of Single aus der Unit Types. Dimensioniert habe ich es mittels SetLength().
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:48 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