Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Filestream als string->Pfadangabe (https://www.delphipraxis.net/199216-filestream-als-string-pfadangabe.html)

davtix 6. Jan 2019 23:18

Filestream als string->Pfadangabe
 
Hi,


ich hab eine verschlüsselte Datei in einem Stream.
Diese möchte ich gerne mit der Indy Komponente htmlparser nach Suchwörtern durchsuchen lassen.
Dieser parser verlangt ein Dateipfad ... :/

Damit ich die entschlüsselte Datei nicht abspeichern muss und wieder laden zum durchsuchen, dacht ich es gibt ne Möglichkeit dem Parser gleich den Stream reinzujagen :)

davtix 7. Jan 2019 01:35

AW: Filestream als string->Pfadangabe
 
hab ma n bissel in der JvHtmlParser mit Erfolg darin rum gebastelt ^^.
Kopiert und dem Projekt hinzu gefügt.

Code:
 
  private
 
   FFileName: TFileName;
   FFileNameFS: TFileStream;    //hinzu
Code:
  published
    property FileName: TFileName read FFileName write SetFileName;
    property FileNameFS: TFileStream read FFileNameFs write FFileNameFs;                //hizu
write FFileNameFs <<< ist hundert pro falsch ^^ ich brauch die nur zum lesen.

Code:
procedure TJvHTMLParser.SetFileName(Value: TFileName);
begin


  if FFileName <> Value then
  begin
    FFileName := Value;
    if not (csDesigning in ComponentState) then
      AnalyseFile;
  end;


  if FFilenameFS <> nil then  //<<< hinzu
  begin



  end;
end;
Code:
// (rom) reimplemented with a TStringList

procedure TJvHTMLParser.AnalyseFile;
var
  List: TStringList;
begin
  List := TStringList.Create;
  try


    if FileExists(FileName) then
    begin
      List.LoadFromFile(FileName);
      AnalyseString(List.Text);
    end;

    if assigned( FileNameFS ) then        //besser noch ändern <<<
    begin
      list.LoadFromStream( FileNameFS );

      AnalyseString(List.Text);
    end;


  finally
    List.Free;
  end;

end;
Das hab ich mal zum testen so getippselt.
Es Funktioniert. bis jetzt ohne Fehler. bei Einwand bitte melden ;)

jaenicke 7. Jan 2019 03:02

AW: Filestream als string->Pfadangabe
 
Wozu änderst du denn da die Komponente? AnalyseString ist doch nach außen verfügbar. Du kannst einfach eine TStringList extern erzeugen und das dann aufrufen.

davtix 7. Jan 2019 09:56

AW: Filestream als string->Pfadangabe
 
parser.strings <<< :/ ist mir gar nicht aufgefallen

hmm.. dann müsst ich die ganze datei erst in ne stringlist list packen und die ist gross. das dauert

-- na ich teste mal :)

Schokohase 7. Jan 2019 10:16

AW: Filestream als string->Pfadangabe
 
Zitat:

Zitat von davtix (Beitrag 1422765)
hmm.. dann müsst ich die ganze datei erst in ne stringlist list packen und die ist gross. das dauert

Ja, is klar. Du meinst den Streaminhalt in eine Stringlist laden dauert länger als den Streaminhalt in eine Stringlist laden.
Zitat:

Zitat von davtix (Beitrag 1422748)
Code:
// (rom) reimplemented with a TStringList

procedure TJvHTMLParser.AnalyseFile;
var
  List: TStringList;
begin
  List := TStringList.Create;
  try


    if FileExists(FileName) then
    begin
      List.LoadFromFile(FileName);
      AnalyseString(List.Text);
    end;

    if assigned( FileNameFS ) then        //besser noch ändern <<<
    begin
      list.LoadFromStream( FileNameFS ); // Was machen wir denn hier?

      AnalyseString(List.Text);
    end;


  finally
    List.Free;
  end;

end;


Delphi.Narium 7. Jan 2019 10:17

AW: Filestream als string->Pfadangabe
 
Parser.Strings ist doch vom Typ TStrings.

Damit sollte dann doch sowas möglich sein:
Delphi-Quellcode:
Parser.Strings.LoadFromStream(FileNameFS);

davtix 7. Jan 2019 12:13

AW: Filestream als string->Pfadangabe
 
