Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 16.12.04 19:02 
Hallo!
Ich habe folgenden Code geschrieben, die eine binäre Datei liest, NIL in Leerzeichen konvertiert und danach ein ein RichEdit schreibt. Danach stimmt aber die RichEdit1.Length nicht mit der Dateigrösse überein - RichEdit1.Length ist immer grösser! (??) Kann mir bitte jemand sagen, warum? Es klappt auch nicht, wenn ich Buf einen kleineren Wert zuweise!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TForm1.ReadBinFile(const FileName: String);
var
  SourceFile: File;
  binRead, I: Integer;
  Buf: array [0..4096] of Byte;
  S: String;
begin
 AssignFile(SourceFile, FileName);
 Filemode:=FmOpenRead;
 Reset(SourceFile,1);

 repeat
  BlockRead(SourceFile, Buf, Sizeof(Buf), binRead);
  SetLength(S, Length(Buf));
  for I := 1 to Length(Buf) do
  begin
   if Char(Buf[I]) = #0 then S[I] := ' '
   else                      S[I] := Char(Buf[I]);
  end;

  RichEdit1.Text := RichEdit1.Text+S;
 until (binRead = 0);

 CloseFile(SourceFile);

 Caption := IntToStr(Length(RichEdit1.Text))+' <-> '+
  IntToStr(FileSizeByName('d:\delphi6\projects\list.exe'));
end;


//Edit: oder gibt's eine Komponente, die binäre Daten darstellen kann?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 16.12.04 19:10 
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Do 16.12.04 19:10 
Binärdaten in einem Richedit :shock: ?

Also zu groß kann ich mir beim besten Willen nicht vorstellen; zu klein wär wahrscheinlicher, wegen den Escapesequenzen...

AXMD
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 16.12.04 19:40 
Danke für die raschen Antworten, aber ich möchte keine HEX-Werte, sondern die Bytes (also den Inhalt) der Datei darstellen.

AXMD hat folgendes geschrieben:
Binärdaten in einem Richedit :shock: ?

Das soll ein "Datei-List"-Programm werden, Memo oder RichEdit ist erstmal egal - eben einfach irgendwas, was Zeichen anzeigen kann, bei Binärdateien muss man aber erstmal das NIL wegbekommen!

Weiss jemand, wie's gehen könnte?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Do 16.12.04 19:47 
galagher hat folgendes geschrieben:
Danke für die raschen Antworten, aber ich möchte keine HEX-Werte, sondern die Bytes (also den Inhalt) der Datei darstellen.


Eben das bekommst du wegen den Escapeasequenzen nicht hin - manche Zeiche kann ein Richedit nicht darstellen

AXMD
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 16.12.04 20:57 
Hier habe ich etwas gefunden, das zwar ähnlich ist, aber inakzeptabel langsam. Immer noch nicht das , was ich suche!
www.swissdelphicente.../showcode.php?id=944
Man müsste die Adressenanzeige weglassen und nur den Dateiinhalt darstellen. Aber selbst wenn mir das gelingt :? bleibt der Code langsam...

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 17.12.04 01:50 
Mein Code macht doch nichts anderes und da hast du gesagt, dass willst du nicht. Also was denn nun? :roll:
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 17.12.04 16:47 
Luckie hat folgendes geschrieben:
Mein Code macht doch nichts anderes und da hast du gesagt, dass willst du nicht. Also was denn nun? :roll:

Dein Code ist schnell, aber er gibt HEX-Werte aus, keine "echten" Bytes, der andere Code ist wie ein HEX-Editor, aber langsam. Einen Dateiinhalt anzeigen - Hat denn noch nie jemand sowas gemacht?

