Mehrere Variablen aufrunden

  • 11 Antworten
  • Neuester Beitrag
Diskutiere Mehrere Variablen aufrunden im Automatisierung - Tasker im Bereich Tools.
S

spike.one

Fortgeschrittenes Mitglied
Hallo,

gibt es eine Möglichkeit mehrere Variablen nach dem Komma aufzurunden?
Ich lasse mir über Tasker das Wetter abrufen, die Temperaturen sind alle mit Kommastellen versehen. Bsp. %hourly.temp()
%hourly.temp1 12.467 Grad
%hourly.temp2 13.245 Grad
usw....

Über Variable setzen und mathematisch anklicken das klappt ohne Problem.

Ich möchte nicht jede Variable einzeln setzen und aufrunden.

Über eine Hilfe wäre ich sehr dankbar.
Mfg Spike
 
Zuletzt bearbeitet:
holms

holms

Guru
@spike.one Hallo, nur so als Idee:

Kannst du für den hier fett Gedruckte Zähler nicht eine Variable einsetzen?

%hourly.temp1
 
S

spike.one

Fortgeschrittenes Mitglied
@holms ich verstehe nicht was du damit meinst?
 
Mathens

Mathens

Stammgast
Für das Abarbeiten mehre Werte (Variablen) mit den gleichen Aufgaben gibt es Forschleifen.

