Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wieder TextDatei diesmal binär (https://www.delphipraxis.net/159805-wieder-textdatei-diesmal-binaer.html)

EWeiss 13. Apr 2011 14:42

Wieder TextDatei diesmal binär
 
Kann mir kurz jemand nen tip geben wie ich meine
werte binär in eine TextDatei schreibe?

Delphi-Quellcode:
  // Datei schreiben
  AssignFile(f, MidiFile);
  Rewrite(f);

  for IntA := 1 to CurrentByte do
  // Was fehlt hier... vor "IntA, Bytes[IntA]"
  // Seek oder was auch immer..

  Closefile(f);
gruss

DeddyH 13. Apr 2011 14:51

AW: Wieder TextDatei diesmal binär
 
Was meinst Du denn mit binär? In der Form '00011111' oder Hexadezimal oder wie? Zeig doch mal ein Beispiel, wie die Datei aussehen soll.

Satty67 13. Apr 2011 14:56

AW: Wieder TextDatei diesmal binär
 
wenn es nur darum geht, ein Array of Byte zu speichern, wäre vieleicht Delphi-Referenz durchsuchenBlockWrite ganz brauchbar.

Bin aber nicht sicher, ob das mit einem TEXT-Handle geht.

ConnorMcLeod 13. Apr 2011 15:01

AW: Wieder TextDatei diesmal binär
 
TEXT-Datei BINÄR beschreiben? Bin das nur ich oder sieht da noch jemand einen Widerspruch?

Klaus01 13. Apr 2011 15:02

AW: Wieder TextDatei diesmal binär
 
Hallo Emil,

mit einem Textfile ist das eher schwieriger (unterstüzt auch kein seek).
Besser wäre es, wenn Du bei den Pascal Routinen bleiben willst, die Datei
als file of Byte oder file of Char zu deklarieren.

Grüße
Klaus

EWeiss 13. Apr 2011 15:08

AW: Wieder TextDatei diesmal binär
 
Zitat:

Zitat von DeddyH (Beitrag 1094863)
Was meinst Du denn mit binär? In der Form '00011111' oder Hexadezimal oder wie? Zeig doch mal ein Beispiel, wie die Datei aussehen soll.

Ich habe sie jetzt abgespeichert.
Zitat:

77841041000006010904877841141070001902558137161320 25588442248025547077841141070003101920014436127121 28360014412812712144128
12712144361271212836002554707784114107000348255470 77841141070003482554707784114107000348255470778411 41070003482554707784114
10700034825547077841141070003482554707784114107000 348255470
Aber das ist doch nicht binär?
Wo steht mein Header für das MIDI Format..

Habe es mit
Delphi-Quellcode:
Write(f, Bytes[IntA]);
abgespeichert

Soll ja anstelle für Writeln für binär stehen.

gruss

DeddyH 13. Apr 2011 15:11

AW: Wieder TextDatei diesmal binär
 
Mit TextFile wirst Du da nicht weit kommen. Ich weiß jetzt nicht, wie das MIDI-Format genau auszusehen hat, aber wenn, dann müsste es File of Byte oder sowas sein.

EWeiss 13. Apr 2011 15:14

AW: Wieder TextDatei diesmal binär
 
Zitat:

Zitat von DeddyH (Beitrag 1094869)
Mit TextFile wirst Du da nicht weit kommen. Ich weiß jetzt nicht, wie das MIDI-Format genau auszusehen hat, aber wenn, dann müsste es File of Byte oder sowas sein.

Ich erstelle den Header

Delphi-Quellcode:
      Bytes[CurrentByte] := ord('M');
      inc(CurrentByte);
      Bytes[CurrentByte] := ord('T');
      inc(CurrentByte);
      Bytes[CurrentByte] := ord('r');
      inc(CurrentByte);
      Bytes[CurrentByte] := ord('k');
      inc(CurrentByte);

      CurrentByte := CurrentByte + 4;
Und dieser müßte nachher auch in der Binären Datei Sichtbar sein.
Als MTRK...

Scheint nicht mit TextFile zu gehen.

grrrr...

PS:
Hab mal ein Bild angehängt binär kann ich hier nicht posten.

gruss

alfold 13. Apr 2011 15:24

AW: Wieder TextDatei diesmal binär
 
Was ist mit FileStream?
Ist Binär bleibt Binär und Du kanst den Record original auslesen und speichern!

Gruss alfold

EWeiss 13. Apr 2011 15:31

AW: Wieder TextDatei diesmal binär
 
Zitat:

Zitat von alfold (Beitrag 1094872)
Was ist mit FileStream?
Ist Binär bleibt Binär und Du kanst den Record original auslesen und speichern!

Gruss alfold

Werd es mal versuchen..

gruss

EWeiss 13. Apr 2011 15:48

AW: Wieder TextDatei diesmal binär
 
Delphi-Quellcode:
  // Datei schreiben
  f := TFileStream.Create(MidiFile, fmOpenReadWrite);

  for IntA := 1 to CurrentByte do
    f.Write(Bytes[IntA], CurrentByte);

  f.Free;
Allerdings hab ich hier ein verständnis problem

Meine Datei wird 25KB groß dürfte aber nur etwa max 1 KB sein.
Wenn ich in die Datei schaue fällt mir auf das die Datei abhängig von IntA jedesmal
komplett neu eingefügt wird.

Was ist da falsch bei mir ?
CurrentByte sind 164.

PS:
Geht damit auch nicht
So wie es aussieht kann ich damit nur Dateien editieren die Existieren.
Oder aber ich verwende ein falsches Flag.

gruss

jfheins 13. Apr 2011 15:59

AW: Wieder TextDatei diesmal binär
 
Delphi-Quellcode:
  // Datei schreiben
  f := TFileStream.Create(MidiFile, fmOpenReadWrite); // Datei wird geöffnet, neue Inhalte werden hinten angehängt

  for IntA := 1 to CurrentByte do
    f.Write(Bytes[IntA], CurrentByte); // Wenn in dem Array tatsächlich Bytes drin sind muss als 2. Parameter sizeof(Byte) stehen!

  f.Free;

EWeiss 13. Apr 2011 16:00

AW: Wieder TextDatei diesmal binär
 
Zitat:

Zitat von jfheins (Beitrag 1094876)
Delphi-Quellcode:
  // Datei schreiben
  f := TFileStream.Create(MidiFile, fmOpenReadWrite); // Datei wird geöffnet, neue Inhalte werden hinten angehängt

  for IntA := 1 to CurrentByte do
    f.Write(Bytes[IntA], CurrentByte); // Wenn in dem Array tatsächlich Bytes drin sind muss als 2. Parameter sizeof(Byte) stehen!

  f.Free;

Danke!

Aber leider funktioniert es nicht kann nur vorhandene Dateien öffnen.

gruss

Namenloser 13. Apr 2011 16:02

AW: Wieder TextDatei diesmal binär
 
Geht auch einfacher:
Delphi-Quellcode:
  f := TFileStream.Create(MidiFile, fmOpenReadWrite);
  f.Write(Bytes[1], CurrentByte{*SizeOf(Byte)});
  f.Free;
Zitat:

Aber leider funktioniert es nicht kann nur vorhandene Dateien öffnen.
Dann musst du fmCreate angeben statt fmReadWrite.

Klaus01 13. Apr 2011 16:03

AW: Wieder TextDatei diesmal binär
 
.. versuche mal als FileMode fmCreate zum Erstellen einer neuen Datei.

Grüße
Klaus

shmia 13. Apr 2011 16:14

AW: Wieder TextDatei diesmal binär
 
1.) Bei einem FileStream sollte man ReadBuffer und WriteBuffer anstelle von Read und Write verwerden.
2.) Datenstrukturen schreibt man nicht Byte für Byte, sondern in einem Rutsch.
Delphi-Quellcode:
type
  TMidiHeader = record .... end;
