![]() |
Wieder TextDatei diesmal binär
Kann mir kurz jemand nen tip geben wie ich meine
werte binär in eine TextDatei schreibe?
Delphi-Quellcode:
gruss
// 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); |
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.
|
AW: Wieder TextDatei diesmal binär
wenn es nur darum geht, ein Array of Byte zu speichern, wäre vieleicht
![]() Bin aber nicht sicher, ob das mit einem TEXT-Handle geht. |
AW: Wieder TextDatei diesmal binär
TEXT-Datei BINÄR beschreiben? Bin das nur ich oder sieht da noch jemand einen Widerspruch?
|
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 |
AW: Wieder TextDatei diesmal binär
Zitat:
Zitat:
Wo steht mein Header für das MIDI Format.. Habe es mit
Delphi-Quellcode:
abgespeichert
Write(f, Bytes[IntA]);
Soll ja anstelle für Writeln für binär stehen. gruss |
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.
|
AW: Wieder TextDatei diesmal binär
Zitat:
Delphi-Quellcode:
Und dieser müßte nachher auch in der Binären Datei Sichtbar sein.
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; Als MTRK... Scheint nicht mit TextFile zu gehen. grrrr... PS: Hab mal ein Bild angehängt binär kann ich hier nicht posten. gruss |
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 |
AW: Wieder TextDatei diesmal binär
Zitat:
gruss |
AW: Wieder TextDatei diesmal binär
Delphi-Quellcode:
Allerdings hab ich hier ein verständnis problem
// Datei schreiben
f := TFileStream.Create(MidiFile, fmOpenReadWrite); for IntA := 1 to CurrentByte do f.Write(Bytes[IntA], CurrentByte); f.Free; 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 |
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; |
AW: Wieder TextDatei diesmal binär
Zitat:
Aber leider funktioniert es nicht kann nur vorhandene Dateien öffnen. gruss |
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:
|
AW: Wieder TextDatei diesmal binär
.. versuche mal als FileMode fmCreate zum Erstellen einer neuen Datei.
Grüße Klaus |
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; |
AW: Wieder TextDatei diesmal binär
Zitat:
NamenLozer ;)
Delphi-Quellcode:
Das wars funktioniert jetzt so wie es soll.
f := TFileStream.Create(MidiFile, fmCreate or fmOpenReadWrite);
f.Write(Bytes[1], CurrentByte); f.Free; Na ja die Tonhöhe noch nicht aber das ist ein anderes problem. gruss |
AW: Wieder TextDatei diesmal binär
[OT]
Zitat:
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] |
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. |
AW: Wieder TextDatei diesmal binär
Zitat:
@EWeiss: dann definiere dir doch einen entsprechenden Record. |
AW: Wieder TextDatei diesmal binär
Zitat:
Warum sollte ich da tun. Es funktioniert doch so wie von NamenLozer gezeigt. Zitat:
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