Probiers mal damit:
$sString = StringRegExpReplace($sHTML,"<[^>]*>","")
Probiers mal damit:
$sString = StringRegExpReplace($sHTML,"<[^>]*>","")
Wenn du anstatt InetGet bei IE _IEBodyReadText oder bei FF _FFReadText nimmst, dann sind die Tags weg UND die Entities sind auch gleich umgewandelt.
Sowas vielleicht:
; #FUNCTION# ====================================================================================================
; Description ...: _ConvertEntities
; Parameters ....: $sURL - IN - The Text to convert
; Return values .: Success - Converted string
; Author ........: Stephen Podhajecki {gehossafats at netmdc. com}
; Remarks .......: Replaces HTML escape sequences with character representation
; Based on information found here: http://www.theukwebdesigncompany.com/artic...-characters.php
; nbsp is changed to 32 instead of 160
; Related .......:
; ====================================================================================================
Func _ConvertEntities($sURL)
Local $sTemp = $sUrl
Local $aEntities[96][2]=[[""",34],["&",38],["<",60],[">",62],[" ",3],[" ",32] _
,["¡",161],["¢",162],["£",163],["¤",164],["¥",165],["¦",166] _
,["§",167],["¨",168],["©",169],["ª",170],["¬",172],["­",173] _
,["®",174],["¯",175],["°",176],["±",177],["²",178],["³",179] _
,["´",180],["µ",181],["¶",182],["·",183],["¸",184],["¹",185] _
,["º",186],["»",187],["¼",188],["½",189],["¾",190],["¿",191] _
,["À",192],["Á",193],["Ã",195],["Ä",196],["Å",197],["Æ",198] _
,["Ç",199],["È",200],["É",201],["Ê",202],["Ì",204],["Í",205] _
,["Î",206],["Ï",207],["Ð",208],["Ñ",209],["Ò",210],["Ó",211] _
,["Ô",212],["Õ",213],["Ö",214],["×",215],["Ø",216],["Ù",217] _
,["Ú",218],["Û",219],["Ü",220],["Ý",221],["Þ",222],["ß",223] _
,["à",224],["á",225],["â",226],["ã",227],["ä",228],["å",229] _
,["æ",230],["ç",231],["è",232],["é",233],["ê",234],["ë",235] _
,["ì",236],["í",237],["î",238],["ï",239],["ð",240],["ñ",241] _
,["ò",242],["ó",243],["ô",244],["õ",245],["ö",246],["÷",247] _
,["ø",248],["ù",249],["ú",250],["û",251],["ü",252],["þ",254]]
For $x = 0 to Ubound($aEntities)-1
$sTemp = StringReplace($sTemp,$aEntities[$x][0],Chr($aEntities[$x][1]),0,2)
Next
For $x = 32 to 255
$sTemp = StringReplace($sTemp,"&#"&$x&";",chr($x))
Next
Return $sTemp
EndFunc
[EDIT]
Korrigiert: In der Funktion war ein Fehler bei StringReplace (not case sensitive)
@L3viathan2142 :
Warum hast du dann zuerst den Vergleich auf Zahl gemacht (@HOUR=16 And @MIN=0 And @SEC=0) wenn du der Meinung bist die Makros geben keine "Zahlen" zurück
Stimmt vom "Typ" her sind es keine sehen halt so aus, da hatte ich mich falsch ausgedrückt
Außerdem ist in AutoIt eh alles Variant, die Hilfe meint dazu:
"In AutoIt there is only one datatype called a Variant. A variant can contain numeric or string data and decides how to use the data depending on the situation it is being used in."
Sicher ergeben die Makros Zahlen. Diese sind immer zweistellig, also 1 Sekunde = 01, wie es auch in der Hife steht.
Diese zusammengesetzt @HOUR & ":" & @MIN & ":" & @SEC ergeben dann eben einen String wie z.B.: 12:04:01
Für's RegEx Grundstudium kann ich, wie immer, die Seite Regenechsen empfehlen.
@L3viathan2142:
Nicht die Leute verwirren
Das funktioniert sehr wohl:
[autoit]While 1
Sleep(1000)
If @HOUR & ":" & @MIN & ":" & @SEC = "16:33:00" Then
MsgBox(0,"","hallo")
Exit
EndIf
WEnd
Das Problem war allerdings, das Blackdragon_860 die Uhrzeit nur einmal außerhalb der Schleife abgefragt hat.
Warum soll den die Makros keine führenden Nullen haben? consolewrite(@sec & @crlf) sagt da was anderes.
Nehmt doch die MaKros, wegen einer Funktion die ganze Date.au3 (134kB) zu inkludieren ist etwas übertrieben, oder?
Update der offiziellen Version auf V0.3.5.3 und der deutschen Online-Hilfe.
Letzte Änderungen siehe hier:
Changelog
Downloads und Links am Anfang des Themas.
Viel Spaß damit!
Grüße Stilgar
Es wird nichts ersetzt, sondern nur die Wörter in ' eingschlossen:
Also in aus einem Text wie, in diesem Fall:
ganme => "3d..."
soll das hier werden:
'ganme' => "3d..."
Dazu erstmal den Text suchen mit:
([\w]+)(.*?)=>(.*?)
und ersetzen mit:
'$1'$2=>$3
heißt nichts anderes als, suche:
([\w]+) = Alle "Wortzeichen" in beliebiger Anzahl, aber mindestens ein Zeichen
(.*?) = Alle Zeichen
=> = genau diese Zeichenfolge
(.*?) = Alle Zeichen
Alles was in Klammer ist, ist eine Gruppe. Diese Gruppen können in dem zu ersetzenden Sring wiederrum durch Platzhalter
ersetzt werden. Platzhalter sind $1 ... $9
Damit ergibt sich folgendes zum ersetzen:
'$1' = Das gefundene Wort wird in ' eingefügt und dann
$2=>$3 = der Rest
Das suchen nach => ist drin, damit der Text etwas eindeutiger indentifiziert werden kann.
Vielleicht mit einem Dateidialog?
$sDatei = FileOpenDialog ( "Dateiauswahl", @workingdir, "PHP (*.php)")
If @error Then Exit
$sPHP = FileRead($sDatei)
[/autoit] [autoit][/autoit] [autoit]$sPHP = StringRegExpReplace($sPHP,"([\w]+)(.*?)=>(.*?)","'$1'$2=>$3")
[/autoit] [autoit][/autoit] [autoit]$hFile = FileOpen($sDatei, 2)
FileWrite($hFile, $sPHP)
FileClose($hFile)
Mit FireBug hatte ich mich an der Seite auch gerade probiert.
Ungeschickter Weise läßt sich der "durchscrollende" Ticker nicht wirklich untersuchen da ständig per Script die Styles geändert werden und die gesuchte Datei /radiotext/RADIOTXT.TXT steht in keinem Bezug zu dem http_request, welcher aber im DOM-Inspector ganz einfach zu finden ist
Manchmal muß halt probieren
Und hier die nichtlesbare Version:
$sPHP = FileRead("deine php datei.php")
[/autoit] [autoit][/autoit] [autoit]$sPHP = StringRegExpReplace($sPHP,"([\w]+)(.*?)=>(.*?)","'$1'$2=>$3")
[/autoit] [autoit][/autoit] [autoit]$hFile = FileOpen("deine php datei.php", 2)
FileWrite($hFile, $sPHP)
FileClose($hFile)
Stilgar
Indem man sich den Quelltext anguckt
Dort ist dann zu finden, daß in dem "Ticker" die Funktionen moveIt() stopIt() usw. verwendet werden. Also diese suchen ...
Viele JavaScripts werden ja nicht eingebunden, also einfach mal anschauen was in:
http://www.einslive.de/codebase/script/2006/global.js
drinnsteht.
Dort gibts wieder einen Aufruf eines Script Names "ticker.js" , also das mal ansehen:
http://www.einslive.de//codebase/scri…odule/ticker.js
dort gibts nun die gesuchten Funktionen und sogar die Angabe der "Quelle":
var txtFile = '/radiotext/RADIOTXT.TXT';
daraus läßt sich nun schließen, daß der Ticker-Text dort steht:
http://www.einslive.de/radiotext/RADIOTXT.TXT
ist doch ganz logisch und einfach
Man hätte aber auch schnell mal in den DOM-Inspector schauen können um dort festzustellen, das es eine XML-Anfrage auf eben diese "RADIOTXT.TXT" gibt.
Die Chomsky Hierachie war vermutlich auf RegEx bezogen:
http://de.wikipedia.org/wiki/Chomsky-Hierarchie
also ne Chomsky-Grammatik vom Typ 3.
Weiter zu EinsLive:
Der Ticker wird durch das JavaScript dort:
http://www.einslive.de/codebase/script/2006/module/ticker.js
aktualisiert.
Nur. wie man an den Text rankommt weis ich auch noch nicht.
Reicht denn diese Playlist dort http://www.einslive.de/musik/playlists/ nicht?
[EDIT]
Habs, dort ist der aktuelle Titel:
http://www.einslive.de/radiotext/RADIOTXT.TXT
RegEx zu oben:
"<b>(.*?)</b>(.*?)<br>"
bedeutet:
(.*?) = suche alles und da in Klammer ist das eine "Gruppe". Diese Gruppen werden von StringRegExp als Suchergebnis in einem Array zurückgegeben.
->
<b>(.*?)</b> = suche alles zwischen den Tags <b> und </b> usw.
Da zweimal hier Klammern vorkommen, wird bekommt jede Gruppe eine neue "Zeile" im Array.
Man kann es noch anderst schreiben:
Damit bekommst du nur die Songtitel, keine Zeiten, keine Überschriften usw.:
#include <Array.au3>
#include <Inet.au3>
$sSource = _INetGetSource("http://wap.wdr.de/einslive/playlist.phtml")
[/autoit] [autoit][/autoit] [autoit]$aRegEx = StringRegExp($sSource,"<b>[\d]+:[\d]+:[\d]+</b>(.*?)<br>",3)
_ArrayDisplay($aRegEx)
und hiermit nur die Zeiten und Titel, keine Überschriften usw.:
#include <Array.au3>
#include <Inet.au3>
$sSource = _INetGetSource("http://wap.wdr.de/einslive/playlist.phtml")
[/autoit] [autoit][/autoit] [autoit]$aRegEx = StringRegExp($sSource,"<b>([\d]+:[\d]+:[\d]+)</b>(.*?)<br>",3)
_ArrayDisplay($aRegEx)
die Gruppe ([\d]+:[\d]+:[\d]+) bedeutet einfach:
[\d]+ = alle Zahlen mindestens einmal vorkommend
in dem Fall sucht die Gruppe also Sachen wie: 0:45:01
Ausführlicher erklärt gibts das dort:
http://www.regenechsen.de/phpwcms/index.php?regex
Viele Grüße
Stilgar
Oder so:
#include <Array.au3>
#include <Inet.au3>
$sSource = _INetGetSource("http://wap.wdr.de/einslive/playlist.phtml")
[/autoit] [autoit][/autoit] [autoit]$aRegEx = StringRegExp($sSource,"<b>(.*?)</b>(.*?)<br>",3)
_ArrayDisplay($aRegEx)
aber kommt aufs Gleiche raus
Ein winziges Update:
- Edit Mode: $ wird nun bei Doppelklick auf Variablen ebenfalls selektiert.
- Update aller Direktiven in Xinsert
http://jedit4autoit.thorsten-willert.de/
Viel Spaß damit!
Grüße Stilgar
Bitte, oder etwas verkürzt:
$RegEx = "^1([\|][\d\.:]*){4}[\|](.*?)[\|](.*?)$"
[/autoit] [autoit][/autoit] [autoit]For $i = 0 To Ubound($aZeile)-1
$aArr = StringRegExp($aZeile[$i],$RegEx,1)
If Not @error Then MsgBox(64,"Zeile " & $i,$aArr[1])
Next
wobei hier:
([\|][\d\.:]*){4}
der Ausdruck in der Klammer viermal wiederholt wird.
Ohje - na gut - aaalso das ganze ist eine Regular Expression (siehe auch Online Hilfe, oder besser dort:
http://www.regenechsen.de/phpwcms/index.php?regex_allg)
also einfach eine Art Suchmuster wie *.exe
^1[\|][\d\.]*[\|][\d\:]*[\|][\d\.]*[\|][\d]*[\|](.*?)[\|](.*?)$
^ = Zeilenanfang
1 = die Eins
[\|] = der senkrechte Strich
[\d\.]= alle Zahlen und Punkt
* = in beliebiger Menge
[\|][\d\:]*[\|][\d\.]*[\|][\d]*[\|] = siehe oben (und das fünf mal)
(.*?) = einfach Alles und da in Klammern ist es die erste "Gruppe"
[\|](.*?) = in dem Fall der Rest bis zum
$ = Zeilenende
Wobei in dem Fall von StringRegExp($aZeile[$i],$RegEx,1) bei dritten Parameter=1 ein Array an Treffern zurückgegeben wird. Treffer = Gruppe
Also stehen in $aArr[0] die Werte nach dem fünften | drin.
So z.B:
Dim $aZeile[7]
$aZeile[0] = "1|16.1.2009|21:14|21.1|20|17|7|0||0|1|||0|4|||"
$aZeile[1] = "1|2.10.2009|16:36|4|5|6|7|9|10||11|12|13|14|15|16||"
$aZeile[2] = "1|5.10.2009|13:25|4|5|6|7|9|10||11|12|13|14|15|16||"
$aZeile[3] = "2|11.12.200|12:01|13|14|15|6|17||119|20|21|22|23|24|25||"
$aZeile[4] = "2|15.1.2009|14:16|13|12|11|10|9||7|6|5|4|3|2|Test||"
$aZeile[5] = "3|15.2.200|00:13|23|6|7|6.0|2||0|||0|31|126|||"
$aZeile[6] = "1|2|3|4|5|6|7|9|10|11|12|13|14||15|16|17|18"
$RegEx = "^1[\|][\d\.]*[\|][\d\:]*[\|][\d\.]*[\|][\d]*[\|](.*?)[\|](.*?)$"
[/autoit] [autoit][/autoit] [autoit]For $i = 0 To Ubound($aZeile)-1
$aArr = StringRegExp($aZeile[$i],$RegEx,1)
If Not @error Then MsgBox(64,"Zeile " & $i,$aArr[0])
Next
die Werte kannst du vorher z.B. mit _FileReadToArray() aus der Datenbank lesen.
[EDIT]
Oder auch so, sieht vielleicht einfacher aus
Dim $aZeile[7]
$aZeile[0] = "1|16.1.2009|21:14|21.1|20|17|7|0||0|1|||0|4|||"
$aZeile[1] = "1|2.10.2009|16:36|4|5|6|7|9|10||11|12|13|14|15|16||"
$aZeile[2] = "1|5.10.2009|13:25|4|5|6|7|9|10||11|12|13|14|15|16||"
$aZeile[3] = "2|11.12.200|12:01|13|14|15|6|17||119|20|21|22|23|24|25||"
$aZeile[4] = "2|15.1.2009|14:16|13|12|11|10|9||7|6|5|4|3|2|Test||"
$aZeile[5] = "3|15.2.200|00:13|23|6|7|6.0|2||0|||0|31|126|||"
$aZeile[6] = "1|2|3|4|5|6|7|9|10|11|12|13|14||15|16|17|18"
For $i = 0 To Ubound($aZeile)-1
$aArr = StringSplit($aZeile[$i],"|")
If Not @error And $aArr[1] = "1" Then MsgBox(64,"Zeile " & $i,$aArr[6])
Next