Stringregexp - Satz/CodeZeile suchen

  • Guten Tag,

    ist es mir möglich aus einer .HTML (direkt im WEB) folgende Zeile zu lesen "Datensatz deaktiviert." bzw. "<b>Datensatz deaktiviert.</b>" ?
    Wenn ja, wie suche ich danach? Ich möchte eine If Abfrage dazu erstellen, also wenn die Zeile gefunden wird, dann x, wenn nicht dann y.

    Vielen Dank im Vorraus.

  • Ob du ein Script das einen Text durchsucht direkt auf eine Seite im Web laufen lassen kannst weiss ich leider nicht, ich würde dir empfehlen die Datei zeilenweise einzulesen. Ist eine Zeile eingelesen, prüfe mit

    [autoit]

    StringRegExp ( "test", "pattern" [, flag [, offset]] )

    [/autoit]

    , wenn es vorhanden ist mach ABC, sonst XYZ.

    #Edit: Dies wäre mein Lösungsvorschlag ^^

    Spoiler anzeigen
    [autoit]

    Local $hfile = FileOpen("test.txt", 0)
    While 1
    Local $sLine = FileReadLine($hfile)
    If StringRegExp ($sLine, "<b>Datensatz deaktiviert.</b>", 0) = 1 Then ;~> 1 = matched, 0 = no match
    MsgBox(0,"","Matched")
    Else
    MsgBox(0,"","No Match")
    EndIf
    WEnd

    [/autoit]

    Grüße Yaerox

    Grüne Hölle

  • Wenn der Textteil genauso heißt und sich nicht ändert braucht man dafür keinen regulären Ausdruck sondern es reicht StringInStr().
    Vorher das ganze als String in eine Variable einlesen per InetRead().

    Edit: Vergessen zu sagen: nur InetRead bringt keine Punkte - fehlt noch ein BinaryToString um die Ausgabe von InetRead korrekt in einen String zu wandeln.

    Einmal editiert, zuletzt von AspirinJunkie (26. November 2012 um 10:51)

  • Hab mit InetRead noch nie gearbeitet aber was mir aufgefallen ist:

    Zitat von Hilfe

    The URL parameter should be in the form "http://www.somesite.com/path/file.html" - just like an address you would type into your web browser.

    Deine GoogleAdresse dort ist zumindest bei mir nicht in dieser Form :P

    Mit einem anderen Bsp.: funktioniert es:

    Spoiler anzeigen
    [autoit]

    Local $sData = InetRead("http://de.wikipedia.org/wiki/AutoIt")
    Local $nBytesRead = @extended

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"",StringRegExp(BinaryToString($sData), "AutoIt"))

    [/autoit]

    Grüße Yaerox

    Grüne Hölle

    2 Mal editiert, zuletzt von Yaerox (26. November 2012 um 11:31)


  • Hi,

    also in dem Beispiel ist es ja so, dass er den Link selbst ausliest, also Sprich, den Text der zwischen den " steht. Er soll ja den Link öffnen und den HTML-Code durchsuchen, oder generell auf der Seite.

  • Genau das tut InetRead doch ...

    [autoit]

    Local $sData = InetRead("http://de.wikipedia.org/wiki/AutoIt")
    Local $nBytesRead = @extended

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite(BinaryToString($sData))

    [/autoit]


    Wenn du das so startest siehst du in der SciteConsole den HTML Code. Wenn du dieses Beispiel dann mit deinem GoogleLink machst siehst du nix, weil er diesen Link net auslesen kann...

    Falls ich total falsch liege bitte ich darum mich zu verbessern, aber grad würd ich echt sagen diese Google-Suchergebniss-Links funzen damit net :P

    Grüße Yaerox

    Grüne Hölle

  • Hi,

    gut, dass sieht gut aus, wie suche ich innerhalb der Console dann nach einem Satz bzw. Zeile?

    Edit: Nimmt er dann die aktuelle Seite oder einfach nur den Link? Das wäre nämlich ein Problem ich müsste die aktuelle Seite nehmen, nach der Suche verändert sich der Quellcode aber nicht der Link.
    Also hilft mir das sonst auch kein Stück. =(

    Einmal editiert, zuletzt von vism (26. November 2012 um 12:27)

  • Das mit der Console war lediglich ein Test um dir zu zeigen dass der Befehl auch wirklich den HTML-Code einer Seite ausliest. Du nimmst an der Stelle halt ganz normal den StringRegExp Befehl oder halt StringInStr wobei ich ersteres immer nutze ^^

    Grüße Yaerox

    Grüne Hölle

  • Das mit der Console war lediglich ein Test um dir zu zeigen dass der Befehl auch wirklich den HTML-Code einer Seite ausliest. Du nimmst an der Stelle halt ganz normal den StringRegExp Befehl oder halt StringInStr wobei ich ersteres immer nutze ^^


    Hi,

    Danke allerdings ist StringRegExp für mich ein Buch mit sieben Siegeln momentan, nach letzterem Regexp Muster, wird lediglich der Link gelesen, nicht aber die aktuelle Seite bzw. der Quellcode.

  • Falls ich total falsch liege bitte ich darum mich zu verbessern, aber grad würd ich echt sagen diese Google-Suchergebniss-Links funzen damit net

    Sehe ich genauso.
    Ich vermute den Grund darin dass Google standardmäßig Javascript verwendet was InetRead im Gegensatz zu einem Browser nicht noch auswertet.

    vism
    YaeroxXO hat schon gezeigt wie du den Quelltext ausliest, per BinaryToString umwandelst und auch wie du ihn in eine Variable speichern kannst.
    Jetzt musst du noch StringInStr nehmen und den Quelltextstring auf das Vorhandensein deines Suchbegriffes hin untersuchen.
    Einfach mal die Hilfe zu StringInStr ansehen - ist ganz gut beschrieben.
    Wenn du nicht weiterkommst zeig deinen bisherigen Versuch.

  • [autoit]

    Local $sData = InetRead("http://de.wikipedia.org/wiki/AutoIt")
    Local $nBytesRead = @extended

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite(BinaryToString($sData))
    MsgBox(0,"",StringRegExp(BinaryToString($sData), "<!DOCTYPE html>"))

    [/autoit]

    MsgBox gibt mir eine 1 zurück, sprich match.

    Bei mir sucht er den Code ab ... und in der Hilfe ist der StringRegExp Befehl ja erklärt.

    String zum durchsuchen, String nach dem gesucht werden soll, optionale Einstellungen.

    Grüße Yaerox

    Grüne Hölle