NEWS
[gelöst] Werte aus einem Textfeld in Liste übergeben
-
@paul53 Das kann man aber auch einfacher haben - indem man den JSONATA Ausdruck nur ändert:
($match($,/(\d,)?\d+.\d/).match)#$i[$i%4=3].$number()
Damit habe ich auch jeden 4. Wert und auch schon in eine Zahl konvertiert:
Hier das Blockly:
-
@mickym sagte: Das kann man aber auch einfacher haben
"Einfacher" ist relativ.
-
Ich hab doch nur eine Klammer drum rum gemacht und ein bisschen was dran gehängt.
-
-
Hallo. Ich muss das Thema nochmals hervorholen.
Was muss ich machen wenn einer dieser Werte die ich benötige ein Minuszeichen davor hat. dieses wird mir nicht übernommen.
-
@manfredhi sagte: ein Minuszeichen davor
Die Wandlung "nach Zahl" wandelt auch negative Werte.
-
Ja das nutzt nur nichts wenn man das vorher als positive Zahl rausfiltert. Sorry das war mein Fehler!!!!
Ich auch meine letzte Variante genommen. Also die, in der JSONATA und nicht Blockly die Konvertierung vornimmt.
Und wenn Du lieber @paul53 Variante nimmst, dann lass halt wieder die äußere Klammer und das "braune" Gedöns weg.So ich habe nun mal bis zu negativen Millionenwerten und auch mehr Dezimalstellen abgeändert und getestet.
Du musst also den regulären Ausdruck ändern
/(?:-?(?:\d+?,)+)?-?\d+\.\d+/
bzw. den ganzen JSONATA-Ausdruck
($match($,/(?:-?(?:\d+?,)+)?-?\d+\.\d+/).match)#$i[$i%4=3].$number()
EDIT: War noch ein Fehler drin - jetzt müsste es passen: https://regex101.com/r/Aunkjk/2
Ich hoffe ich habe nun alle erwischt:
Vielleicht kann das jemand mit den regulären Ausdrücken noch jemand besser als ich und das ist zu umständlich, aber besser habe ICH es halt nicht hingebracht.
-
Falls auch noch ganze Zahlen - also ohne Dezimalpunkt vorkommen sollten - dann muss man es halt nochmal ändern:
https://regex101.com/r/Aunkjk/3/(?:-?(?:\d+?,)+)?-?\d+(?:\.\d+)?/
($match($,/(?:-?(?:\d+?,)+)?-?\d+(?:\.\d+)?/).match)#$i[$i%4=3].$number()
So ich hoffe, ich habe nun alle Eventualitäten bedacht.
-
@mickym
Vielen Dank für die schnelle Lösung. Ich komm mit dem regex überhaupt nicht klar. Aber es funktioniert einwandfrei.
hab aber nur den ersten TEil genommen und den rest über blockly gemacht, da ich dann jeden wert auch gleich durch 10 dividieren kann.
DANKE -
@manfredhi sagte in [gelöst] Werte aus einem Textfeld in Liste übergeben:
@mickym
Vielen Dank für die schnelle Lösung. Ich komm mit dem regex überhaupt nicht klar. Aber es funktioniert einwandfrei.
hab aber nur den ersten TEil genommen und den rest über blockly gemacht, da ich dann jeden wert auch gleich durch 10 dividieren kann.
DANKENa mit einer Klammer und /10 hättest Du es auch so erreicht.
($match($,/(?:-?(?:\d+?,)+)?-?\d+(?:\.\d+)?/).match)#$i[$i%4=3].($number()/10)
und wenn Du das dann auch noch schön gerundet hättest haben wollen:
($match($,/(?:-?(?:\d+?,)+)?-?\d+(?:\.\d+)?/).match)#$i[$i%4=3].$round(($number()/10),3)
-
Hallo @mickym kannst du mir bitte nochmals mit dem regex helfen. ich komm damit einfach nicht klar:
Ich möchte aus diesem Text:
<tr> <td rowspan="1" class="first">00:00 - 01:00</td> <td class="dv-value-cell"><span onclick="showDetail('eu.entsoe.emfip.transmission_domain.r2.presentation.entity.DayAheadPricesMongoEntity', '65a12a32dafea7778dc3c2fa', '2024-01-13T23:00:00.000Z', 'PRICE', 'CET');" class="data-view-detail-link">69.56</span></td> </tr> <tr> <td rowspan="1" class="first">01:00 - 02:00</td> <td class="dv-value-cell"><span onclick="showDetail('eu.entsoe.emfip.transmission_domain.r2.presentation.entity.DayAheadPricesMongoEntity', '65a27c6c55592d197e768cc0', '2024-01-14T00:00:00.000Z', 'PRICE', 'CET');" class="data-view-detail-link">67.53</span></td> </tr> <tr> <td rowspan="1" class="first">02:00 - 03:00</td> <td class="dv-value-cell"><span onclick="showDetail('eu.entsoe.emfip.transmission_domain.r2.presentation.entity.DayAheadPricesMongoEntity', '65a27c6c55592d197e768cc0', '2024-01-14T01:00:00.000Z', 'PRICE', 'CET');" class="data-view-detail-link">66.78</span></td> </tr> <tr> <td rowspan="1" class="first">03:00 - 04:00</td> <td class="dv-value-cell"><span onclick="showDetail('eu.entsoe.emfip.transmission_domain.r2.presentation.entity.DayAheadPricesMongoEntity', '65a27c6c55592d197e768cc0', '2024-01-14T02:00:00.000Z', 'PRICE', 'CET');" class="data-view-detail-link">66.32</span></td> </tr> <tr> <td rowspan="1" class="first">04:00 - 05:00</td> <td class="dv-value-cell"><span onclick="showDetail('eu.entsoe.emfip.transmission_domain.r2.presentation.entity.DayAheadPricesMongoEntity', '65a27c6c55592d197e768cc0', '2024-01-14T03:00:00.000Z', 'PRICE', 'CET');" class="data-view-detail-link">66.54</span></td> </tr>
Das Datum mit der Uhrzeit "2024-01-13T23:00:00.000Z" und den Wert dazu "69.56" (durch 10 dividieren mit 3 Kommas) auslesen und das aus allen Einträgen und in eine liste übergeben.
-
@mickym
ich kann zwar mit$match(/(?:\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z)/).match
Das Datum mit der Uhrzeit (z.b. 2024-01-13T23:00:00.000Z) extrahieren, aber wie mach ich es mit den Beträgen, also 69.56, 67.53 usw. ? Vor allem könnte das auch um eine stelle mehr haben bzw. ein minuszeichen davor.
-
@manfredhi sagte in [gelöst] Werte aus einem Textfeld in Liste übergeben:
/(?:\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z)
Warum nutzt Du eigentlich nicht diese Seite: https://regex101.com/ bzw. da es konstant ist das Forward Lookup brauchst du erstmal nicht,
Wie Du siehst bekommst Du ja Dein Datum richtig raus: https://regex101.com/r/6wBOu4/1
Ich weiss aber nicht warum Du da Datum brauchst? oder ob Du es brauchst? - Dein Wert steht doch in der class="data-view-detail-link">69.56< , warun checjst Du das Datum oder willst Du das haben? Oder Beides?
Ich gehe mal davon aus, Du willst beides.
-
@mickym
habs eh mit regex versucht.
mit dem($match(/(?:)?-?\d+\.\d+/).match)#$i[$i%2=1].$round(($number()/10),3)
bekomm ich die zahl nun raus.
eigentlich wollte ich in einer liste beides haben, erst das datum, dann den betrag. aber das geht glaub ich nicht.
-
@manfredhi Doch schau mal - ob Dir as gefällt?
-
@mickym sagte in [gelöst] Werte aus einem Textfeld in Liste übergeben:
Doch schau mal - ob Dir as gefällt?
ja und in der Liste möchte ich dann immer abwechselnd das datum und den betrag
also so soll das z.b. dann aussehen:
['2024-01-13T23:00:00.000Z',6.956,'2024-01-14T00:00:000Z',6.753, .......] -
@manfredhi Na also - also siehst Du regEx geht, aber ein Objekt wäre doch sicher sinnvoller - also wieder so ein Stringchaos.
Wäre das den nicht viel schöner:
: https://try.jsonata.org/bz5mJZ3T_
Warum löst ihr euch nicht von diesen blöden Strings?
[ { "date": "2024-01-13T23:00:00.000Z", "value": "69.56" }, { "date": "2024-01-14T00:00:00.000Z", "value": "67.53" }, { "date": "2024-01-14T01:00:00.000Z", "value": "66.78" }, { "date": "2024-01-14T02:00:00.000Z", "value": "66.32" }, { "date": "2024-01-14T03:00:00.000Z", "value": "66.54" } ]
-
@mickym sagte in [gelöst] Werte aus einem Textfeld in Liste übergeben:
Warum löst ihr euch nicht von diesen blöden Strings?
im Grunde würden ja auch nur die Werte genügen, ohne Datumszuordnung. Es sind jeden Tag 24. also von 0 Uhr bis 23 Uhr.
Probleme sehe ich nur bei Wechsel auf Sommerzeit da sinds plötzlich nur 23 Werte bzw. im Herbst dann mal 25 Werte und da wäre die Zuordnung ideal. -
@manfredhi Ja aber deswegen habe ich dir doch Objekte gemacht - wenn Du willst kannst ja dann schauen, ob Du nur die Werte oder das Objekt haben willst - aber warum willst Du weiter mit dem string Chaos weiterarbeiten?
Wenn du lieber Dein Stringchaos behalten möchtest, dann halt so: https://try.jsonata.org/g1gX0dk1Y
[ "2024-01-13T23:00:00.000Z", "69.56", "2024-01-14T00:00:00.000Z", "67.53", "2024-01-14T01:00:00.000Z", "66.78", "2024-01-14T02:00:00.000Z", "66.32", "2024-01-14T03:00:00.000Z", "66.54" ]
So wie Du es wünschst.
Oder so wenn Du ein Array mit Strings und in Zahl konvertierten Wert haben möchest:
: https://try.jsonata.org/5AZsbw1r9[ "2024-01-13T23:00:00.000Z,69.56", "2024-01-14T00:00:00.000Z,67.53", "2024-01-14T01:00:00.000Z,66.78", "2024-01-14T02:00:00.000Z,66.32", "2024-01-14T03:00:00.000Z,66.54" ]
oder wenn Du Strings so sehr liebst dann halt alles in einem String:
https://try.jsonata.org/RvEH4MzlH"2024-01-13T23:00:00.000Z,69.56,2024-01-14T00:00:00.000Z,67.53,2024-01-14T01:00:00.000Z,66.78,2024-01-14T02:00:00.000Z,66.32,2024-01-14T03:00:00.000Z,66.54"
Und wenn du halt unbedingt ein Array mit Deinem String haben willst dann machst halt um das Join noch eine eckige Klammer. Macht aber alles in meinen Augen keinen Sinn.
Nun hast Du alle möglichen Ausgaben - von Objekten oder diversen Strings.
-
@mickym sagte in [gelöst] Werte aus einem Textfeld in Liste übergeben:
Wäre das den nicht viel schöner:
: https://try.jsonata.org/bz5mJZ3T_meinst du ich soll es so machen ?
Wenn ja, wenn ich das in den jsonata eintrage, bekomme ich einen Fehler.