Numerische Variablen aufsteigend sortiern
Moderator: Co-Administratoren
Re: Numerische Variablen aufsteigend sortiern
KLASSE - Lieben Dank für die exzellente - auch für "Skripting-Beginner" verständliche und nachvollziehbare Erklärung der einzelnen Schritte!
Es ist zwar "bequem", wenn man einfertiges Skript "geliefert" bekommt, lernen kann man aber nur, wenn man entweder tief genug in der Materie steckt und somit nachvollziehen kann, was wie realisiert wurde. Als Anfänger steht man da dann ohne Erklärung ziemlich auf dem Schlauch, weil man eben die die Schritte verbindenden Gedankengänge nicht kennt. Ist etwa so, wie der Lehrer früher an der Tafel, wenn er in Mathe die für ihn logischen Zwischenschritte ausließ und man sich später fragte, wie er denn nun auf die nächste Zeile kam ...
Also, nochmals herzlichen Dank an ALLE und einen schönen und entspannten Abend!
Es ist zwar "bequem", wenn man einfertiges Skript "geliefert" bekommt, lernen kann man aber nur, wenn man entweder tief genug in der Materie steckt und somit nachvollziehen kann, was wie realisiert wurde. Als Anfänger steht man da dann ohne Erklärung ziemlich auf dem Schlauch, weil man eben die die Schritte verbindenden Gedankengänge nicht kennt. Ist etwa so, wie der Lehrer früher an der Tafel, wenn er in Mathe die für ihn logischen Zwischenschritte ausließ und man sich später fragte, wie er denn nun auf die nächste Zeile kam ...
Also, nochmals herzlichen Dank an ALLE und einen schönen und entspannten Abend!
-
- Beiträge: 338
- Registriert: 05.10.2020, 18:37
- System: CCU
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 25 Mal
Re: Numerische Variablen aufsteigend sortiern
Hi
Das Script funzt nicht wirklich.
Und dan kommen Zahlen raus wo gar nich vorhanden waren.
Das
gibt
Thomas
Das Script funzt nicht wirklich.
Leider tauschts nich nur gleiche sondern auch wo ähnlich sind.
Und dan kommen Zahlen raus wo gar nich vorhanden waren.
Das
Code: Alles auswählen
real s = 2.345;
real t = 1.234;
real x = 2.345;
real y = 42.345;
real z = 1.234;
object arr = s # ";" # t # ";" # x # ";" # y # ";" # z;
string av;
string an;
integer len = web.webGetValueListCount(arr).ToInteger();
boolean swapped = true;
boolean revers = true;
WriteLine( "unsortiert:");
WriteLine(arr);
while (swapped)
{
integer i = 1;
swapped = false;
while (i < len)
{
if ((web.webGetValueFromList(arr, i).ToFloat()) < (web.webGetValueFromList(arr, i - 1).ToFloat()))
{
av = web.webGetValueFromList(arr, i - 1) # ";" # web.webGetValueFromList(arr, i);
an = web.webGetValueFromList(arr, i) # ";" # web.webGetValueFromList(arr, i - 1);
arr = arr.Replace(av, an);
swapped = true;
}
i = i + 1;
}
}
WriteLine( "sortiert:");
WriteLine( "aufsteigend:");
WriteLine(arr);
if (revers)
{
object arr2="";
string elem;
foreach(elem, arr.Split(";"))
{
arr2 = elem # ";" # arr2;
}
}
WriteLine( "absteigend:");
WriteLine(arr2.RTrim(";"));
real a = web.webGetValueFromList(arr, 0);
real b = web.webGetValueFromList(arr, 1);
real c = web.webGetValueFromList(arr, 2);
real d = web.webGetValueFromList(arr, 3);
real e = web.webGetValueFromList(arr, 4);
WriteLine("a = "#a);
WriteLine("b = "#b);
WriteLine("c = "#c);
WriteLine("d = "#d);
WriteLine("e = "#e);
Code: Alles auswählen
unsortiert:
2.345000;1.234000;2.345000;42.345000;1.234000
sortiert:
aufsteigend:
1.234000;2.345000;2.345000;2.345000;41.234000
absteigend:
41.234000;2.345000;2.345000;2.345000;1.234000
a = 1.234000
b = 2.345000
c = 2.345000
d = 2.345000
e = 41.234000
Wenn du keine App zur Bedienung brauchst, dann hast du kein Smarthome, sondern nur eine angefangene Baustelle, oder nur ein unsmartes Autohome.
Homematic-Script - ScriptLexikon für alle
Methoden Konstanten
Hilfe und Infos erwünscht. Alle können mitmachen. Keine Levels. Keine Geheimtuerei.
Homematic-Script - ScriptLexikon für alle
Methoden Konstanten
Hilfe und Infos erwünscht. Alle können mitmachen. Keine Levels. Keine Geheimtuerei.
- Henke
- Beiträge: 1538
- Registriert: 27.06.2022, 20:51
- System: CCU
- Hat sich bedankt: 144 Mal
- Danksagung erhalten: 312 Mal
Re: Numerische Variablen aufsteigend sortiern
Und mal kurz aber kreativ:
Code: Alles auswählen
! Array sortieren - M.Henke
real s = 2.345;
real t = 1.234;
real x = 2.345;
real y = 42.345;
real z = 1.234;
boolean reverse = false;
string trenn = ";";
object arr = s # trenn # t # trenn # x # trenn # y # trenn # z;
string js = '
let trenn = process.argv[2];
let arr = process.argv[1].split(trenn);
if ( process.argv[3] == "true" )
process.stdout.write(arr.sort().reverse().join(trenn) );
else
process.stdout.write(arr.sort().join(trenn) );
';
string stdout; string stderr;
system.Exec( "node -e '" # js # "' '" # arr # "' '" # trenn # "' '" # reverse #"'" ,&stdout,&stderr);
if (stderr) { Write(stderr); quit; }
WriteLine( stdout);
-
- Beiträge: 583
- Registriert: 17.04.2021, 17:12
- System: CCU
- Hat sich bedankt: 29 Mal
- Danksagung erhalten: 137 Mal
Re: Numerische Variablen aufsteigend sortiern
Danke fürs Austesten und Melden der Ungereimtheiten.[sprotte80] hat geschrieben: ↑26.02.2024, 19:56Hi
Das Script funzt nicht wirklich.
Leider tauschts nich nur gleiche sondern auch wo ähnlich sind.
Und dan kommen Zahlen raus wo gar nich vorhanden waren.
Diese Version sollte es nun richtig machen:
Code: Alles auswählen
real s = 2.345;
real t = 1.234;
real x = 2.345;
real y = 42.345;
real z = 1.234;
string sep = ";";
object arr = s # ";" # t # ";" # x # ";" # y # ";" # z;
arr = sep#arr.Trim(sep)#sep;
string av;
string an;
integer len = web.webGetValueListCount(arr).ToInteger() - 2;
boolean swapped = true;
boolean revers = true;
WriteLine( "unsortiert:");
WriteLine(arr.Trim(sep));
while (swapped)
{
integer i = 2;
swapped = false;
while (i <= len)
{
if ((web.webGetValueFromList(arr, i).ToFloat()) < (web.webGetValueFromList(arr, i - 1).ToFloat()))
{
av = web.webGetValueFromList(arr, i - 1) # sep # web.webGetValueFromList(arr, i);
an = web.webGetValueFromList(arr, i) # sep # web.webGetValueFromList(arr, i - 1);
av = sep # av # sep;
an = sep # an # sep;
arr = arr.Replace(av, an);
swapped = true;
}
i = i + 1;
}
}
arr = arr.Trim(sep);
WriteLine( "sortiert:");
WriteLine( "aufsteigend:");
WriteLine(arr);
if (revers)
{
object arr2="";
string elem;
foreach(elem, arr.Split(";"))
{
arr2 = elem # ";" # arr2;
}
}
WriteLine( "absteigend:");
WriteLine(arr2.RTrim(";"));
real a= web.webGetValueFromList(arr, 0);
real b= web.webGetValueFromList(arr, 1);
real c= web.webGetValueFromList(arr, 2);
WriteLine("a = "#a);
WriteLine("b = "#b);
WriteLine("c = "#c);
Gruß
Harry
Harry
-
- Beiträge: 583
- Registriert: 17.04.2021, 17:12
- System: CCU
- Hat sich bedankt: 29 Mal
- Danksagung erhalten: 137 Mal
Re: Numerische Variablen aufsteigend sortiern
Aber nur für Leute die node.red oder etwas haben ? Und auch davon was kennen
Auf (m)einer CCU2 fast ohne irgendwelche addons : /bin/sh: node: not found
Gruß
Harry
Harry
- Henke
- Beiträge: 1538
- Registriert: 27.06.2022, 20:51
- System: CCU
- Hat sich bedankt: 144 Mal
- Danksagung erhalten: 312 Mal
Re: Numerische Variablen aufsteigend sortiern
Auf jeder CCU3 ist zumindest ein node.js installiert.
Auf einer CCU2 geht es wohl auch. Ist ja nur 11 Jahre alt. Daher, geht mir am Arsch vorbei wenn es auf einer CCU2 nicht läuft.
viewtopic.php?t=13275
-
- Beiträge: 583
- Registriert: 17.04.2021, 17:12
- System: CCU
- Hat sich bedankt: 29 Mal
- Danksagung erhalten: 137 Mal
Re: Numerische Variablen aufsteigend sortiern
Ich glaub, ich muss mir nun langsam auch eine zulegen...
Gruß
Harry
Harry
-
- Beiträge: 12143
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 854 Mal
- Danksagung erhalten: 2156 Mal
- Kontaktdaten:
Re: Numerische Variablen aufsteigend sortiern
Auf meinem Testsystem kommt der selbe Fehler.
RaspberryMatic 3.75.2.20240213 generic-aarch64
- Henke
- Beiträge: 1538
- Registriert: 27.06.2022, 20:51
- System: CCU
- Hat sich bedankt: 144 Mal
- Danksagung erhalten: 312 Mal
Re: Numerische Variablen aufsteigend sortiern
Damit ist das wohl keine CCU3, oder?
Ist node.js auf dem System?
-
- Beiträge: 12143
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 854 Mal
- Danksagung erhalten: 2156 Mal
- Kontaktdaten:
Re: Numerische Variablen aufsteigend sortiern
Nein, wundert mich auch. Muss ich mal genauer nachschauen