Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Einlesen einer r-Code Quelldatei (https://www.delphipraxis.net/66388-einlesen-einer-r-code-quelldatei.html)

pascalsg77 29. Mär 2006 06:46


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.

Klaus01 29. Mär 2006 07:17

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 http://www.delphipraxis.net/internal...ct.php?t=26329

Grüße
Klaus

marabu 29. Mär 2006 07:29

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:
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;
Mit inline assembler geht das noch effizienter.

Freundliche Grüße vom marabu

pascalsg77 29. Mär 2006 10:19

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

himitsu 29. Mär 2006 10:43

Re: Einlesen einer r-Code Quelldatei
 
Oder ohne Tabelle :roll:
Delphi-Quellcode:
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;
Natürlich kann man es auch so machen, daß nur die benötigten Zeichen übrig bleiben ^^

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