AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Binärdatei lesen und durchsuchen

Offene Frage von "Torphyr"
Ein Thema von Torphyr · begonnen am 13. Mai 2004 · letzter Beitrag vom 28. Mai 2004
 
Torphyr

Registriert seit: 7. Nov 2003
Ort: Filderstadt
8 Beiträge
 
#1

Binärdatei lesen und durchsuchen

  Alt 13. Mai 2004, 09:54
Hallo zusammen,
ich hätte ja nicht gedacht, daß ich mal einzelne Bits würde schubsen müssen, aber jetzt ist es wirklich soweit. Ich muss CGM-Dateien nach Text durchsuchen. Zur Erklärung: "CGM" steht für "Computer Grafics Metafile" und ist ein offener Standard zum Austausch von CAD-Daten. Beschrieben ist das ganze in einer ISO-Norm, die es aber glücklicherweise zum Download gibt.

Es gibt zwei Speicherformate für CGM, binär und ASCII. Die Textversion ist aber leider für mich nicht relevant, weil sich der Kunde aufgrund bereits vorhandener großer Datenbestände im Binärformat nicht auf ASCII-Codierung umstellen kann. Wie auch immer, das Binärformat ist so aufgebaut, daß jedes Grafikobjekt eine Elementklasse und eine Element-ID besitzt, über die sich die Art des Grafikelementes eindeutig bestimmen lässt. So ist beispielsweise Text immer mit der Klasse "4" und der ID "4" am Beginn der ersten 16 Bit des betreffenden Abschnittes zu identifizieren.

Ein Beispiel (aus der Norm zitiert):
Der Text "Hydrogen" an den Koordinaten x=0 und y=1
Code:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|    4     |       4       |   15   |   Header, Klasse 4 und ID 4, Länge der Parameterliste ist 15
|                  0                |   x=0
|                  1                |   y=1
|          8       |       'H'     |   Textlänge, String
|         'y'     |       'd'     |   String
|         'r'     |       'o'     |   String
|         'g'     |       'e'     |   String
|         'n'     |        0       |   String, auffüllende Null
Nun ist es mir zwar schon gelungen, eine Datei zu öffnen und *irgend etwas* zu lesen, aber von irgendeiner Kontrolle ist dieses Experiment noch weit entfernt:

Code:
procedure TForm1.BtnGoClick(Sender: TObject);
var
  Datei: file;
  NumRead: Integer;
  Buf: Integer;
begin
  if OpenDialog1.Execute then
  begin
    AssignFile(Datei, OpenDialog1.FileName);
    Reset(Datei, 1);
    Memo.Lines.Text := 'Dateigröße: ' + IntToStr(FileSize(Datei)) + ' Bytes';
      repeat
        BlockRead(Datei, Buf, 2, NumRead);
        if Buf = 4 then
        begin
          Memo.Lines.Text := Memo.Lines.Text + ' | ' + IntToStr(Buf);
        end;
      until (NumRead = 0);
    CloseFile(Datei);
  end;
end;
Wer kann hilfreiche Hinweise zum sinnvollen weiteren Vorgehen geben?

Besten Dank!
Torphyr
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:01 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