AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Binärdatei Record auslesen\zuweisen
Thema durchsuchen
Ansicht
Themen-Optionen

Binärdatei Record auslesen\zuweisen

Ein Thema von EWeiss · begonnen am 17. Apr 2018 · letzter Beitrag vom 18. Apr 2018
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#11

AW: Binärdatei Record auslesen\zuweisen

  Alt 17. Apr 2018, 14:09
Sieht hier aber so aus, als ob das standard Alignment (von 4?) korrekt wäre. Die Pfade der hinteren Einträge des Arrays stimmen ja bis aufs letzte Byte exakt. Sicher, dass volume an der Stelle 50 sein muss?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

AW: Binärdatei Record auslesen\zuweisen

  Alt 17. Apr 2018, 14:17
Sieht hier aber so aus, als ob das standard Alignment (von 4?) korrekt wäre.
Njain.

Es war mal vor Jahren 4 und in etwas aktuelleren Delphis ist es 8 (für Windows ... in anderen OS vielleicht anders)

http://docwiki.embarcadero.com/RADSt...chten_(Delphi)

PS:
http://docwiki.embarcadero.com/RADSt...chten_(Delphi)
http://docwiki.embarcadero.com/RADSt...Types_(Delphi)


ALIGN gibt aber nur die "maximale" Ausrichtung an.
Kleiner Typen werden an ihrer Größe ausgerichtet.
> WORD alle 2 Byte (außer &Align ist unter 2)
> Interger alle 4 Byte, also nach einem WORD bliebe eine Lücke von 2
$2B or not $2B

Geändert von himitsu (17. Apr 2018 um 14:24 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: Binärdatei Record auslesen\zuweisen

  Alt 17. Apr 2018, 14:19
Zitat:
PS: das "gute" alte file of TMyRecord funktioniert immernoch.
Wie meinst du das?

Zitat:
Sieht hier aber so aus, als ob das standard Alignment (von 4?) korrekt wäre. Die Pfade der hinteren Einträge des Arrays stimmen ja bis aufs letzte Byte exakt. Sicher, dass volume an der Stelle 50 sein muss?
Ich habe die Regler in Fly auf 50% gesetzt von daher müsste es stimmen.

Habe alles versucht.
Delphi-Quellcode:
  {$Align On}
  {$ALIGN 8}
  TSTChannel = record
    ID : Integer;
    streamName : Array [0..250] of AnsiChar;
    freq : single;
    volume : single;
    pan : single;
    mute : byte;
    solo : byte;
    duration : Integer;
    percent : Integer;
    grouplevel : single;
    led : byte;
    rMeterValue : single;
    reserved : Array [0..25] of AnsiChar;
  end;

  {$Align Off}
Array [0..250] of AnsiChar;

Auf
Array [0..MAX_PATH] of AnsiChar;

dann kracht es.

gruss

Geändert von EWeiss (11. Jul 2019 um 16:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#14

AW: Binärdatei Record auslesen\zuweisen

  Alt 17. Apr 2018, 14:27
Wie meinst du das?
http://docwiki.embarcadero.com/RADSt...d_Input-Output
var F: file of TSTChannel;

Zitat:
Delphi-Quellcode:
  {$Align On}
  {$ALIGN 8}
Eines reicht. Es ist Alles das Gleiche.
Delphi-Quellcode:
{$A+} = {$ALIGN ON} = {$ALIGN 8} wobei 8 der DEFAULT ist
{$A-} = {$ALIGN OFF} = {$ALIGN 1}
Delphi-Quellcode:
  {$ALIGN 8}  // ab hier 8
  TSTChannel = record
     ..
  end;
  {$ALIGN ON} // ab hier wieder DEFAULT
$2B or not $2B

Geändert von himitsu (17. Apr 2018 um 14:31 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

AW: Binärdatei Record auslesen\zuweisen

  Alt 17. Apr 2018, 14:33
Zitat:
var F: file of TSTChannel;
Ach so meinst du da.. Danke
Aber ich benötige ein Array.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#16

AW: Binärdatei Record auslesen\zuweisen

  Alt 17. Apr 2018, 14:34
Das ist ein Array bzw. eine Liste.

FileSize = Anzahl der Records, also in der API für diese "Typed Files"
FilePos = Index des Record

FileSize und FilePos werden intern auf RecSize umgerechnet. Delphi-Referenz durchsuchenSystem.Rewrite, wobei bei TypedFiles standardmäßig das dem SizeOf(DeinRecord) entspricht.


file of AnsiChar = Text = eine Textdatei
$2B or not $2B

Geändert von himitsu (17. Apr 2018 um 14:41 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

AW: Binärdatei Record auslesen\zuweisen

  Alt 17. Apr 2018, 14:48
Du meinst wenn ich dich richtig verstehe anstelle von CreateFile..
Nur das löst mein Problem nicht.

Letztendlich ein Ersatz für die WinApi32.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#18

AW: Binärdatei Record auslesen\zuweisen

  Alt 17. Apr 2018, 14:57
Drum hatte ich es eigentlich auch nur nebenbei erwähnt.

Aber ansonsten wurde auch schon alles Wichtige genannt.
* die Speicherausrichtung
* die Art der Typen (z.B. AnsiChar und WideChar, aber nicht Char)

Arrays werden wie ihr enthaltener Typ ausgerichtet, außer bei "packed array",
und bei Records wie ihr größter Typ, außer bei "packed record".
$2B or not $2B

Geändert von himitsu (17. Apr 2018 um 15:00 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#19

AW: Binärdatei Record auslesen\zuweisen

  Alt 17. Apr 2018, 15:08
Drum hatte ich es eigentlich auch nur nebenbei erwähnt.

Aber ansonsten wurde auch schon alles Wichtige genannt.
* die Speicherausrichtung
* die Art der Typen (z.B. AnsiChar und WideChar, aber nicht Char)

Arrays werden wie ihr enthaltener Typ ausgerichtet, außer bei "packed array",
und bei Records wie ihr größter Typ, außer bei "packed record".
Danke für die Infos.
Das ist wieder ein fall wo ich mir nur selber helfen kann..

Also nochmal Danke an alle die versucht haben für mich mitzudenken.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Binärdatei Record auslesen\zuweisen

  Alt 17. Apr 2018, 15:29
So, noch mal kurz vor Feierabend ins Forum geschaut.

Dein Record hat 312 Byte. Die Blöcke in der Datei sind 320 Byte groß.

Wenn ich das richtig in Erinnerung habe, sind Records standardmäßig nicht gepackt. In Turbo-Pascal war das noch anders.

Entweder ist dein Record falsch definiert oder die Speicher-Ausrichtung passt nicht. Ich habe das nicht exakt nachgerechnet, aber ich meine, dass die Ausrichtung zu einer Verschiebung um 10 Byte führen sollte. Das passt dann immer noch nicht zu den 320 Byte.

Lies das doch mal in Blockgrößen (Record of Array [0..319] definieren) zu 320 Byte ein und teste Stückweise, wie es in den geplanten Record passt.
Klassisches Beispiel für einen varianten Record.
Peter

Geändert von Jasocul (18. Apr 2018 um 07:18 Uhr) Grund: ein wichtiges Wort vergessen. Danke Himitsu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


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 02:36 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