| Autor |
Beitrag |
noobie123
      
Beiträge: 29
|
Verfasst: So 26.10.08 14:26
hallo,
ich sitze schon 3 std. hier und finde nichts passendes, nicht nur in diesem forum, argh.
Ich möchte gerne etwas aus einer php seite auslesen lassen.
in der php seite steht dies:
Quelltext 1:
| <a style="text-decoration: none;" href="/grad/"><span id="grad_celsius">12</span> celsius</a> |
auf meiner Form habe ich ein Edit feld, in der jetzt nach einem button klick diese 12 grad stehen soll.
dies geht leider nicht:
Delphi-Quelltext 1:
| edit1.text:=wb.OleObject.document.forms.item(0).elements.item('grad_celsius').value; |
in der forensuche bin auch auf "Pos" und so weiter gekommen. ich möchte aber nicht die position ermitteln oder sonstiges sondern einen bestimmt deklarierten text in einer homepage einfach nur bei mir im edit kopieren.
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: So 26.10.08 14:31
Hi,
Du willst einen Teiltext aus einem String extrahieren. Das geht mit den Methoden COPY POS POSEX.
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
whitef
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: So 26.10.08 15:41
ich habs mal überflogen... weiss ja net ob das das passende ist...
das hatte ich ja auch shcon vorher mit meiner suche gefunden aber dachte nicht dass das was hilft....
Zuletzt bearbeitet von whitef am So 26.10.08 23:10, insgesamt 1-mal bearbeitet
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: So 26.10.08 15:50
Hi,
Könntest du demnächst ein paar Zeilen mehr schreiben, wenn etwas unklar ist? Ich muss jetzt nämlich um so mehr im Nebel fischen
Copy('Ich bin ein Text', 2, 9) liefert 'ch bin e' - liefert also einen Ausschnitt
Delphi-Quelltext 1: 2:
| S := 'Das ; startet den Text'; Copy(S, Pos(';', S), Length(S)); | liefert ' startet den Text'.
Delphi-Quelltext 1: 2:
| S := 'Das zweite ; startet den Text; hallo, welt'; Copy(S, PosEx(';', S, Pos(';', S) + 1), Length(S)); | liefert: ' hallo, welt'.
Diese Methoden sind für die allermeißten Textoperationen ausreichend  für 5x PosEx macht man natürlich dann irgendwann eine Schleife
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
whitef
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: So 26.10.08 16:51
also.... soweit ich weiss, braucht man diesen ansatz um objekte im eigenen browser auszuwählen etc.: "wb.OleObject"
dann müsste man doch nur noch dem obigen oleobject mitteilen was man kopiert haben möchte: <span id="grad_celsius">
das beides zusammen... mh sowas bräuchten wir...
Zuletzt bearbeitet von whitef am So 26.10.08 23:11, insgesamt 1-mal bearbeitet
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: So 26.10.08 20:21
Dann mach das doch
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| "<span id="grad_celsius">12</span>"
var StrStart: Integer; const StartText = '<span id="grad_celsius">'; FinText = '</span>'; StrStart := Pos(StartText, S) + Length(StartText); MyTemperature := StrToInt(Copy(S, StrStart, Length(S) - PosEx(FinText, S, StrStart) - 1)); |
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
SiegfriedXX
      
Beiträge: 26
|
Verfasst: Mo 27.10.08 16:27
Ich möcht nur noch mal klarstellen was die Frage war:
whitef möchte aus einer Internetseite (hier ist es eine .php adresse) den quellcode auslesen.
Innerhalb des Quellcodes benötigt er nun einen Wert und nur dieser ist auch von interesse.
In einem Delphi Programm soll nun also von klicken eines Buttons dieser bestimmte Wert in z.B. ein Editfeld kopiert werden.
was wir wissen ist das die bestimmte quellcodezeile den Zeichenwert: '<a style="text-decoration: none;" href="/grad/"><span id="grad_celsius"> 12</span> celsius</a>' enthält. Die Zahl 12 soll nun aus dem gestamten Quellcode gefiltert werden.
1. Wie läd man also einen Quellcode ein (bzw. nur einen Teil mit oleobjekt (kenne die funktion nu nicht so))
2. Wie filtert man aus dem Quellcode der in einem String steckt (oder arraystring) den Wert der gesucht ist
das sind die hier gestellten Fragen.
whitef hat schon einen Vorschlag mit oleobjekten gebracht..
Meine Lösung:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| unit Unit1;
interface
uses IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP; type IdHTTP1: TIdHTTP;
implementation
procedure TForm1.Button1Click(Sender: TObject); var httpcode:string; begin httpcode:=IdHTTP1.Get('http://www.google.de'); memo1.Text:=httpcode; end;
|
Das wäre zum Punkt 1 den Quelltext einlesen (Hier wurde einfach ein Memo gewählt in das der quelltext auch dargestellt werden kann). Bitte nicht vergessen den Indy-Clients Componente -> IdHTTP (idHTTP) hinzuzufügen. Im Reiter bei Delphi 7.0 Standart oben unter Indy-Clients zu finden.
Das Filtern müsste nu leichter fallen.. da fragt man einfach den string ab und filtert sich das nu raus.. Beispiele wurden hier ja schon gebracht geht auch auf verschiedenste art..
Hoffe konnte Helfen
|
|
noobie123 
      
