NEWS
[gelöst] Werte aus einem Textfeld in Liste übergeben
-
Hallo. Ich habe ein Feld mit folgendem INhalt:
<tr class="child "> <td>2,460.8</td> <td>432.8</td> <td>2,460.8</td> <td>4.53</td> </tr> <tr class="child impair"> <td>2,389.0</td> <td>408.2</td> <td>2,389.0</td> <td>2.92</td> </tr> <tr class="child "> <td>2,395.6</td> <td>393.3</td> <td>2,395.6</td> <td>1.13</td> </tr> <tr class="child impair"> <td>2,357.4</td> <td>413.6</td> <td>2,357.4</td> <td>0.87</td> </tr> <tr class="child "> <td>2,465.6</td> <td>405.6</td> <td>2,465.6</td> <td>1.30</td> </tr> <tr class="child impair"> <td>2,519.0</td> <td>412.0</td> <td>2,519.0</td> <td>7.63</td> </tr> <tr class="child "> <td>2,300.2</td> <td>571.9</td> <td>2,300.2</td> <td>28.33</td> </tr> <tr class="child impair"> <td>2,241.3</td> <td>888.4</td> <td>2,241.3</td> <td>44.00</td> </tr> <tr class="child "> <td>2,196.2</td> <td>914.8</td> <td>2,196.2</td> <td>50.02</td> </tr> <tr class="child impair"> <td>2,243.7</td> <td>920.3</td> <td>2,243.7</td> <td>43.27</td> </tr> <tr class="child "> <td>2,279.8</td> <td>721.7</td> <td>2,279.8</td> <td>33.96</td> </tr> <tr class="child impair"> <td>2,283.4</td> <td>730.6</td> <td>2,283.4</td> <td>32.09</td> </tr> <tr class="child "> <td>2,389.2</td> <td>623.8</td> <td>2,389.2</td> <td>33.16</td> </tr> <tr class="child impair"> <td>2,290.2</td> <td>593.7</td> <td>2,290.2</td> <td>34.00</td> </tr> <tr class="child "> <td>2,222.2</td> <td>711.0</td> <td>2,222.2</td> <td>37.51</td> </tr> <tr class="child impair"> <td>2,200.4</td> <td>1,052.5</td> <td>2,200.4</td> <td>44.70</td> </tr> <tr class="child "> <td>2,202.8</td> <td>1,060.6</td> <td>2,202.8</td> <td>50.02</td> </tr> <tr class="child impair"> <td>2,135.9</td> <td>993.9</td> <td>2,135.9</td> <td>50.73</td> </tr> <tr class="child "> <td>2,177.7</td> <td>1,028.5</td> <td>2,177.7</td> <td>54.04</td> </tr> <tr class="child impair"> <td>2,092.6</td> <td>1,095.5</td> <td>2,092.6</td> <td>48.24</td> </tr> <tr class="child "> <td>1,980.3</td> <td>586.2</td> <td>1,980.3</td> <td>36.83</td> </tr> <tr class="child impair"> <td>2,029.0</td> <td>600.0</td> <td>2,029.0</td> <td>33.84</td> </tr> <tr class="child "> <td>1,995.1</td> <td>513.9</td> <td>1,995.1</td> <td>30.41</td> </tr> <tr class="child impair"> <td>1,990.6</td> <td>470.1</td> <td>1,990.6</td> <td>12.00</td> </tr>
Wie kann ich daraus jeweils den 4. Wert extrahieren der jeweils zwischen child und childimpair steht und in eine Liste schreiben? Geht das überhaupt mittels Blockly?
Vielleicht kann mir bitte jemand helfen. Danke. -
@manfredhi Ich verstehe nicht warum ihr weiter puzzelt aber dann nutzt halt wenigstens JSONATA wenn es schon angeboten wird.
Hier zum Import:
-
@manfredhi sagte: jeweils den 4. Wert extrahieren der jeweils zwischen child und childimpair steht und in eine Liste schreiben?
Ich ergänze mal den Vorschlag von @mickym
Log:
[4.5,2.9,1.1,0.8,1.3,7.6,28.3,44,50,43.2,33.9,32,33.1,34,37.5,44.7,50,50.7,54,48.2,36.8,33.8,30.4,12]
-
@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" } ]