Und noch etwas fällt mir auf: Bei meinem oben geposteten Code wird die Ausgabe kürzer als die Länge der Datei, obwohl RichEdit1.Text > Dateilänge! Keine Ahnung, wieso...
Ich möchte doch nur Daten mit BlockRead lesen, und sie anstatt in eine Datei zu schreiben, am Bildschirm ausgeben. Ich kann natürlich Byte für Byte lesen - das klappt immer - ist aber extrem langsam. Wem fällt etwas ein? DANKE!!!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Grendel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 443

Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
BeitragVerfasst: Fr 17.12.04 16:57 
Die Antwort wurde doch schon gegeben.
AXMD hat folgendes geschrieben:
Eben das bekommst du wegen den Escapeasequenzen nicht hin - manche Zeiche kann ein Richedit nicht darstellen

Also vergiss es oder formatier die Zeichen, die das Richedit nicht darstellen kann, um.

Bis neulich ...
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 17.12.04 17:17 
Grendel hat folgendes geschrieben:
Also vergiss es oder formatier die Zeichen, die das Richedit nicht darstellen kann, um.

Welche ausser #0 und evtl. #9 und #26 sind das?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 17.12.04 17:46 
Ich schreibe nun (mit den umgewandelten) Bytes in eine temporäre Datei (geht blitzschnell!) und lese dann aus dieser in RichEdit1 ein. Zwar stimmen die Dateilänge und RichEdit1.Text immer noch nicht 100%-ig überein, aber den Grund kenne ich ja. Ansonsten klappt's so praktisch mit jeder Datei! :D
Dann mal ein kräftiges DANKE!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 17.12.04 18:19 
Achso. Du redest von der rechten Seite eines Hex-Editors. Les den Hex-Wert aus und wandele ihn mit char in ein lesbares Zeichen um. Die Werte 0 bis 33 sind nicht darstellbare Steuerzeichen.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 17.12.04 18:30 
Luckie hat folgendes geschrieben:
Achso. Du redest von der rechten Seite eines Hex-Editors.

Ja, das Byte als solches soll dargestellt werden! Es ist mir klar, dass man nun nicht einfach kopieren kann und nach dem Einfügen und Speichern hat man zB. wieder eine EXE, da ja die #0 fehlen! Aber danke - es stellen sich jetzt erste Erfolge ein!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 17.12.04 18:38 
Wie sieht, denn ein Byte aus? Die Darstellung ist immer eine interpretations Sache des Programmes. Ein Byte einer Wve Datei sieht genauso aus, wie ein Byte einer Textdatei. :roll:
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 17.12.04 18:55 
Luckie hat folgendes geschrieben:
Wie sieht, denn ein Byte aus? Die Darstellung ist immer eine interpretations Sache des Programmes. Ein Byte einer Wve Datei sieht genauso aus, wie ein Byte einer Textdatei. :roll:

Naja, kommt natürlich auf den verwendeten Font an. Je nachdem ändert sich die Darstellung einzelner Zeichen. Jedenfalls sollte der Font JEDES Zeichen darstellen und nicht einfach Leerzeichen oder diese "Kästchen" verwenden.

Ein Byte einer Textdatei, sagen wie, "X", sieht natürlich so aus wie das Byte "X" in einer wve-Datei. X bleibt X...

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 17.12.04 19:16 
Es ist auch unabhängig von der schriftart, die du benutzt. Ein Byte ist eine Folgen von nullen und einsen im Speicher. Ein Byte sieht nicht aus ein Byte IST. Man kann es darstellen, entweder in der dualen Schreibweise oder in der hexadezimalen oder in der dezimalen. Die Interpretation ist wieder was anderes. Ein Bildbearbeitungsprogramm wird ein Byte als Farbwert interpretieren, ein Programm zum Abspielen von wave-Dateien als Frequenz und ein Texteditor wird das korrespondierende Zeichen aus der ASCII Tabelle anzeigen.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 17.12.04 19:59 
Luckie hat folgendes geschrieben:
Ein Byte sieht nicht aus ein Byte IST.

Ok. Stimmt! Aber du weisst schon, was ich meine... :roll: Dateiinhalt sehen - egal welche Datei. Dazu brauche ich eine Kompo, die Dateiinhalte darstellen kann. Memo oder RichEdit oder auch Canvas.TextOut etc.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!