Beiträge: 29
|
Verfasst: Di 28.10.08 20:52
ok habs endlich mal gepackt... hehe
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| sAngriff := Pos('id=counter1 typ="countdown"', Quelltext) + IntAngriffPlus; eAngriff := PosEx('</SPAN></TD></TR>', Quelltext, sAngriff); If (sAngriff > 0) And (eAngriff > 0) Then Begin AngriffA.Caption := Copy(Quelltext, sAngriff, eAngriff - sAngriff); End; |
bloss etwas irrietiert mich bei dem ganzen!
Testweise schick das programm immer n kumpel... und bei dem erscheinen da immer voll der kaudawelch quelltext..., aber ist denk ich mal nur ne defintionssache von Pos & PosEx
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Di 28.10.08 21:04
Hi,
Ganz schön kriegerischer Quelltext *g*
Pos und PosEx sollten auch auf seinem Rechner laufen  Was für ein Kaudawelsch bekommt er denn? Einen anderen Teil der Seitenquelltextes, oder.. ?
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
whitef
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: Di 28.10.08 23:08
lol... jo, zeig mal 
|
|
noobie123 
      
Beiträge: 29
|
Verfasst: Di 28.10.08 23:11
ja genau, etwas aus dem quelltext...
bei kommt zb das hier:
Angriff: 12
und bei ihm:
Angriff: META CONTENT<http> usw. halt
kleiner screenshot anbei 
Einloggen, um Attachments anzusehen!
|
|
SiegfriedXX
      
Beiträge: 26
|
Verfasst: Mi 29.10.08 18:01
also nicht überall funtkioniert posex
.. daher hier eine variante wie es auch anders funktioniert
Fortsetzung des ersten Teils (mit der Variable httpcode als Quellcode Angabe)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure TForm1.SpeedButton1Click(Sender: TObject); var filter1,filter2 :string; position1,position2 :integer; begin
filter1:=edit1.Text; filter2:=edit2.Text; position1 := Length(filter1); position1 := Pos(filter1, httpcode) + Length(filter1); repeat position2 := Pos(filter2, httpcode); until position2 >= position1;
if position1 <> Length(filter1) then edit4.Text:= copy(httpcode,position1,position2-position1) else edit4.text:='Kein Treffer!'; end; |
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mi 29.10.08 20:10
Hi,
Wenn du einen lang genuge Startmarkierung hast, nimm doch einfach Pos
und dann halt statt
Quelltext 1: 2:
| Pos('<span id="grad_celsius">', S) Pos('<a style="text-decoration: none;" href="/grad/"><span id="grad_celsius">', S) |
Eigentlich sollte das obere aber doch ausreichend sein  Meine Glaskugel sagt mir, dass ihr euch gesagt habt 'wir nehmen PosEx ab 200 oder so, dann ist das weniger Rechenaufwand'.
Wahrscheinlich kommt das nämlich nichtmehr vor. Dann gibt PosEx 0 zurück und ihr bekommt den Text von Anfang an.
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
SiegfriedXX
      
Beiträge: 26
|
Verfasst: Mi 29.10.08 21:51
das problem ist das posex einfach nicht akzeptiert wird bei allen versionen.. jedenfalls funktioniert es in meiner nicht ganz.. aber wo das problem? so wie oben funktionierts außerdem weiß man ja was man filtert..
edit:
es gibt übrigens mehrere möglichkeiten eine filterung durchzuführen.. das mit pos ist nur eine möglichkeit.. dahinter steckt auch mehr ist nur eine stupide funktion
oldschool ist hier immer das beste damit man genau weiß was man macht.. also das array/string mit schleifendurchläufe auf char basierende abfragen.. so wie es pos auch macht..
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Do 30.10.08 18:18
Aso, es geht um die Delphi-Version  Ja, PosEx war nicht von Anfang an dabei.
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
pflo
Hält's aus hier
Beiträge: 11
|
Verfasst: So 16.11.08 18:50
Hi,
hab n ähnliches problem un hab das jetzt ma so probiert.
das geht auch mit fast allen seiten aba bei youtube streickt IdHTTP.
da kommt die fehlameldung "HTTP/1.1 403 Forbidden."
kann mir jemand helfen??
gruß pflo
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: So 16.11.08 19:12
Vielleicht liegt's am UserAgent. Probiere mal:
IdHttp1.Request.UserAgent:='Mozilla/4.0'; (oder ähnliches)
|
|
pflo
Hält's aus hier
Beiträge: 11
|
Verfasst: So 16.11.08 19:15
|
|
DesperadoStrike
Hält's aus hier
Beiträge: 14
|
Verfasst: So 23.11.08 14:55
hallo, kannst du mir nichtmal deinen kompletten quellcode schicken? habe aktuell ein ähnliches problem und weiß nicht so recht weiter. quellcode auslesen usw funktioniert super aber die einzelnen werte rauszufiltern aus den <tr> bekomm ich einfach nicht auf die reihe. posex wird bei mir auch nicht so wirklich erkannt. wär sehr lieb wenn ich mir deinen source mal zu schulungszwecken ansehen dürfte.
mfg patrick
|
|
pflo
Hält's aus hier
Beiträge: 11
|
Verfasst: So 23.11.08 16:49
Hi DesperadoStrike
Bei mir geht das mit dem Posex auch nich, darum hab ich den quelltext in nen 2. string geschrieben, den ich dann imma abschneide.
Der Funktion gibst du den suchbegriff und den gesammt text. Die ausgabe der funktion is dann das ab dem suchbegriff bis zum ". der gesammttext wird abgeschnitten. ich hoffe ich hab mich nich zu verquer ausgedrückt, und ich denke die funktion is selbsterklärend genug.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function abschneiden(SubStr:string; var S:string):string; begin if pos(SubStr, S)=0 then begin abschneiden:=''; exit; end; S:=copy(S, pos(SubStr, S)+length(SubStr), length(S)); abschneiden:= copy(S, 0, pos('"', S)-1); end; |
|
|