@ schokohase ( list.LoadFromStream( FileNameFS ); // Was machen wir denn hier? )
:lol::lol::lol::lol:
ja, ich habe die beiden Dateien nicht im Kopf verbunden.


ich hab das mal zum testen mit der Originalen JvHtmlParser.pas gemacht


Code:
   FS1 := TfileStream.Create( extractfilepath ( application.ExeName) + '0.txt', fmCreate ); //fmOpenReadWrite
   memo2.Lines.LoadFromFile(  extractfilepath ( application.ExeName) + 'testdatei.txt' );


  if not ( assigned( tempSL )) then tempSL := Tstringlist.Create;


//  tempSL.AddStrings( memo2.Lines );   //   --> SL
  memo2.Lines.SaveToStream( FS1 );       // --> FS

             //kontrolle
//  memo6.Lines.AddStrings( tempSL );         //SL
    FS1.Position := 0;
  memo6.Lines.LoadFromStream( FS1 );
dann :
Code:
//   JvHtmlParser1.Parser := tempSL;     /////<< hier Fehler " ist kein integer


   FS1.Position := 0;     //?
   JvHtmlParser1.Parser.LoadFromStream( FS1 );     /////<< NIX
ich hab ne html seite gespeichert und mal von <title> bis </title> als suche geschrieben

analyse button
Code:
JvHtmlParser1.ClearConditions;

  JvHtmlParser1.AddCondition( 'title' , '<title>' , '</title>' , 3);

  JvHtmlParser1.AnalyseFile;
3 = die ganze zeile ausspucken
Code:
procedure TJvHTMLParser.AddCondition(const Keyword: string;
  const StartTag: string; const EndTag: string; TextSelection: Integer);
im parser
Code:
  memo1.Lines.Add( '--------' );
  memo1.Lines.Add( '-' + key + '-' + results );
Wenn ich die Stringlist nehme sagt da Fehler " ist kein integer;
Wenn ich den fileStream nehme passiert nix.

jaenicke 7. Jan 2019 12:20

AW: Filestream als string->Pfadangabe
 
Packe das Testprojekt doch einfach in ein Zip-Archiv und hänge es hier an. Denn in dem geposteten Quelltext lässt sich erst einmal nicht viel sehen.

Delphi.Narium 7. Jan 2019 12:38

AW: Filestream als string->Pfadangabe
 
Delphi-Quellcode:
JvHtmlParser1.Parser.Clear;
JvHtmlParser1.Parser.AddStrings(tempSL);

// oder

JvHtmlParser1.Parser.Text := tempSL.Text

// oder

JvHtmlParser1.Parser.Assign(tempSL);
Memo.Lines ist vom Typ TStrings. Dort benutzt Du AddStrings, um TempSL da hineinzubekommen.

Parser ist ebenfalls vom Typ TStrings. Ob dort wohl die gleichen Schritte zum Erfolg führen, wie beim Memo?

Achso: http://wiki.delphi-jedi.org/wiki/JVC...LParser.Parser

Da steht wohl eher drinne, was der Parser machen soll und nicht das, was geparst werden soll (oder verstehe ich die Doku da falsch?)

Und dann gibt es in der Doku noch dashier: http://wiki.delphi-jedi.org/wiki/JVC....AnalyseString

Vermutlich sollte dann sowas funktionieren:
Delphi-Quellcode:
AnalyseString(tempSL.Text);
(Achso, das hattest Du in Deiner Erweitung ja schon so implementiert ;-))

Kommt dann am Ende sowas dabei raus?
Delphi-Quellcode:
  // FS1 irgendwie befüllen, übernehmen ...
  FS1.Position := 0;
  tempSL.LoadFromStream(FS1);
  JvHtmlParser1.AnalyseString(tempSL.Text);

davtix 7. Jan 2019 14:30

AW: Filestream als string->Pfadangabe
 
Ich bin gerade verrückt geworden ^^

Hab das ganze Project mal schön sauber wiederholt ( neu geschrieben).

diesmal hat es mit dem Filestream nicht geklappt und ich hab keine Ahnung warum.
(im Parser selbst war KEINE Datei angegeben)
... davon mal abgesehen-> Filestream erstellt ja ne Datei mit dem Inhalt. Also nicht brauchbar für mich.


Hab gerade alles gepackt und wollte hier hochladen. Dann les ich den Post von Delphi.Narium

Tja Funzttt :shock:

Code:
JvHtmlParser1.Parser.AddStrings(tempSL);
und zum ausführen
Code:
JvHtmlParser1.AnalyseString(tempSL.Text);
String --> text -> aus der ganzen StringListe ... dachte immmer das ist begrenzt auf 256 zeichen.
mit String dachte ich nur an eine Zeile ...


@Delphi.Narium -> AnalyseString(List.Text); jetzt seh ich das :O


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