Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Binärdatei Record auslesen\zuweisen (https://www.delphipraxis.net/196036-binaerdatei-record-auslesen%5Czuweisen.html)

Neutral General 17. Apr 2018 15:16

AW: Binärdatei Record auslesen\zuweisen
 
Zitat:

Zitat von EWeiss (Beitrag 1399573)
Zitat:

Zitat von Neutral General (Beitrag 1399570)
Falls du (ungefähr) weißt was in einem dieser Channel Records drin stehen müsste, dann öffne die .bin doch mal in einem Hex-Editor und dann siehst du wie lang das Record ist und wie die Felder liegen. Dementsprechend kannst du dann deinen Code anpassen. Oder falls die Datei nicht so groß ist usw. kannst du sie vllt. ja mal hochladen.

Der FileSize ist OK!
2,81 KB (2.880 Bytes)...

gruss

Ich glaube du hast meinen Post nur überflogen :P
Ich hab gefragt ob du die Datei mal hochladen könntest, damit wir uns das mal anschauen können.

HolgerX 17. Apr 2018 15:18

AW: Binärdatei Record auslesen\zuweisen
 
Hmm..

Wenn ich dass richtig sehe, sind die Array Definitionen falsch!

Richtig müsste es so sein:
(Oben das Original)

Delphi-Quellcode:
{
MAX_PATH = 260;

TYPE STChannel
    ID        AS LONG
    streamName AS ASCIIZ * %MAX_PATH
    freq      AS SINGLE
    volume    AS SINGLE
    pan       AS SINGLE
    mute      AS BYTE
    solo      AS BYTE
    duration  AS LONG
    percent   AS LONG
    grouplevel AS SINGLE
    led       AS BYTE
    rMeterValue AS SINGLE
    reserved  AS ASCIIZ * 25 '// Total 320 bytes.
END TYPE
}

type
  TSTChannel = packed record
    ID         : LONGINT;
    streamName : Array [0..MAX_PATH-1] of AnsiChar;
    freq       : single;
    volume     : single;
    pan        : single;
    mute       : BYTE;
    solo       : BYTE;
    duration   : LONGINT;
    percent    : LONGINT;
    grouplevel : single;
    led        : BYTE;
    rMeterValue : single;
    reserved   : Array [0..24] of AnsiChar;
  end;
So kommt auch die Länge von 320 Bytes hin...

Ein C-Array von 25er Länge ist in Delphi ein Array von 0..24 !

(Erstellt mit D6)

Neutral General 17. Apr 2018 15:20

AW: Binärdatei Record auslesen\zuweisen
 
Du hast Recht. Doof, dass echt keiner von uns in den ganzen 4 Seiten drauf gekommen ist :oops: :lol:
Die Arrays waren jeweils 1 Element zu lang.

EWeiss 17. Apr 2018 15:31

AW: Binärdatei Record auslesen\zuweisen
 
Zitat:

Zitat von Neutral General (Beitrag 1399574)
Zitat:

Zitat von EWeiss (Beitrag 1399573)
Zitat:

Zitat von Neutral General (Beitrag 1399570)
Falls du (ungefähr) weißt was in einem dieser Channel Records drin stehen müsste, dann öffne die .bin doch mal in einem Hex-Editor und dann siehst du wie lang das Record ist und wie die Felder liegen. Dementsprechend kannst du dann deinen Code anpassen. Oder falls die Datei nicht so groß ist usw. kannst du sie vllt. ja mal hochladen.

Der FileSize ist OK!
2,81 KB (2.880 Bytes)...

gruss

Ich glaube du hast meinen Post nur überflogen :P
Ich hab gefragt ob du die Datei mal hochladen könntest, damit wir uns das mal anschauen können.

Danke habe ich ;)
https://www.delphipraxis.net/1399535-post13.html

gruss

EWeiss 17. Apr 2018 15:36

AW: Binärdatei Record auslesen\zuweisen
 
Zitat:

Zitat von Neutral General (Beitrag 1399577)
Du hast Recht. Doof das echt keiner von uns in den ganzen 4 Seiten drauf gekommen ist :oops: :lol:
Die Arrays waren jeweils 1 Element zu lang.

Boahhh eh ja so kann es manchmal gehen :) :wall: :mrgreen:
@HolgerX Danke vielmals..

gruss

KodeZwerg 17. Apr 2018 15:40

AW: Binärdatei Record auslesen\zuweisen
 
Zitat:

Zitat von HolgerX (Beitrag 1399575)
(Erstellt mit D6)

