![]() |
Einlesen einer r-Code Quelldatei
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
für mein kleines Suchprogramm (in Delphi) muss ich in allen Dateien eines Verzeichnisses und dessen Unterver- zeichnissen nach einer bestimmmten Zeichenkette suchen. Bei normalen Textdateien funktioniert dies einwandfrei. Jetzt muss ich aber .r-Dateien durchsuchen (compilierter Progressquelltext) und bekomme in meinem Memofeld nur noch wenige Zeichen bestehend aus schwarzen Kästchen, Strichen, Balken - also total unsinniges Zeug angezeigt. Öffnet man nun so eine Datei im Notepad, so ist der Inhalt der Datei richtig dargestellt (mehrere Zeilen Text), und der String kann mittels Suche auch gefunden werden. Zum Laden der Datei in meinem Programm habe ich bereits mehrere Verfahren ausprobiert: Readln(textdatei,String), FileStream, StringStream, direktes laden des Textes durch Memo1.Lines.LoadFromFile(....) usw. Auch versch. Komponenten habe ich eingesetzt: Memo, Richedit, SynEdit, TntMemo, AdvMemo von TmsSoftware. Alles leider ohne Erfolg. Einzig und allein die Datei als File of Byte zu deklarieren und dann jedes Byte einzeln einzulesen und mittels Chr()-Funktion umzusetzen funktioniert. Jedoch dauert der Einlesevorgang ziemlich lange. Es muss doch auch eine einfachere Möglichkeit geben, den Dateiinhalt mit all seinen (Steuer-)Zeichen einzulesen und nach der Zeichenkette zu durchsuchen. Als Beispiel habe ich mal so eine Datei angehängt, die auch nicht eingelesen werden kann. Ggfs. hat einer von Euch ja bereits so ein Problem behandelt oder kennengelernt. |
Re: Einlesen einer r-Code Quelldatei
ich weiß nicht ob Dir das weiterhelfen wird, aber
auf Linuxkisten gibts es ein Kommando names strings das extrahiert die lesbaren Zeichen aus x-beliebigen Dateien. Ansonsten könnte Dir das hier weiterhelfen ![]() Grüße Klaus |
Re: Einlesen einer r-Code Quelldatei
Herzlich willkommen in der Delphi-PRAXiS.
Da es sich bei deinen Dateien um Binärdateien handelt, du aber trotzdem die Literale absuchen möchtest, solltest du eine tabellengestützte Code-Konvertierung verwenden um alle uninteressanten Zeichen zu neutralisieren:
Delphi-Quellcode:
Mit inline assembler geht das noch effizienter.
type
TCodeTable = array [Byte] of Char; var ct: TCodeTable; procedure Translate(var s: String; ct: TCodeTable); var i: Integer; begin for i := 1 to Length(s) do s[i] := ct[Ord(s[i])]; end; procedure InitTable(var ct: TCodeTable); var i: Integer; begin FillChar(ct, SizeOf(ct), ' '); for i := 33 to 126 do ct[i] := Chr(i); end; Freundliche Grüße vom marabu |
Re: Einlesen einer r-Code Quelldatei
Hallo Klaus,
Hallo marabu, Ich hab jetzt das ganze direkt mit der tabellengestützten Code-Konvertierung ausprobiert und es hat direkt bei dem ersten Mal funktioniert. Vielen Dank an Euch. Gruss Pascal |
Re: Einlesen einer r-Code Quelldatei
Oder ohne Tabelle :roll:
Delphi-Quellcode:
Natürlich kann man es auch so machen, daß nur die benötigten Zeichen übrig bleiben ^^
procedure Translate(var s: String);
var i: Integer; begin for i := 1 to Length(s) do if s[i] in [#0..#31, #127..#255] then s[i] := ' '; end; z.B.
Delphi-Quellcode:
if not (s[i] in ['0'..'9', 'a'..'z', 'A'..'Z', '_']) then s[i] := ' ';
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 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