var
midiheader : TMidiHeader;

f := TFileStream.Create(MidiFilename, fmCreate);
f.WriteBuffer(midiheader, sizeof(midiheader));
....
f.Free;

EWeiss 13. Apr 2011 16:23

AW: Wieder TextDatei diesmal binär
 
Zitat:

Zitat von shmia (Beitrag 1094881)
1.) Bei einem FileStream sollte man ReadBuffer und WriteBuffer anstelle von Read und Write verwerden.
2.) Datenstrukturen schreibt man nicht Byte für Byte, sondern in einem Rutsch.
Delphi-Quellcode:
type
  TMidiHeader = record .... end;
var
midiheader : TMidiHeader;

f := TFileStream.Create(MidiFilename, fmCreate);
f.WriteBuffer(midiheader, sizeof(midiheader));
....
f.Free;

Ich habe keinen MidiHeader als record deklariert das ist bei mir Hardgecoded.

NamenLozer ;)
Delphi-Quellcode:
  f := TFileStream.Create(MidiFile, fmCreate or fmOpenReadWrite);
  f.Write(Bytes[1], CurrentByte);
  f.Free;
Das wars funktioniert jetzt so wie es soll.
Na ja die Tonhöhe noch nicht aber das ist ein anderes problem.

gruss

Aphton 13. Apr 2011 16:56