Hallo HolgerX, ich habe mal deine Type definition ausprobiert, für Record 1-7 aus der .bin klappt es mit der "StreamName" nun, Record 8 und 9 wird übersprungen.
Per HexEdit zeigt der mir für #8 auch einen gekappten Namen an ("weetly Broken (A)\Loop.mp3" alle anderen beginnen mit "Sweetly Broken") und #9 ist leer.
Könnte es sein dass das (#8 und #9) entfernte Records sind? Also Überbleibsel.

EWeiss 17. Apr 2018 15:54

AW: Binärdatei Record auslesen\zuweisen
 
Zitat:

Zitat von KodeZwerg (Beitrag 1399585)
Zitat:

Zitat von HolgerX (Beitrag 1399575)
(Erstellt mit D6)

Hallo HolgerX, ich habe mal deine Type definition ausprobiert, für Record 1-7 aus der .bin klappt es mit der "StreamName" nun, Record 8 und 9 wird übersprungen.
Per HexEdit zeigt der mir für #8 auch einen gekappten Namen an ("weetly Broken (A)\Loop.mp3" alle anderen beginnen mit "Sweetly Broken") und #9 ist leer.
Könnte es sein dass das (#8 und #9) entfernte Records sind? Also Überbleibsel.

Ich werde mir das nachher nochmal genau anschauen.;)

gruss

HolgerX 17. Apr 2018 17:46

AW: Binärdatei Record auslesen\zuweisen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm..

Hab mal nen kleines Testtool...

Scheint alles nun zu passen..


(Erstellt mit D6)

KodeZwerg 17. Apr 2018 18:00

AW: Binärdatei Record auslesen\zuweisen
 
Ok, Dein Tool bringt die gleichen Ergebnisse, #8 und #9 entweder defekt oder sonst was.
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
type
  TSTChannel = packed record
    ID : LONGINT;
    streamName : Array [0..MAX_PATH-1] of AnsiChar;
    freq : single;
    volume : single;
    pan : single;
    mute : BYTE;
    solo : BYTE;
    duration : LONGINT;
    percent : LONGINT;
    grouplevel : single;
    led : BYTE;
    rMeterValue : single;
    reserved : Array [0..24] of AnsiChar;
   end;
var
 STChannel : TSTChannel;
 MyRead: File of TSTChannel;
begin
  Memo1.Clear;
  AssignFile(MyRead, '.\Channels.bin');
  Reset(MyRead);
  try
    while not EOF(MyRead) do
    begin
      Read(MyRead, STChannel);
      with STChannel do
      begin
       Memo1.Lines.Add('RECORD >>> '+IntToStr(FilePos(MyRead))); // Da ID nichts liefert, liefer ich mir selbst was
       Memo1.Lines.Add('ID: '+IntToStr(ID));
       Memo1.Lines.Add('StreamName: '+String(StreamName));
       Memo1.Lines.Add('Freq: '+FloatToStr(freq));
       Memo1.Lines.Add('Volume: '+FloatToStr(Volume));
       Memo1.Lines.Add('Pan: '+FloatToStr(Pan));
       Memo1.Lines.Add('Mute: '+IntToStr(Mute));
       Memo1.Lines.Add('Solo: '+IntToStr(Solo));
       Memo1.Lines.Add('Duration: '+IntToStr(Duration));
       Memo1.Lines.Add('Percent: '+IntToStr(Percent));
       Memo1.Lines.Add('GroupLevel: '+FloatToStr(GroupLevel));
       Memo1.Lines.Add('Led: '+IntToStr(Led));
       Memo1.Lines.Add('rMeterValue: '+FloatToStr(rMeterValue));
       Memo1.Lines.Add('Reserved: '+String(Reserved));
       Memo1.Lines.Add('');
      end;
    end;
  finally
   CloseFile(MyRead);
  end;
end;
Danke für check!

EWeiss 17. Apr 2018 18:07

AW: Binärdatei Record auslesen\zuweisen
 
Zitat:

Zitat von HolgerX (Beitrag 1399601)
Hmm..

Hab mal nen kleines Testtool...

Scheint alles nun zu passen..


(Erstellt mit D6)

Jo stimmt schon ;)
Zitat:

Memo1.Lines.Add('RECORD >>> '+IntToStr(FilePos(MyRead))); // Da ID nichts liefert, liefer ich mir selbst was
Die liefert nichts wird aber in der Anwendung zugewiesen.
Das Teil ist nur zum testen meiner LIB.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 Uhr.
Seite 4 von 5   « Erste     234 5      

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