Text aus Zwischenablage zeichenweise lesen

  • Hallo zusammen,

    bin ein Noob in Sachen Programmierung und habe mir deshalb AutoIt heruntergeladen um mich etwas darin einzuarbeiten.
    Möchte gern eine Seite komplett im Internet-Explorer markieren und in die Zwischenablage einfügen, dann z.B. eine Artikelnummer aus der Seite heraussuchen und diese in Notepad einfügen.
    Leider finde ich weder in der Boardsuche noch in der Hilfe etwas was mir weiterhilft.
    Weiss schon, dass ich nach dem String "Artikelnummer" suchen muss, aber dann finde ich ja nur diesen String, aber nicht die dahinter stehende Artikelnummer. Wie bekomme ich es hin, dass diese Artikelnummer zeichenweise oder die Zeile komplett ausgelesen wird, denn dann könnte ich mit StringTrim, -Left oder - Right arbeiten. Durch die Suche im IE (STRG+F) kann ich zu dem Suchbegriff "Artikelnummer" springen, das ist mir klar. Nur wie ich die Zeichen dahinter auslesen kann ist für mich rätselhaft. Lassen sich auf den Suchbegriff folgende Zeichen durch Wildcards ($,*) mit in die Suche aufnehmen oder wie könnte ich das Ganze umsetzen?
    :S

    Danke schon mal für Eure Hilfe.

  • Hallo,

    danke vielmals für die rasche Antwort.
    Leider komme ich nicht an die Quelle heran, weil sich die URL immer mit jeder session ändert.
    Daher schwebt mir vor, den Text ins Clipboard zu kopieren und dann nach dem String zu suchen.
    Zu RegExp:
    Habe die Benutzung vorhin beim Lesen der Hilfe nicht so ganz verstanden, könnte ich damit ein Muster (z.B. Artikelnummer: XXXXXXXXXXXXXXX) erstellen und danach suchen lassen?
    Steh im Moment etwas auf dem Schlauch.

  • Hi,
    peethebee

    Zitat

    bin ein Noob in Sachen Programmierung

    Zitat

    dann StringRegExp und du hast die Nummer

    in Köln würde man sagen "dau bis ene fiese Möpp" :D
    @gnArfL
    kopier einfach die 10 Zeilen aus dem Quelltext hierher, damit wir sehen um was es geht.
    ciao
    Andy

  • Sorry, hab ja noch keinen Quelltext.
    Hatte mir bisher nur Gedanken über das Konzept gemacht, da es nur einen Teil meines Skripts darstellt.
    Habt Ihr eventuell ein Beispiel?

    • Offizieller Beitrag

    Habt Ihr eventuell ein Beispiel?

    Bsp. gibt es viele, da du aber noch in den Anfängen steckst, wird dir ein RegExp-Bsp. vermutlich nicht allzuviel bringen, da die Lösung sich immer exakt an der konkreten Aufgabenstellung orientiert.
    Insofern ist es schon notwendig, zu sehen, wie der String aufgebaut ist und welche Daten du separieren möchtest.
    Für Bsp. schau mal in die Hilfe zu StringRegExp.

  • mit dem Quelltext meinte ich eigentlich den Text mit der Artikelnummer^^

  • Hallo,

    danke vielmals für die bisherigen Hilfen, Tipps und Anregungen.

    Besonders gut gefallen haben mir die Anregungen zu StringRegExp und der Teil des Quellcodes, obwohl ich den zugegebenermaßen nicht so ganz sondern nur teilweise verstehe.

    Die Seiten lassen sich unter Mobile.de abrufen, man muss sich aber als Händler einloggen können.

    a) handelt es sich um eine Artikelnummer bei mobile.de

    b) handelt es sich um den Namen und Vornamen des Fahrzeugverkäufers

    c) handelt es sich um eine Telefon- bzw. Telefaxnummer bei mobile.de

    Da
    sich die Daten je nach Session-ID ändern, könnte ich nur einen Codeteil, den ich manuell per STRG + A, STRG + C und dann STRG + V in
    meinen Texteditor eingefügt habe zur Verfügung stellen. Hier lassen sich die Daten ohne die HTML-Tags sehen.
    Ich weiss auch noch nicht so genau, ob ich die Suche auf diese Weise durchführe, da ich dann
    jedes Mal alle Daten aktualisieren muss, sobald ein anderer Link (anderes Fahrzeug) angeklickt wurde.

    Mir geht es nur darum, die o.g. Daten schnell aus der Seite zu extrahieren, um darüber eine
    Zusammenfassung machen zu können. Daher würde ich die Suche gern in der Zwischenablage durchführen, denn wenn bei jedem Anklicken eines anderen Links die Seitendaten aktualisiert und auf die Platte geschrieben werden müssen, dann dauert das wahrscheinlich sehr lange. Eine
    Temp-Datei in der nur die gewünschten Daten eingetragen werden (möglicherweise ein Array), ließe sich sehr viel schneller aktualisieren.

  • Hi,

    brauch doch noch ma etwas Nachhilfe.
    Möchte gerne mit StringRegExp nach dem Begriff "Tel.: " und der daran anschließenden Telefonnummer suchen, denn diese möchte ich extrahieren und in eine Tabelle eintragen lassen. Leider schnall ich die Benutzung des StringRegExp überhaupt nicht und bräuchte mal ein oder mehrere Beispiele, wie ich nach dem Suchbegriff und den daran anschließenden Ziffern/Zeichen suchen kann.
    Hänge mal als Beispiel einen Auszug meiner Textvorlage an, in welchem ich suchen möchte. Fühlt sich jemand berufen und hilft mir beim Erstellen der Suchabfrage?

    Beifahrerairbag, elektr. Schiebedach und Servolenkung, KontaktPrivat
    60486 Frankfurt am Main
    Deutschland
    Tel.: +49 (0)173 6957630
    Ausstattung Limousine
    Farbe: Schwarz
    Gebrauchtfahrzeug
    Benzin

    Danke sehr. :)

    • Offizieller Beitrag
    Spoiler anzeigen
    [autoit]

    $str = _
    'Beifahrerairbag, elektr. Schiebedach und Servolenkung, KontaktPrivat' & @CRLF & _
    '60486 Frankfurt am Main' & @CRLF & _
    'Deutschland' & @CRLF & _
    'Tel.: +49 (0)173 6957630' & @CRLF & _
    'Ausstattung Limousine' & @CRLF & _
    'Farbe: Schwarz' & @CRLF & _
    'Gebrauchtfahrzeug' & @CRLF & _
    'Benzin' & @CRLF

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

    $pattern = '(?:Tel.:\s*)(.*)(?:\r)'

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

    $ret = StringRegExp($str, $pattern, 1)
    If IsArray($ret) Then ConsoleWrite('Telefon: ' & $ret[0] & @CRLF)

    [/autoit]

    kurze Erklärung:
    $pattern = '(?:Tel.:\s*)(.*)(?:\r)'
    (?:Tel.:\s*)
    ?: = Inhalt dieser Klammern wird im Ergebnis nicht berücksichtigt
    Tel.: = Text nach dem gesucht wird
    \s* = Leerzeichen, keinmal od. beliebig oft

    (.*) = das gesuchte Ergebnis, jedes Zeichen beliebig oft

    (?:\r)
    ?: = Inhalt dieser Klammern wird im Ergebnis nicht berücksichtigt
    \r = (bis zum) CarriageReturn

  • Hallo Bugfix,

    danke für Deine rasche Antwort.
    Leider bekomm ich damit kein Ergebnis angezeigt. Ich dachte auch eher daran die Anzahl der Ziffern akribisch festzulegen, denn so kann ich gleich eine Unterscheidung nach Mobilfunk- und Festnetznr. durchführen um die Nummern dann in die entsprechenden Tabellenspalten einfügen zu können. Lassen sich die Nummern dann nach der Suche direkt in die Zwischenablage einfügen, oder muss ich da etwa noch etwas beachten?

    Gruß

    gnArfL

    • Offizieller Beitrag

    Ich habe deinen Text als Basis genommen. Wenn du das Skript ausführst, wird die selektierte Telefonnummer in die Console geschrieben.
    Wenn das nicht klappt, entspricht dein verwendeter Text nicht dem von dir gezeigten Muster.
    Übrigens kannst du Telefonnummern nicht anhand der Länge in Funk- oder Festnetznummern unterteilen. Da müsstest du schon die Vorwahl selektieren (Funk hat üblicherweise 015.., 016.., 017). Wobei da auch statt der führenden '0' stehen kann: '+49' oder '(0049)'. ;)

    Eines fällt mir noch ein: Es kann sein, dass in dem von dir gelesenen Text als Zeilenumbruch nur 'LineFeed' verwendet wird. Ersetze einfach mal das '\r' durch '\n' im RegExp-Pattern.

  • Hi,
    kannst du nicht den String suchen und dann diesen + die nächsten 10-20 Zeichen mitnehmen?

    und danach eben die 10-Stellige(?) Art.Nr. rausfiltern....

    Gruß
    Chrischn

    ... wasweisichdennschon...

    • Offizieller Beitrag

    Weil sich dieses "10-20" damit ausdrücken lässt, sind Reguläre Ausdrücke schon das richtige Konzept.
    BugFix? Wieso traust du dich nicht, eine Telefonnummer an ihrem Textteil zu matchen statt an den Grenzen?

    Aus dem Kopf würde ich so einen Versuch starten:
    Tel\.:\s*([\d+-\(\) ]*)

    Gute Nacht,
    Johannes

  • Ohh, vielen Dank für die reichlichen Anregungen, war zu müde und hab mich schlafen gelegt.

    BugFix
    Bugfix, habe eben erst in Deiner Signatur gesehen, dass Du ein fantastisches Tut über RegExps geschrieben hast. Dein Code funktioniert wahrscheinlich auch, nur habe ich beim zweimaligen Ausführen keine Ausgabe gehabt und erst nach einem weiteren Blick in den Quelltext habe ich gesehen, dass die Nummer in eine Console geschrieben wird. :)

    Chrischn
    Danke Chrischn für den Tipp mit der 10-20 stelligen Nummer. Die Telefonnummern folgen nach der Landesvorwahl immer einem eindeutigen Schema. Die Vorwahl (ob Mobil oder Festnetz) ist momentan immer max. 5-stellig, daran schließt eine 7-stellige Nummer an. Ich dachte daher dass ich dieses Muster suchen lassen kann.

    peethebee
    Weil sich die Patterns für mich sehr kryptisch lesen, muss ich mich gleich erst mal etwas näher damit befassen. ?(

    Eine Frage noch: Nach dem Laden des Quelltexts lese ich ihn ja in die Zwischenablage ein. Nach dem Durchsuchen erhalte ich ja mehrere Treffer (Tel.-Nr.: Mobilfunknr., Faxnr. Artnr.) Würde sich hier nicht ein Array lohnen, in welchem ich die Nummern zwischenspeichern könnte, um sie anschließend i"in einem Rutsch" in meine Tabelle einfügen zu können? Dadurch würden die Schreibzugriffe auf die Festplatte bei vier Nummern geviertelt, auch wenn das Schreiben dannn etwas länger dauert. Die träge Mechanik wäre also nur ein Viertel so häufig beansprucht.

  • Hallo,

    Komme absolut nicht klar mit RegExp usw. Auch Eure viele Hilfe bringt mich nicht weiter, denn ich kann die Treffer nicht anzeigen lassen.
    So wie ich die Anleitung über RegExps verstehe, wird mit dem Parameter 0 auf Nichtvorhandensein, mit dem Parameter 1 auf Vorhandensein und mit dem Parameter 2 auf die Rückgabe des Treffers gesucht.
    Inzwischen habe ich soviel am Text rumgebastelt, dass ich überhaupt keine Reaktion mehr erhalte.

    BugFix
    Hätte sich bei Deinem Quelltext nicht eine Konsole öffnen müssen, in der ich das "gematchte" Wort hätte sehen können?

    Habe dann versucht dies einfach zur Kontrolle in eine MsgBox auszugeben, aber leider auch das ohne Erfolg. Wo mach ich den Fehler?

    #include <IE.au3>

    $oIE = _IECreate("http://suchen.mobile.de/fahrzeuge/showDetails.html?id=122119594&__lp=105&scopeId=C&sortOption.sortBy=price.consumerGrossEuro&sortOption.sortOrder=ASCENDING&makeModelVariant1.makeId=9000&makeModelVariant1.modelId=25&makeModelVariant1.searchInFreetext=false&makeModelVariant2.searchInFreetext=false&makeModelVariant3.searchInFreetext=false&vehicleCategory=Car&segment=Car&maxPrice=5001&siteId=GERMANY&negativeFeatures=EXPORT&damageUnrepaired=NO_DAMAGE_UNREPAIRED&export=NO_EXPORT&customerIdsAsString=&lang=de&pageNumber=1")
    $Pid = WinGetProcess("mobile.de - der Automarkt für Gebrauchtwagen und Neufahrzeuge - Finden oder verkaufen Sie einfach und schnell Ihr Auto")
    $handel=WinGetHandle ("mobile.de - der Automarkt für Gebrauchtwagen und Neufahrzeuge - Finden oder verkaufen Sie einfach und schnell Ihr Auto" )
    $HTML=_IEBodyReadHTML ( $oIE)
    MsgBox(64,"Body",$HTML)
    $pattern = '(?:Tel.:\s*)(.*)(?:\r)'
    $ergebnis = StringRegExp($HTML, $pattern, 1)
    ConsoleWrite('Telefon: ' & $ergebnis[0] & @CRLF)
    ;MsgBox(64, 'Telefon: ' & $ergebnis[0] & @CRLF)
    ;MsgBox(64,"Ergebnis",$ergebnis)

  • Hab meinen Fehler inzwischen selbst gefunden, so geht's:


    #include <IE.au3>

    $oIE = _IECreate("http://suchen.mobile.de/fahrzeuge/showDetails.html?id=122119594&__lp=105&scopeId=C&sortOption.sortBy=price.consumerGrossEuro&sortOption.sortOrder=ASCENDING&makeModelVariant1.makeId=9000&makeModelVariant1.modelId=25&makeModelVariant1.searchInFreetext=false&makeModelVariant2.searchInFreetext=false&makeModelVariant3.searchInFreetext=false&vehicleCategory=Car&segment=Car&maxPrice=5001&siteId=GERMANY&negativeFeatures=EXPORT&damageUnrepaired=NO_DAMAGE_UNREPAIRED&export=NO_EXPORT&customerIdsAsString=&lang=de&pageNumber=1")
    $Pid = WinGetProcess("mobile.de - der Automarkt für Gebrauchtwagen und Neufahrzeuge - Finden oder verkaufen Sie einfach und schnell Ihr Auto")
    $handel=WinGetHandle ("mobile.de - der Automarkt für Gebrauchtwagen und Neufahrzeuge - Finden oder verkaufen Sie einfach und schnell Ihr Auto" )
    $HTML=_IEBodyReadHTML ( $oIE) ; Quelltext der Internetseite auslesen
    $pattern = '(?:Tel.:\s*)(.*)(?:\r)' ; Muster für Telefonnummernsuche erstellen
    $ergebnis = StringRegExp($HTML, $pattern, 1) ; HTML-Text nach Telefonnummer durchsuchen lasse

    Wie macht Ihr das mit dem Quellcode, wieso bekomm ich ihn nicht in einen Rahmen. Klicke doch vor dem Einfügen immer auf den Schalter "Quellcode".

  • Hallo,
    Quellcode mit ctrl-c kopieren, im Forum-Editor auf das 2. Button von rechts klicken (das mit dem AutoIt -Logo), Ctrl-V drücken , fertig^^