Guten Abend
Ich möchte in meinem Übersichtsschirm "everything", "floorplan" u.a. die Treibstoffpreise (für eine Sorte) der 3 nächstgelegenen Tanken integrieren und habe dies getan, allerdings stimmen die Preise nicht ganz, weil die Preise auf der clever-tanken-Website nicht als z.B. 1.339, sondern als 1.33<sup>9 notiert sind. Durchschnitts- und Einzelpreise aus den 2 Zahlausdrücken als Ergebnis meiner RegEx [z.B. attr Spritpreis reading02Regex (....)\<sup\>(.)]
müssten daher nachträglich zusammengesetzt werden, wenn ich nicht im Ausdruck selbst neben dem Parsermuster noch ein delete oder replace integriert bekomme.
Da ich u.a. auch kaum etwas von Perl UND RegEx verstehe, würde ich mir gerne durch Codebeispiele auf die Sprünge helfen lassen. Im Forum fand ich bisher nichts (jedenfalls nicht ausreichend Aktuelles) zu dieser Fragestellung.
Darf ich Euch um Vorschläge bitten?
Gebhardt
Dein Reading inkl <sup> mit readingxxRegex extrahieren
Dies mit readingxxOExpr nachformatieren.
Z.B.:attr sprit reading01Name Tankstelle1
attr sprit reading01Regex (?s)price-text.*?([\d\.]+<sup>\d)
attr sprit reading01OExpr join('',split(/<sup>/,$val))
Alternativ: 2 capturing groups in Regex (wie Du anscheinend schon hast), und join in recombineExpr:
attr sprit reading01Name Tankstelle1
attr sprit reading01Regex (?s)price-text.*?([\d\.]+)<sup>(\d)
attr sprit reading01RecombineExpr join "", @matchlist
Alternativ: XPath nutzen
attr sprit reading01Name Tankstelle
attr sprit reading01XPath //div[contains(@class, 'price-text')]
attr sprit reading01AutoNumLen 2
Die letzte Alternative holt alle Tankstellen auf einmal
Steht alles in CommandRef
Danke, amenomade
Warum gibt mein FHEM mir da einen Fehler aus (s. beigefügten ScrnClip), der neben dem Umstand:
Warning
This function was DEPRECATED in PHP 5.3.0, and REMOVED in PHP 7.0.0.
Alternatives to this function include:
preg_split()
explode()
str_split()
an der Syntax des split-Arguments liegen könnte?
Gebhardt
Zitat von: GiBy am 13 Februar 2020, 15:30:46
Danke, amenomade
Warum gibt mein FHEM mir da einen Fehler aus (s. beigefügten ScrnClip), der neben dem Umstand:
Warning
This function was DEPRECATED in PHP 5.3.0, and REMOVED in PHP 7.0.0.
Alternatives to this function include:
preg_split()
explode()
str_split()
an $val liegen könnte?
Gebhardt
Ne, eher an split. Aber
- ich verstehe nicht, was PHP hier zu tun hat
- dein Bild ist nicht lesbar
Nicht les-, lad- oder darstellbar? Anbei das hoff. lesbare Bild, A..
Ich hatte mich zwar auch gewundert, warum der Fehlertext nach Upload kaum noch Kontrast zum Hintergrund hatte. - ich kann ihn allerdings im Thumbnail normal kontrastiert erkennen und im Download.png noch entziffern.
Zum Thema PERL/PHP:
Ich dachte, dass PHP-Funktionen join, split, ... genutzt werden und ich habe gerade dieser Tage für eine Funktion/Modul ein Update auf PHP7 machen (müssen), sodass ich einen solchen versionsbedingten Fehler auf meinem System nicht ausschließen wollte.
Ach ja, der Fehler mag auch nur daran liegen, dass <sup> als Formatierungskommando interpretiert, statt als Zeichenkette entfernt, wird. Just in der Fehlermeldung ist ersteres jedenfalls offensichtlich passiert.
Aber Fhem ist perl, nicht PHP...
Die Fehlermeldung ist komisch. Ist es daselbe mit '<sup>' statt /<sup>/ ?
Ja, die Fehlermeldung ist die gleiche.
Und preg_split("/<sup>/", $val), die empfohlene Alternative, statt split(...)?
Stets die gleiche Fehlermeldung, Amenomade. :(
Und ich habe "-Gänsefüßchen, Leerzeichen nach den Kommata und /\<sup\>/ und auch einfach mal sup als zu entfernendes Bröckchen, @val, $EVTPART0 ausprobiert, um eine andere Fehlermeldung zu erhalten, doch alles ohne Wirkung!
Und wenn Du denn attr erst mit:
attr Spritpreis reading01OExpr x
einträgst, und dann über die Weboberfläsche auf reading01OExpr klicks, und den Wert im Feld auf join('',split(/<sup>/,$val)) änderst und auf attr klicks?
Ich sehe überhaupt keine Grund, wofür Fhem <sup> als Formattierung interpretieren sollte, und zwar noch mit einer PHP Fehlermeldung. Wie läuft dein Fhem?
Danke, unermüdliche(r) Amenomade,
aber ich muss gestehen, dass ich bei der ganzen Hin-und-Her-RegExp-erei eine Schließklammer für das Join vergessen hatte, und das war's.
Mein FHEM läuft stabil trotz meiner Hin- und-Her-Definier-Aktionen, wohingegen die USB-Buchse wackelt, die Maus prellt und immer mal wieder ausfällt. Daher vielleicht vernachlässigte ich leider die Syntax außerhalb des eigentlichen RegExp. >:(
Ich danke Euch für die Ratschläge und die Selbst-Marterungen zu meinem Problem.
Mit
reading02Regex [\d\.]+<sup>\d
und
reading04Regex (\d\d\d\d\d) (.*)<\/div>
konnte ich, nachdem ich irgendwann meine selbstentworfene Formatierung (à la Preis=Preis-3^Preis-4 und andere) in Device-Übersicht etc. entfernt hatte, ganz reelle Zahlen mit 3-stelliger Mantisse sehen, diese auch in der DB wiederfinden und auch den Ort konnte ich durch das andere RegExp von der PLZ befreien. Mehr wollte ich nicht, auch wenn mir die bis dahin ge<sup>ten Tausendstel-Euro gefallen hatten.
Vielleicht lerne ich ja einmal, wie ich das etwa in das stateFormat einarbeiten kann... :)
Und damit schließe ich mooorgen diesen Thread -hint-hint ;)