![]() |
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 :) |
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:
write FFileNameFs <<< ist hundert pro falsch ^^ ich brauch die nur zum lesen.
published
property FileName: TFileName read FFileName write SetFileName; property FileNameFS: TFileStream read FFileNameFs write FFileNameFs; //hizu
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:
Das hab ich mal zum testen so getippselt.
// (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; Es Funktioniert. bis jetzt ohne Fehler. bei Einwand bitte melden ;) |
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.
|
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 :) |
AW: Filestream als string->Pfadangabe
Zitat:
Zitat:
|
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);
|
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:
dann :
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 );
Code:
ich hab ne html seite gespeichert und mal von <title> bis </title> als suche geschrieben
// JvHtmlParser1.Parser := tempSL; /////<< hier Fehler " ist kein integer
FS1.Position := 0; //? JvHtmlParser1.Parser.LoadFromStream( FS1 ); /////<< NIX analyse button
Code:
3 = die ganze zeile ausspucken
JvHtmlParser1.ClearConditions;
JvHtmlParser1.AddCondition( 'title' , '<title>' , '</title>' , 3); JvHtmlParser1.AnalyseFile;
Code:
im parser
procedure TJvHTMLParser.AddCondition(const Keyword: string;
const StartTag: string; const EndTag: string; TextSelection: Integer);
Code:
Wenn ich die Stringlist nehme sagt da Fehler " ist kein integer;
memo1.Lines.Add( '--------' );
memo1.Lines.Add( '-' + key + '-' + results ); Wenn ich den fileStream nehme passiert nix. |
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.
|
AW: Filestream als string->Pfadangabe
Delphi-Quellcode:
Memo.Lines ist vom Typ TStrings. Dort benutzt Du AddStrings, um TempSL da hineinzubekommen.
JvHtmlParser1.Parser.Clear;
JvHtmlParser1.Parser.AddStrings(tempSL); // oder JvHtmlParser1.Parser.Text := tempSL.Text // oder JvHtmlParser1.Parser.Assign(tempSL); Parser ist ebenfalls vom Typ TStrings. Ob dort wohl die gleichen Schritte zum Erfolg führen, wie beim Memo? Achso: ![]() 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: ![]() Vermutlich sollte dann sowas funktionieren:
Delphi-Quellcode:
(Achso, das hattest Du in Deiner Erweitung ja schon so implementiert ;-))
AnalyseString(tempSL.Text);
Kommt dann am Ende sowas dabei raus?
Delphi-Quellcode:
// FS1 irgendwie befüllen, übernehmen ...
FS1.Position := 0; tempSL.LoadFromStream(FS1); JvHtmlParser1.AnalyseString(tempSL.Text); |
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:
und zum ausführen
JvHtmlParser1.Parser.AddStrings(tempSL);
Code:
String --> text -> aus der ganzen StringListe ... dachte immmer das ist begrenzt auf 256 zeichen.
JvHtmlParser1.AnalyseString(tempSL.Text);
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 21:44 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