Im Feld Variable kommt die Variable die in der Schleife als Platzhalter dient.
Bei Einträge werden deine Daten eingetragen, welche mit dem zuvor definiertem Platzhalter in der Schleife abgearbeitet werden. Die Einträge können eine Kombination (mit einem Komma getrennt) aus folgendem sein:
  • Ein Zahlenbereich, z.B. 1:5 (1,2,3,4,5)
  • Ein Zahlenbereich mit Sprügen, z.B. 8:2:-2 (8,6,4,2)
  • Ein Zahlenbereich definiert mit Variablen, z.B. %start:%ende , 1:%arr(#)
  • Eine Variable, z.B. %temperatur
  • Ein Array, z.B. %arr() , %arr(1:4)
Das Ende der Schleife wird mit der Aufgabe End For gesetzt.

Wenn deine Temperaturdaten alle in dem selbem Array (hourly.temp1;hourly.temp2;hourly.temp3;usw.) gesetzt wurden, kannst du wie von @holms vorgeschlagen mit einer Variable als Zähler arbeiten.

Das könnte dann so aussehen:
Code:
        A1: For [ Variable:%zähler Einträge:1:%hourly_temp(#) ]
        A2: Variable Setzen [ Name:%hourly_temp(%zähler) Zu:%hourly_temp(%zähler) Recurse Variables:Aus Mathematisch:An Hinzufügen:Aus Max Rounding Digits:1 ]
        A3: End For
 
Zuletzt bearbeitet:
Mathens

Mathens

Stammgast
Noch eine Erklärung zum Beispiel der For-Schleife. %hourly.temp(#) gibt die Anzahl der Elemente aus dem Array %hourly.temp an.
Beispiel: Ist das Array bis hourly.temp6 gesetzt, enthält die For-Schleife folgende Einträge 1:6 (1,2,3,4,5,6).

Hier noch ein Auszug aus der englischen Anleitung über weitere Möglichkeiten zur Abfrage von Arrays
Variable Arrays
Tasker supports pseudo-arrays.
They are especially useful when used with the For action, since you can perform a set of actions on each element in turn e.g. list a set of files then test each one.
Examples
If the four variables %arr1, %arr2, %arr3, %arr4 hold respectively a, b, c and d then we have an array with 4 elements. These variables can be used just like any other, however it is also possible to access them in special ways. Here are some examples:
  • %arr(#)
    The number of defined array elements (4 in this case)
  • %arr(#>)
    The index of the first defined array element, or 0 if none are defined (1).
  • %arr(#<)
    The index of the last defined array element, or 0 if none are defined (4)
  • %arr(#?b/c)
    A comma-separated list of the array indices (lowest to highest) with matching values, or 0 if none match (2,3 in the example)
  • %arr(#?~Rregex here)
    Same as above but with regex matching
  • %arr(>)
    The contents of the first defined array element (a)
  • %arr(<)
    The contents of the last defined array element (d)
  • %arr() or %arr( : )
    All of the array elements separated by commas (a,b,c,d)
  • %arr(2) or just %arr2
    The content of the element with index 2 (b)
  • %arr(2:4)
    Contents of defined elements with indices 2 to 4 (b,c,d)
  • %arr( :3)
    All the defined elements with indices up to 3 (a,b,c)
  • %arr(3: )
    All the defined elements with indices starting from 3 (c,d)
  • %arr(1:2)
    All the defined elements with indices from 1 to 2 (a,b)
Notes:
  • arrays will virtually always have all their elements defined so e.g. %arr(>) will be the same as %arr(1)
  • index specifiers can themselves be variables (e.g. %arr(1:%MAX) or %arr(#?%FINDME)) but not varigable arrays
 
Zuletzt bearbeitet:
S

spike.one

Fortgeschrittenes Mitglied
Danke erstmal für die Antworten.
Doch leider habe ich es bis etzt noch nicht hinbekommen.
Gebe ich bei For bei Einträge hourly_temp(#)
Werden 48 Einträge gefunden, gebe (1:3) oder mehr an kommt eine Fehlermeldung.

Lasse ich mir durch Flash die Variable als Text anzeigen, stehen dort die ganzen Temperaturen drin die in der Variable stehen nur eben bei For gibt es immer eine Fehlermeldung.

15.06.06/E exe: Wetter AbfrageTest / Variable Set [ Name:%hourly_temp(%zähler) To:%hourly_temp(%zähler) Recurse Variables:Off Do Maths:On Append:Off Max Rounding Digits:1 Structure Output:On ]
15.06.06/Variables doreplresult: |%zähler| -> |14.25|
15.06.06/Variables doreplresult: |%hourly_temp(%zähler)| -> |%hourly_temp0|
15.06.06/Variables doreplresult: |%zähler| -> |14.25|
15.06.06/Variables doreplresult: |%hourly_temp(%zähler)| -> |%hourly_temp0|
15.06.06/Variables doreplresult: |%zähler| -> |14.25|
15.06.06/E Variable Set: %hourly_temp(%zähler) -> %hourly_temp0
15.06.06/Variables doreplresult: |%zähler| -> |14.25|
15.06.06/Variables doreplresult: |%hourly_temp(%zähler)| -> |%hourly_temp0|
15.06.06/Expr mathEval: %hourly_temp0: dsv/Variable Set/%hourly_temp(%zähler): length=0; index=0
15.06.06/E Variable Set: %hourly_temp(%zähler): failed, not numeric or invalid structure setting?
15.06.06/E result: stop task (error)
15.06.06/Variables doreplresult: |%zähler| -> |14.25|
15.06.06/Variables doreplresult: |%hourly_temp(%zähler)| -> |%hourly_temp0|
15.06.06/E Error: 1
15.06.06/MacroEdit action finished exeID 1 action no 40 code 547 status: Err next 40
 
Zuletzt bearbeitet:
Mathens

Mathens

Stammgast
Kannst du den Task bitte exportieren (em bestem mit der Abfrage der Temperaturen), dann kann ich ihm mal bei mir Testen und schauen wieso der Fehler kommt.
 
Mathens

Mathens

Stammgast
Hab den Fehler doch noch entdeckt

Falls du alle Variablen des Array runden willst, musst du bei For unter Einträge 1:%hourly_temp(#) eintragen. Was bei deinem Array dann 1:48 entspricht. Dann hat %zähler folgende Werte 1,2,3,4,5,6,...,46,47,48

Wenn du aber nur die Variablen 1-3 des Array runden willst, musst du bei For unter Einträge 1:3 (ohne %hourly_temp) eintragen. Dann hat %zähler folgende Werte 1,2,3
Bei der Aufgabe Variable setzen kann dann Tasker die Variable %hourly_temp1, %hourly_temp2 und %hourly_temp3 korrekt setzen.

Wenn du aber bei For unter Einträge %hourly_temp(1:3) einträgst, hat %zähler dann z.B. folgende Werte 14.25,13.56,13.79
Bei der Aufgabe Variable setzen versucht dann Tasker die Variable %hourly_temp14.25 zu setzen, welche es so nicht gibt und bringt dann den Fehler.
 
Zuletzt bearbeitet:
S

spike.one

Fortgeschrittenes Mitglied
Irgendeine Kleinigkeit übersehe ich vielleicht, ich bekomme es irgendwie nicht zu laufen, ich werde Irre ;)

Ich habe den Task hier mal angehangen, vielleicht kannst du den bei dir bitte mal importieren und schauen wo sich der Fehler eingeschummelt hat.
 

Anhänge

  • Temperatur_Abfrage.tsk.xml
    1,2 KB Aufrufe: 1
Zuletzt bearbeitet:
Mathens

Mathens

Stammgast
Du hast in dem Task kein Array sondern nur eine einzelne Variable welche mehrere Werte enthält.
Anstelle von Variable Setzen musst du Array Set nehmen.

Hier mal grob die Grundlagen zu Arrays:
Bei Array Set wird die "Grundvariable" (in deinem Beispiel %json2_hourly_temp) nicht verändert. Was aber passiert ist das Tasker Arrayelemente aus der Variable erstellt. Es entstehen dann die Variablen %json2_hourly_temp1, %json2_hourly_temp2, %json2_hourly_temp3, usw. mit den Werten (Values) die du in Array Set definiert hast.
Wichtig hierzu ist noch, dass Tasker so bereits vorhande Arrayelemente überschreibt und wenn mehr Arrayelemente bereits zuvor vorhanden sind als mit Array Set geschrieben werden, werden diese nicht gelöscht.

Und alle Arrayelemente zu löschen gibt es die Aufgabe Array Leeren.
Mit Array Pop kannst du Elememte aus dem Array entfernen und mit Array Push einzelene Elemente hinzufügen.
Mit Array Process kannst du z.B. Duplikate entfernen oder die Reihenfolge ändern.

Diese Arrayelemente kannst du dann, wie in der Anleitung aus Post #5, abfragen.
Zum Beispiel mit %json2_hourly_temp(#) die Anzahl der Elemente in des Array oder mit %json2_hourly_temp() alle Werte des Array getrennt mit einem Komma.
 
S

spike.one

Fortgeschrittenes Mitglied
Ich habe als Test einfach mal Array Set die Werte händisch angegeben, dort funktionert es.
Gebe ich allerdings Array Set und die Werte eine Variable an dort wo die ganzen Temperaturen gespeichert sind, funktioniert es nicht.
Bei der Variable %json2.hourly.temp() sind alle Temperaturen nacheinander mit Komma getrennt eingetragen, die ich mir als Benachrichtigung anzeigen lassen kann.
Ich muss dazu sagen, dass ich mit Arrays bis dato nichts zu tun hatte :(

Der bearbeitete Task nochmal im Anhang.
 

Anhänge

  • Temperatur_Abfrage.tsk.xml
    1,3 KB Aufrufe: 1
Zuletzt bearbeitet:
Mathens

Mathens

Stammgast
In
spike.one schrieb:
Bei der Variable %json2.hourly.temp() sind alle Temperaturen nacheinander mit Komma getrennt eingetragen, die ich mir als Benachrichtigung anzeigen lassen kann.
Dann hast du doch schon ein Array. Jedoch kannst du in deinem Tesk Task nicht darauf zugreifen, weil %json2_hourly_temp eine Lokale Variable ist.

Lokale Variablen (nur Kleinbuchstaben) sind nur im Task oder in der Szene gültig wo sie eingesetzt werden und können nicht von anderen Tasks gelesen werden. Ist der Task oder die Szene beendet, ist auch die Variable gelöscht.
Globale Variablen (mit Grossbuchstaben) können auch von anderen Task/Szenen verwendet werden und der Wert bleibt beim Beenden erhalten.


Falls du nicht weiter kommst, kannst du dann bitte den Task exportieren mit dem du das Wetter abruftst.
 
Ähnliche Themen - Mehrere Variablen aufrunden Antworten Datum
1