AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Filestream als string->Pfadangabe

Ein Thema von davtix · begonnen am 7. Jan 2019 · letzter Beitrag vom 7. Jan 2019
Antwort Antwort
davtix

Registriert seit: 29. Mai 2003
Ort: Berlin
87 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Filestream als string->Pfadangabe

  Alt 7. Jan 2019, 00:18
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
  Mit Zitat antworten Zitat
davtix

Registriert seit: 29. Mai 2003
Ort: Berlin
87 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Filestream als string->Pfadangabe

  Alt 7. Jan 2019, 02:35
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Filestream als string->Pfadangabe

  Alt 7. Jan 2019, 04:02
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
davtix

Registriert seit: 29. Mai 2003
Ort: Berlin
87 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Filestream als string->Pfadangabe

  Alt 7. Jan 2019, 10:56
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
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#5

AW: Filestream als string->Pfadangabe

  Alt 7. Jan 2019, 11:16
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.
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;
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#6

AW: Filestream als string->Pfadangabe

  Alt 7. Jan 2019, 11:17
Parser.Strings ist doch vom Typ TStrings.

Damit sollte dann doch sowas möglich sein: Parser.Strings.LoadFromStream(FileNameFS);
  Mit Zitat antworten Zitat
davtix

Registriert seit: 29. Mai 2003
Ort: Berlin
87 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Filestream als string->Pfadangabe

  Alt 7. Jan 2019, 13:13
@ schokohase ( list.LoadFromStream( FileNameFS ); // Was machen wir denn hier? )

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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Filestream als string->Pfadangabe

  Alt 7. Jan 2019, 13:20
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#9

AW: Filestream als string->Pfadangabe

  Alt 7. Jan 2019, 13:38
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: 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);
  Mit Zitat antworten Zitat
davtix

Registriert seit: 29. Mai 2003
Ort: Berlin
87 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Filestream als string->Pfadangabe

  Alt 7. Jan 2019, 15:30
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

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

Geändert von davtix ( 7. Jan 2019 um 15:53 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 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