Ergebnis von split auf Nummern begrenzen.

Begonnen von Frank_Huber, 04 Mai 2021, 10:32:34

Vorheriges Thema - Nächstes Thema

Frank_Huber

Moin Moin,

Ich zerlege einen String per Split. String: "Lamp 1: off (6 hours)"
{(split " ","Lamp 1: off (666 hours)")[3]} gibt mir als Ergebnis (666 aus.

Es gibt doch hier bestimmt einen einfachen Weg das auf die numerische "666" zu begrenzen?

Danke & Grüße
Frank

TomLee

Sry, denke das war Blödsinn, chop entfernt normal das letzte Zeichen, keine Ahnung warum das geklappt hat.

So wärs eine Möglichkeit die auf jedenfall korrekt umgesetzt wäre:
{my $v=(split " ","Lamp 1: off (6 hours)")[3];;$v =~ s/^.//;;return $v;;}

Frank_Huber

Danke!
Hab mich schon gewundert wo die Antwort hin ist. :-)
das chop hat funktioniert um aus "(6" "6" zu machen. aus "(666" wurde aber auch nur "6"
Das mit dem RegEx jetzt funktioniert. :-)

DeeSPe

Hier noch eine andere Lösung:
{my $v="Lamp 1: off (6 hours)";;return $v=~/^.+\((\d+)\shours\)$/?$1:""}

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Otto123

Einen hab ich auch :) für den Fall das es am Ende wirklich nur darum geht das erste Zeichen weg zu hacken und es ums Wort und nicht um numerisch gehen sollte:
{my $v=(split " ","Lamp 1: off (6 hours)")[3];;substr $v,1}
Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Kannst du eine Doku verlinken in der man sich zu dem ,1 einlesen kann, meine hab ich bisher noch nicht gelesen gehabt .

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

#7
Ups, wollte das substr nicht sehen, weil du die Klammern weggelassen hast (hatt ich ein return beim überlesen angenommen ). An substr dacht ich erst, aber zu doof gewesen um auf die einfachste Variante zu kommen nur die Startposition anzugeben  ::)