AW: Wieder TextDatei diesmal binär
 
[OT]
Zitat:

Zitat von ConnorMcLeod (Beitrag 1094865)
TEXT-Datei BINÄR beschreiben? Bin das nur ich oder sieht da noch jemand einen Widerspruch?

*Facepalm

Was für ein übles Missverständniss. Ich halt das kaum noch aus, soetwas zu lesen...
Also deiner Meinung nach wird TEXT nicht binär gespeichert? Werden also die einzelnen Buchstaben auf die Magnetplatten draufgekritzelt? -.-

Was macht es für einen Unterschied, wie ich folgendes speichere:
'A' (Char) = 65 (Dezimal) = $41 (Hexadezimal) = 01000001 (Binär) = 101 (Oktal)

Das ist nur eine Darstellungsform. Letzendlich landet alles in Form von Einsen und Nullen auf der Platte!

Keep that in mind and stop making that very same mistake
[/OT]

ConnorMcLeod 14. Apr 2011 09:47

AW: Wieder TextDatei diesmal binär
 
Cool down...
Mir ging es darum, daß es für jeden der beiden Fälle spezifische Datentypen und Vorgehensweisen gibt.
Bei Deinem famosen Wissen wird Dir das ja nicht neu sein.
Wir programmieren in Delphi und sollten daher auch dessen Werkzeuge verwenden.
End of transmission.

Luckie 14. Apr 2011 09:54

AW: Wieder TextDatei diesmal binär
 
Zitat:

Zitat von Aphton (Beitrag 1094891)
Das ist nur eine Darstellungsform. Letzendlich landet alles in Form von Einsen und Nullen auf der Platte!

Und um das zu vervollständigen: Wie diese Einsen und Nullen dann interpretiert werden ist Sache der Software.

@EWeiss: dann definiere dir doch einen entsprechenden Record.

EWeiss 14. Apr 2011 10:17

AW: Wieder TextDatei diesmal binär
 
Zitat:

Zitat von Luckie (Beitrag 1095033)
Zitat:

Zitat von Aphton (Beitrag 1094891)
Das ist nur eine Darstellungsform. Letzendlich landet alles in Form von Einsen und Nullen auf der Platte!

Und um das zu vervollständigen: Wie diese Einsen und Nullen dann interpretiert werden ist Sache der Software.

@EWeiss: dann definiere dir doch einen entsprechenden Record.

Danke ..
Warum sollte ich da tun.
Es funktioniert doch so wie von NamenLozer gezeigt.

Zitat:

Wir programmieren in Delphi und sollten daher auch dessen Werkzeuge verwenden.
Warum soll ich in diesen Wahn verfallen?
Und nicht vergessen Win32 API ist kein Delphi Werkzeug also ab sofort verboten
in verbindung mit Delphi zu verwenden.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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