Hilfe bei Regex

  • Hallo ihr Experten,

    hab mal wieder ein kleines Problem mit Regex.

    Als Anfänger sehr sehr schwierig.

    Ich benötige die lat und lon Row 23 und Row 24

    Vielleicht kann mir jemand helfen.

    Vielen Dank im Voraus!

    Gruß Windi :)

    Ich kann leider keine Original Daten reinstellen, sie sind mit API key geschützt.

  • Hmmm, ich scheine das Problem nicht verstanden zu haben...du HAST doch bereits die Daten im Array?!

  • Hi Andy,

    danke für die Rückmeldung!

    Ich habe die Daten im Array richtig.

    Kann man die noch ein bischen mehr eingrenzen.

    Hier das Original Array!

    Ich brauch davon Row 4 und 5

    Row 1 hat manchmal die gleiche Größe an Ziffern.

    Und Row 5 ist manchmal 2 Stellig.

    Mir würde schon helfen wenn Row 0, Row 2 und Row 3 draus wären.

    Ist das überhaupt möglich?

    Gruß Windi

  • Mir geht es so wie Andy - das Array ist doch bereits vorhanden:)

    Wenn Du die Werte aus Row 4 und 5 benötigst, dann kannst Du sie doch einfach ansprechen/ausgeben. Hast Du möglicherweise noch Verständnisprobleme mit Arrays im allgemeinen ?

    Mit z.B. _ArrayDelete lassen sich Elemente aus einem Array entfernen, aber das ist überhaupt nicht erforderlich.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ich brauch davon Row 4 und 5

    Beispiel mit dein Originalarray aus Beitrag 3 :

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hier die Rohdaten:

    Code
    {"summary":{"query":"wilnsdorf hohe roth 6","queryType":"NON_NEAR","queryTime":149,"numResults":1,"offset":0,"totalResults":7314,"fuzzyLevel":2},"results":[{"type":"Point Address","id":"DE/PAD/p0/21286756","score":7.0448002815,"matchConfidence":{"score":0.9350328916967534},"address":{"streetNumber":"6","streetName":"Hoheroth","municipality":"Wilnsdorf","countrySecondarySubdivision":"Siegen-Wittgenstein","countrySubdivision":"Nordrhein-Westfalen","postalCode":"57234","countryCode":"DE","country":"Deutschland","countryCodeISO3":"DEU","freeformAddress":"Hoheroth 6, 57234 Wilnsdorf","localName":"Wilnsdorf"},"position":{"lat":50.82027,"lon":8.11352},"viewport":{"topLeftPoint":{"lat":50.82117,"lon":8.1121},"btmRightPoint":{"lat":50.81937,"lon":8.11494}},"entryPoints":[{"type":"main","position":{"lat":50.82024,"lon":8.11361}}]}]}
    Code
    "position":{"lat":50.82027,"lon":8.11352

    Diese Werte bräuchte ich.

  • RegEx hat hier nichts zu suchen.
    Die Ergebnisse sind im JSON-Format und sollten daher auch entsprechend behandelt werden.
    Es gibt diverse UDFs hierzu für AutoIt.

    Ein Beispiel zum Geocoden über Google mit Hilfe >dieser UDF< habe ich dir mal erstellt (das Rohergebnis von dir sagt mir nix, da meine Google-API-Abfragen eine andere Struktur zurückgeben):

  • Danke für deine Mühe, kriege folgende Fehlermeldung.

    Die Url ist von TomTom und der Key kann ich nicht veröffentlichen.


    Code
    >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\xx2\Desktop\Regex test.au3"    
    "C:\Users\xx2\Desktop\Regex test.au3" (36) : ==> Unknown function name.:
    $oResult = _JSON_Parse($sJSONReturn)
    $oResult = ^ ERROR
    >Exit code: 1    Time: 0.3565

    Ich hatte es mit StringinStr probiert aber es ist verdammt langsam.

    Da sind zum Teil ein paar Tauusend zeichen drin.

    Deshalb kam ich auf die idee mit Regex.

  • Dumme Frage, aber hast Du auch die json-udf eingebunden ?

    "C:\Users\xx2\Desktop\Regex test.au3" (36) : ==> Unknown function name.:$oResult = _JSON_Parse($sJSONReturn)$oResult = ^ ERROR

    Unknown function name lässt vermuten, dass das nicht der Fall ist.

    Bitte auch folgendes beachten :

    Zitat
    2022/10/19
    • Script-Breaking!: _JSON_Parse generiert für JSON-Objekte nun AutoIt-Maps anstatt Scripting.Dictionary-Objekte. Die letzte Version mit Dictionary liegt im Anhang als JSON_Dictionary.au3.
    • __JSON_FormatString(): @Tab wird nun durch \t escaped. (thx mko)

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hab die neue Version runtergeladen.

    Jetzt kommt der Fehler:

    Code
    >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\xx2\Desktop\Regex test.au3"    
    "C:\Users\xx2\Desktop\JSON.au3" (184) : ==> Variable subscript badly formatted.:
    Local $o_Current[]
    Local $o_Current[^ ERROR
    >Exit code: 1    Time: 0.3685
  • Welche Version von AutoIt verwendest Du ?

    Verwende mal die Variante JSON_Dictionary.au3

    Windi -> Edit : Damit hat es wahrscheinlich nichts zu tun.

    Das Problem ist :

    ==> Variable subscript badly formatted

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    2 Mal editiert, zuletzt von Musashi (4. Dezember 2022 um 00:15)

  • RegEx ist, wie AspirinJunkie bereits schrieb, nicht die erste Wahl.

    Ich habe trotzdem mal zwei Pattern zusammengestümpert - mehr fällt mir um diese Zeit nicht mehr ein ^^

    Die beiden Arrays kannst Du bei Bedarf joinen.

    AutoIt
     #include <Array.au3>
    
    Local $sSource = '{"summary":{"query":"wilnsdorf hohe roth 6","queryType":"NON_NEAR","queryTime":149,"numResults":1,"offset":0,"totalResults":7314,"fuzzyLevel":2},"results":[{"type":"Point Address","id":"DE/PAD/p0/21286756","score":7.0448002815,"matchConfidence":{"score":0.9350328916967534},"address":{"streetNumber":"6","streetName":"Hoheroth","municipality":"Wilnsdorf","countrySecondarySubdivision":"Siegen-Wittgenstein","countrySubdivision":"Nordrhein-Westfalen","postalCode":"57234","countryCode":"DE","country":"Deutschland","countryCodeISO3":"DEU","freeformAddress":"Hoheroth 6, 57234 Wilnsdorf","localName":"Wilnsdorf"},"position":{"lat":50.82027,"lon":8.11352},"viewport":{"topLeftPoint":{"lat":50.82117,"lon":8.1121},"btmRightPoint":{"lat":50.81937,"lon":8.11494}},"entryPoints":[{"type":"main","position":{"lat":50.82024,"lon":8.11361}}]}]}'
    
    Local $aArrayLat = StringRegExp($sSource, "(?U)position.*lat.*(\d+.\d+),", 3)
    Local $aArrayLon = StringRegExp($sSource, "(?U)position.*lon.*(\d+.\d+)\}", 3)
    _ArrayDisplay($aArrayLat, "Latitude :")
    _ArrayDisplay($aArrayLon, "Longitude :")


    P.S. Oscar oder BugFix

    Könnte einer das Thema aus dem Testforum nach H&U verschieben. Ist ggf. ja von allgemeinem Interesse.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Die Url ist von TomTom und der Key kann ich nicht veröffentlichen.

    Dann musst du die Abfrage natürlich noch an die JSON-Struktur die TomTom liefert anpassen:

    Ansonsten grundsätzlicher Hinweis: Fehlermeldungen ohne ein minimales Skript zu posten, welches diese verursacht helfen in der Regel nicht wirklich weiter.

    Edit Musashi : Die Funktion _ArrayAinATo2d() findet sich auch mittlerweile in der ArrayPlus-UDF.

  • Nachtrag :

    Du solltest, wie schon erwähnt, versuchen, die JSON Variante von AspirinJunkie umzusetzen.

    Hier ein erweiterter RegEx Ansatz :

    Dabei wird im Aufruf von StringRegExp das Flag 4 verwendet (Rückgabe : Array of Arrays).

    AspirinJunkie hat im EN-Forum eine Funktion veröffentlicht, die daraus ein 2-D Array erstellt.

    Das Pattern selbst ist sicherlich noch optimierbar :D .

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ok Danke,

    bin dabei.

    Versuche es in den Webdriver von Dan einzuarbeiten.

    Ich glaube, ich muß mal alles neu updaten.

    Hatte festgestellt, dass der webdriver nicht mehr lief wenn die Datei

    JSON_Dictionary.au3 eingebunden ist.

    Wie ist das eigentlich, laufen die alten Sripte noch nach dem Update, oder muss da was angepasst werden.

  • Versuche es in den Webdriver von Dan einzuarbeiten.

    WebDriver?
    Das ist doch für die Steuerung von Browsern - oder?
    Das ist aber doch Kanonen auf Spatzen für eine Web-API.

    TomTom wird doch sehr wahrscheinlich ähnlich funktionieren wie alle anderen entsprechenden APIs auch.
    Sprich: Man bastelt eine URL zusammen, setzt einen Request hierzu ab und bekommt einen Return.
    Dafür benötigt man doch aber keinen Overhead eines Browsers - ein simples InetRead macht alles was man braucht (siehe mein Beispiel oben mit der Google Geocode-API). Das geht flotter, einfacher und mit weitaus weniger Overhead.

    Oder die TomTom-API ist ganz obskur und macht völlig andere Dinge.

    Wie ist das eigentlich, laufen die alten Sripte noch nach dem Update, oder muss da was angepasst werden.

    Nicht pauschal.
    Wenn man mit der UDF Objekte extrahiert hat und diese direkt in AutoIt weiterverwendet hat und diese dann halt als Dictionary angesprochen hat dann muss man anpassen.
    Wenn man die Objekte aber nicht manuell angefasst hat sondern z.B. nur einzelne Werte mit json_get gezogen hat oder sowas dann gibt es keinen Unterschied.

    Wenn du die UDF verwenden willst und ein Skript neu bastelst dann würde ich stark dazu tendieren die normale json.au3 zu verwenden.
    Dann werden nur native AutoIt-Strukturen verwendet. Außerdem will ich die json_dictionary.au3 nicht weiterpflegen.


    Edit Windi : So hab mir die TomTom-API mal angeschaut und natürlich arbeitet die wie jede andere Web-API auch.
    Sprich - man braucht auch hier kein WebDriver oder sonstiges - ein einfaches InetRead ist hier die korrekte Wahl.
    Dann kann man sich das auch in eine einfache Funktion zur Wiederverwendung gießen:

    4 Mal editiert, zuletzt von AspirinJunkie (4. Dezember 2022 um 11:27)