Danke hab mir selber einen gebaut und werde diesen nach Tests auch noch zur Verfügung stellen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Neue Logikbausteine für den L1/X1: Formelberechnung, Statistik und mehr...
Einklappen
Dieser Beitrag wurde beantwortet.
X
X
-
Moin hyman , könntest du mir vielleicht bei einer Formel zur Umwandlung des aktuellen Datums und Uhrzeit 00:00Uhr in UTC +000 helfen? Ziel ist es, nach Mitternacht das aktuelle Datum + Uhrzeit 00:00Uhr in UTC umzuwandeln und in die Webabfrage bei Awattar zu schieben. Als Ergebnis bekommt man sauber die nächsten 24h womit ich dann über die Statistik den niedrigsten Preis mit dazugehöriger Uhrzeit ermitteln kann.
Ich danke dir, Martin.
Kommentar
-
Das kann ich Dir leider auch nicht sicher sagen. Als Vermutung kann ich anbieten, dass der Baustein eine größere Bibliothek braucht, die natürlich auch im Flash-Speicher liegen muss. Für den L1 also vielleicht nicht so ideal, weil der halt nun mal wesentlich weniger Flash-Speicher hat als der X1.
Kommentar
-
Guten Abend,
die Aufgabe bestand darin, den zweitgrößten Wert einer Werteliste (comma seperated values; liegt als string vor) zu finden. Ich habe dies jetzt unter etwas komplexem Einsatz des XML-JSON Parsers (Danke, Hyman!) und der Formelberechnung (nochmals Danke!) gelöst - siehe unten.
Vielleicht habe ich damit ja mit Kanonen auf Spatzen geschossen und die Lösung ist viel einfacher. Falls nicht, wäre das möglicherweise ein Ergänzungsvorschlag zum XML-JSON-Parser: die Ausgabe einer sortierten (wahlweise aufwärts und abwärts) Liste (in Ergänzung zu Min, Max, chronologischer Liste usw.).
Hier die quick (na ja) and dirty Lösung - würde mich über Rückmeldung freuen.
Beste Grüße
Wehner
dataurl217860.png
Wertgenerator (Beispiel): 123,0,456.0,-5.3,0
Formelb_Werteliste_zu_JSON: ""+(char)123+(char)34+"T"+(char)34+(char)58+"["+{T:S}+"]"+(char)125,
ergibt den JSON-Text: {"T":[123,…0]}
Auswertung im XML-JSON-Parser mit /root/T/item[position()>-1] für Max
Formelb_ersetze_Max
{T1:S}.Replace({MX:S},"-9999") Dabei ist -9999 eine für meine Anwendung sehr kleine Zahl, die es übrigens auch verträgt, wenn beim Ersetzen noch Dezimalpunkt und Nachkommastellen übrigbleiben.
Bitte nicht ungeändert nachmachen: Beispiel, wo's Probleme gibt: die Liste 0,1,24.48,48 wird zu 0,1,24.-9999,48:
Entsprechende Auswertung im XML-JSON-Parser liefert jetzt die 2.-größte Zahl (im Beispiel 123).
Für die 3.-größte etc. kann man das noch vervielfachen.
Zuletzt geändert von Wehner123; 31.10.2023, 11:12.
Kommentar
-
Hallo Hyman,
besten Dank für die schnelle Antwort. Ich habe den Vorschlag als
Array.Sort( Array.ConvertAll({TT:S}.Split(','), int.Parse), (a, b) => b.CompareTo(a))[1]
in die Formelberechnung eingegeben und erhalte die Meldung
Der Baustein „Formelberechnung“ hat folgendes Problem festgestellt: Formel 1 enthält eine Zuweisung. Dies ist in Formeln generell nicht zulässig.
Ich habe dann mal versucht, langsam anzufangen:
{TT:S}.Split(','))[2] ist schon mal sehr nett. Da bekomme ich bei String-Ausgabe mit meinen Werten 456.0 und als Number den Wert 456. Schon mal sehr schön.
Array.Sort({TT:S}.Split(','))[2] ergibt eine Fehlermeldung; Array.Sort({TT:S}.Split(',') läuft zwar ohne Fehlermeldung, aber mit leeren String bzw. 0 als Ergebnis.
Array.ConvertAll({TT:S}.Split(','), int.Parse)[2] ergibt bei einer Integer-Werte-Liste das richtige Ergebnis, bei float.parse wird der Dezimalpunkt aber ignoriert (wahrscheinlich Culture-Einstellung) und es ergibt 4560.
Ich probiere mal weiter. Für Tipps wäre ich weiterhin dankbar.Zuletzt geändert von Wehner123; 31.10.2023, 11:05.
Kommentar
-
Für Fließkommazahlen, bei denen ein Punkt als Separator für die Nachkommastellen verwendet wird, vielleicht etwa so (wie alle vorherigen ungetestet):
Array.Reverse( Array.Sort( Array.ConvertAll({TT:S}.Split(','), double.Parse(System.Globalization.CultureInfo.CreateSpecificCul ture("en-US"))) ) ) [1]
Oder falls die CultureInfo nicht geht, stattdessen die Eingabedaten mit Komma als Dezimalseparator und Strichpunkt als Separator zwischen verschiedenen Zahlen aufbereiten. Dann könnte simpel:
Array.Reverse( Array.Sort( Array.ConvertAll({TT:S}.Split(';'), double.Parse) ) ) [1]
funktionieren.Zuletzt geändert von hyman; 18.11.2023, 14:58.
Kommentar
-
Hallo,
das funktioniert schon mal:
Aus 123;1;456,12;-5;2
wird mit Array.ConvertAll({TT:S}.Split(';'), float.Parse)[2] der Wert 456,119995117188
und mit Array.ConvertAll({TT:S}.Split(';'), double.Parse)[2] der Wert 456,12
Aber
Array.Sort(Array.ConvertAll({TT:S}.Split(';'), double.Parse))[1]
bringt noch den Fehler: Error CS0021: cannot apply indexing with [] to an expression of type „void“
Hier noch ein Fund aus Stackoverflow:
Sort is a void method, you can't retrieve a value from this method. It sorts the list in-place. If you want a copy, use OrderBy.
Übrigens: Array.ConvertAll({TT:S}.Split(';'), float.Parse).Length ergibt den Wert 5. Es existiert auf der Ebene wohl wirklich ein Array.
Ich versuche es weiter.
Beste Grüße
Zuletzt geändert von Wehner123; 31.10.2023, 15:02.
Kommentar
-
Hallo, besten Dank für die Rückmeldung. Vielleicht findet sich ja jemand, der einen LBS schreibt, der aus einem CSV (Comma Seperated Values) -string einen sortierten (wahlweise auf- und abwärts) macht. Der c# code innerhalb sollte ja recht übersichtlich sein; aber mir ist schon klar, dass das saubere Erstellen eines LBS schon ein größerer Aufwand ist. Gibt es eigentlich eine Projekt-Vorschlags-Liste?
Beste Grüße
Kommentar
Kommentar