Split Funktion (Variable) bei Tasker mit veränderlichen Werten

  • 6 Antworten
  • Letztes Antwortdatum
T

Tarfi

Neues Mitglied
5
Hallo, ich möchte ein Split durchführen, bei dem sich ein Teil des Splitters
verändern kann, wie in dem Beispiel unten die 168. Hier könnte auch eine andere dreistellige Zahl stehen.

Beispiel-Splitter: <span _ngcontent-sc168="" class=und_so_weiter

Die Variable Split Funktion scheint das nicht zu ünterstützen und
ich dachte deshalb an ein Javascript bei dem der Splitter mit Wildcards ersetzt wird.

Beispiel:
<span _ngcontent-sc***="" class=und_so_weiter

habe aber bisher nichts passendes im Netz gefunden, und kenne mich mit Java nicht aus. Leider macht die sich ändernde Zahl einen
genauen Split unmöglich. Weglassen geht auch nicht, weil der Splitter sonst generell zu ungenau wird.
 
splitte zuerst mit "span _ngcontent-sc"
dann ist der erste Teil mal korrekt.
jetzt splittest du den falschen zweiter Teil mit "="" class=und_so_weiter"
dort sollte dann im ersten Teil die Nummer stehen und im zweiten dein gewünschtes Ergebnis.

so würde ich es machen. keine Ahnung ob es auch anders geht. Vermutlich schon. Also warte mal auf die Antwort eines Profis 😉
 
  • Danke
Reaktionen: Tarfi
Um in Variablen mit komplexerem Inhalt nach etwas Bestimmten zu suchen verwende ich Regex (Regulärere Ausdrücke). Hier dazu mehr.
Die Regex-Suche hat den Vorteil, dass Wildcards/Platzhalter verwendet werden können und nur eine Aufgabe in Tasker benötigt wird.
Mit Variable Splitt kann es sehr schnell unübersichtlich werden, wenn der gesuchte Inhalt nicht in der zweiten Variable ist.
Der Nachteil ist, dass man zuerst Regex lernen muss.

In Tasker kann Regex mit den Aufgaben "Variable Suchen Ersetzen" oder "Simple Match/Regex" verwendet werden.
Wie genau das Suchmuster aussieht, lässt sich ohne den kompletten HTML-Code nicht genau sagen. Es könnte aber bei "Variable Suchen Ersetzen" so aussehen:

(?<=<span _ngcontent-sc\d{3}="" class=und_so_weiter).*?(?=<)

(?<=...) hiermit wird geprüft ob vor dem gesuchten Inhalt die definierten Zeichen stehen. Entspricht dem ersten Splitter.

\d{3} das \d steht für eine beliebige Ziffer, {3} für deren Anzahl.

(?=...) hiermit wird geprüft ob nach dem gesuchten Inhalt die definierten Zeichen stehen. Entspricht dem zweiten Splitter.

.*? Punkt-Stern ist ein Platzhalter für 0 oder mehr Vorkommen eines beliebigen Zeichens. Das ? wird benötigt damit die Suche nach dem ersten < beendet wird.

Die gefunden Treffer werden in einem Array gespeichert. Der erste Treffer ist in %variablename1 gespeichert, der zweite in %variablename2, usw.
 
  • Danke
Reaktionen: Tarfi, rtwl und NitramAkloh
Danke für die Info, Ich hatte schon mit Regex erfolglos rumgestümpert. Jetzt habe ich ja schon mal wichtige Hinweise,
wie die Lösung ev. aussehen kann.
@rtwl
Ich verfahre bisher nach dieser Methode, möchte aber versuchen, den Split so eindeutig wie möglich durchzuführen
 
  • Danke
Reaktionen: rtwl
So, nach mehreren Tagen Fummelei habe ich es jetzt ohne Javascript umgesetzt.
Über das Script gab es immer Fehlermeldungen, wie 'unexpected token', und manchmal kann es doch hilfreich sein, auch mal die Bedeutung zu checken. Anscheinend gibt es da Probleme mit dem HTML- Format. Die Alternative ist, wie auch von Mathens schon gezeigt, die 'Variable Suchen Ersetzen'-Funktion. War mir neu, daß man damit splitten und Regex verwenden kann, mit besseren Ergebnissen.

Die Suche mußte noch etwas geändert werden, hier die Umsetzung:
(?<=<span _ngcontent-sc\d{3}="" class=und_so_weiter)[^<]+

Das '<' in der eckigen Klammer bedeutet, daß die Suche mit dem ersten < beendet wird

Nochmals besten Dank, besonders an Mathens.
 
  • Danke
Reaktionen: Mathens
Hat es bei dir mit .*?(?=<) nicht funktioniert?

Finde aber dein Suchmuster mit [^<]+ einfacher und eleganter.
Danke dafür, auf die Idee das Zeichen zu negieren bin ich noch gar nicht gekommen.
 
Die .*?(?=<)- Endung ergab Fehlermeldungen, Ich würde aber Eingabefehler von mir nicht ausschließen, weil jetzt neu durchgeführte Versuche mit verschiedenen Splittern funktionierten. Die Ergebnisse wichen aber alle von der [^<]+ - Endung ab, zeigten meist weniger Treffer an.

z. Bspl: 0 Treffer zu 10, die alle richtig und gesucht waren.
Eine Suche mit .*?(?=<) ergab Flash %Temp(#) = 6, was ich als 6 Treffer ansehen würde, aber nur 4 Elemente mit Werten in der Reihenfolge %Temp(1), %Temp(3), %Temp(4), %Temp(6) ausgab.

Die [^<]+ - Endung scheint also, zumindest bei meiner aktuellen Suche zuverlässiger zu sein.
 
  • Danke
Reaktionen: Mathens

Ähnliche Themen

M
Antworten
9
Aufrufe
108
Skyhigh
Skyhigh
0
Antworten
4
Aufrufe
264
0karsten
0
rtwl
Antworten
23
Aufrufe
1.211
Cecoupeter
Cecoupeter
Zurück
Oben Unten