Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateien binär beschreiben? (https://www.delphipraxis.net/108601-dateien-binaer-beschreiben.html)

LDericher 16. Feb 2008 10:24


Dateien binär beschreiben?
 
Hi,

Ich stehe vor folgendem Problem:

Ich möchte meinen "eigenen" Datenkompressionsalgorithmus nach der Idee von Huffman schreiben und muss dafür allerdings auch Dateien binär(oder auch hexadezimal... oder wie auch immer) bearbeiten können. Das auslesen ist weniger das Problem, da kann man ja per TFileStream ein Byte auslesen und in ein beliebiges Zahlensystem umwandeln...

Das Problem ist mehr das schreiben:

Wie kann man das tun? Also dass nach dem Schreiben in der Datei nicht Chars, sondern die Bits/Bytes gesetzt werden?
Wenn ich mir hier allerdings zu viele Sorgen machen sollte, also es unproblematisch sein sollte, jede beliebige Datei, sei es Bild, EXE oder TXT, textbasiert zu bearbeiten, bitte schreibt es hier.

Ich sag' schonmal im Voraus DANKE und hoffe demnach auf eine Antwort.

Superwinger

BUG 16. Feb 2008 10:34

Re: Dateien binär beschreiben?
 
Du willst die einzelnen Bytes in Zeichenketten umwandeln und dann erst komprimieren?

Warum :gruebel:
Das Umwandel bläst du Datei doch nur unnötig auf.

Das Resultat der Huffman-Komprimierung ist schon binär.

MfG,
Bug

PS: Wenn du Anregung brauchst: Schau dir mal das an!

LDericher 16. Feb 2008 10:42

Re: Dateien binär beschreiben?
 
Schön, dass es da etwas vorgefertigtes gibt :D

Aber ich wollte meinen Huffman KOMPLETT selbst schreiben, das ist mein Anliegen ;)

marabu 16. Feb 2008 10:55

Re: Dateien binär beschreiben?
 
Hallo,

dem FileStream ist deine Interpretation des IO-Buffers egal, für ihn sind es eine Folge von Bytes, nie Chars oder Integers. Die statistische Kodierung nach Huffman geht zwar auf die Bit-Ebene herunter, aber schreiben und lesen wirst du Bytes.

Grüße vom marabu

bitsetter 16. Feb 2008 11:03

Re: Dateien binär beschreiben?
 
Im Prinzip kannst du auch einen Record also Datenstrukturen, Arrays oder ähnliches mit einem TFileStream lesen und schreiben.
Delphi-Quellcode:
Type
  TMyData = packed record
    Int: integer;
    B: Byte;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  FileStream: TFileStream;
  //MyData: Byte;
  //MyData: array[0..20] of byte;
  MyData: TMyData;
  Pfad: AnsiString;
begin
  Pfad := 'D:\...';
  ZeroMemory(@MyData, SizeOf(MyData));
  if FileExists(Pfad) then
  begin
    FileStream := TFileStream.Create(Pfad, fmOpenReadWrite);
    try
      FileStream.Read(MyData, SizeOf(MyData));//Daten lesen

      MyData.Int := ...;//Daten ändern
      MyData.B := ...;

      FileStream.Position := 0;
      if FileStream.Write(MyData, SizeOf(MyData)) = SizeOf(MyData) then //Daten schreiben
        Showmessage('fertig');
    finally
      FileStream.Free;
    end;
  end;
end;

LDericher 16. Feb 2008 12:36

Re: Dateien binär beschreiben?
 
Bin ziemlich sicher, einen Weg gefunden zu haben :)

Danke :)

Gruß JMM


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