Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stream wie Editor einlesen (https://www.delphipraxis.net/118817-stream-wie-editor-einlesen.html)

TheMiller 15. Aug 2008 14:06


Stream wie Editor einlesen
 
Hallo,

vorab: ich habe keine Ahnung, wie ich ansetzen muss, dass ich das realisieren kann, was ich möchte - hoffe auf eure Hilfe!

Ich würde gerne, dass mir Delphi den Text in ein Memo schreibt, den ich sehe, wenn ich eine x-beliebige Datei (zB jpeg oder mp3) mit dem Editor öffnen würde.

Ich habe angefangen, die Datei in einen TFileStream oder TMemoryStream einzulesen. Aber weiter bin ich nicht gekommen, weil mir das Lesen mit Buffer etc... Schwierigkeiten bereitet. Entweder AVs oder Compilerfehler.

Könnt ihr mir ein bissl damit helfen?

Danke im Voraus

Larsi 15. Aug 2008 14:07

Re: Stream wie Editor einlesen
 
Warum willst du das machen?

Neutral General 15. Aug 2008 14:11

Re: Stream wie Editor einlesen
 
Hi,

Wie versuchst du es denn?
Also was du auf jeden fall beachten musst, ist dass du alle #0en rausfiltern musst. Der Rest dürfte von alleine gehen.

Gruß
Neutral General

Deep-Sea 15. Aug 2008 14:21

Re: Stream wie Editor einlesen
 
Vlt. hilft dir TStringStream weiter?! :wink:

TheMiller 16. Aug 2008 00:28

Re: Stream wie Editor einlesen
 
Hallo,

habe bisher nur die Beiträge gelesen, da ich eben erst nach Hause gekommen bin. Wenn man ein Bild oder eine PDF im Editor öffnet, sieht man Hyroglyphen. DIese möchte ich auch in einem Memo anzeigen. Mehr eigentlich nicht.

Danke

Dax 16. Aug 2008 00:36

Re: Stream wie Editor einlesen
 
Memo.Lines.LoadFromFile...

TheMiller 16. Aug 2008 10:21

Re: Stream wie Editor einlesen
 
Hm...

Das habe ich mal probiert, aber da werden nur die ersten für Zeichen (Bytes ?) gelesen? Nämlich nur

Zitat:

ÿØÿà
Dies hatte ich schon öfter angezeigt bekommen, wenn ich mit Seek / Read etc. versucht habe, Blockweise den Kram auszulesen. Wieso liest er nicht alles aus?

Fussball-Robby 16. Aug 2008 10:36

Re: Stream wie Editor einlesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das liegt daran, dass in der Datei das Zeichen #0 vorkommt, welches in Delphi als Ende eines Strings angesehen wird. Dieses Zeichen musst du erst einmal im ganzen Stream löschen. Ich habe das auch schonmal gemacht, im Anhang mal mein Source dazu.

Edit: Achtung, bei Dateien > 1MB kann das Laden schonmal was länger dauern :cyclops:

TheMiller 16. Aug 2008 10:48

Re: Stream wie Editor einlesen
 
Boah... wie recht du hast...

Das muss ich mir mal genauer ansehen. Nur leider bin ich gleich zu einer Hochzeit... Ich denke, ich werde mich morgen wieder melden.

Vielen Dank...!

grenzgaenger 16. Aug 2008 11:37

Re: Stream wie Editor einlesen
 
wenn du solche sachen machen willst, musst du die datei byteweise einlesen und interpretieren. entweder als hex oder die nicht darstellbaren zeichen gegen ein anderes ersetzen.

PS: wegen des unicode zuges solltest besser 'n file of char verwenden, statt of byte...

TheMiller 17. Aug 2008 13:48

Re: Stream wie Editor einlesen
 
Zitat:

wenn du solche sachen machen willst, musst du die datei byteweise einlesen und interpretieren. entweder als hex oder die nicht darstellbaren zeichen gegen ein anderes ersetzen.

PS: wegen des unicode zuges solltest besser 'n file of char verwenden, statt of byte...
Sorry, aber ich habe davon keine Ahnung. Ich habe die Funktion aus der geposteten Source verwendet, die das "#0"-Zeichen ersetzt. Jetzt liest er den Kram komplett ein. Nur ist das dann Bitweise oder was habe ich dann? Ist das Text-Format?

Bitte erklärt ihr mir ein bisschen Theorie. Ich mache das einfach, um zu lernen. Mich hat es interessiert, was passiert, wenn ich eine Datei (zb MP3) im Texteditor öffne und was ich dann sehe!

Danke

Deep-Sea 18. Aug 2008 07:34

Re: Stream wie Editor einlesen
 
Zitat:

Zitat von DJ-SPM
Mich hat es interessiert, was passiert, wenn ich eine Datei (zb MP3) im Texteditor öffne und was ich dann sehe!

Was du dann siehst? Nichts, womit irgend jemand etwas anfangen könnte :-D Wenn dann musst du es schon - wie grenzgaenger gesagt hat - z.B. als Hexadezimal darstellen.

TheMiller 19. Aug 2008 17:29

Re: Stream wie Editor einlesen
 
Jetzt habe ich doch nochmal eine Frage...

Im Windows Editor sieht man doch auch Leerzeichen statt eines bescheuerten "Trennzeichens" wie ich es gemacht habe. Ich habe ja alle #0 durch &% ersetzt. Wieso kann der Editor die Datei richtig anzeigen, ohne etwas ersetzen zu müssen?

Danke

_frank_ 19. Aug 2008 18:17

Re: Stream wie Editor einlesen
 
du kannst doch auch durch leerzeichen ersetzen...mehr macht der windows-editor vermutlich auch nicht, aber in dem Moment, wo du eine solche ersetzung machst und nicht reproduzieren kannst, welches zeichen ursprünglich da war, kannst du sie nicht mehr "editieren". es gibt nicht ohne grund Hexeditoren...auch diese haben eine Textansicht, ebenfalls mit ersetzten steuerzeichen.

vielleicht mal kurz als Erklärung...steuerzeichen sind zeichen, die nicht im normalen Texteditor darstellbar sind, im ansi-code sind diese <$20. bestimmte steuerzeichen (#8,#13,#10) werden entsprechend interpretiert. z.b. ein zeilenumbruch besteht unter windows aus #13#10. in einer Binärdatei hat diese zeichenfolge nicht diese Funktion.somit ist eine normale textanzeige zum bearbeiten von Binärdateien ungeeignet (nur unterstützend zur besseren Lesbarkeit).

was willst du denn sehen? ohne wissen, wie die Datei aufgebaut ist, wirst du mit der textanzeige weniger anfangen können, als mit der Hex-Darstellung.

HTH Frank

grenzgaenger 19. Aug 2008 20:42

Re: Stream wie Editor einlesen
 
das ist leider nur der halbe teil. DJ-SPM möcht nämlich die daten ändern und auch wieder zurückspeichern ... :-)

ps: da fällt mein, da liegt doch der HxD in der freeware section... 'n prima Hexeditor :-) kannst mal probieren... :-)


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