FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: stefan-dd am 21 Januar 2024, 12:42:37

Titel: Reading splitten
Beitrag von: stefan-dd am 21 Januar 2024, 12:42:37
Ich möchte ein reading aufsplitten.

Reading zum splitten hat 4 Stellen (4542)

Soll in reading a und reding b mit jeweils 2 Stellen getrennt werden.

Mein Versuch:a {(split //,ReadingsVal($name,"test","00"))[0]}Damit bekomme ich aber nur eine Stelle abgeteilt, Wie muss es für 2 Stellen aussehen?

Danke
Titel: Aw: Reading splitten
Beitrag von: MadMax-FHEM am 21 Januar 2024, 12:53:14
Mich wundert, dass du so tatsächlich nur eine Stelle bekommst...
Bzw. was bekommst du?
Immer die erste Ziffer?
Dann liegt das verm. an [ 0 ] ;)

Wenn du zu split liest, dann sollte dir klar sein, dass die Funktion anhand von Trennzeichen trennt.

Wenn deine Ziffern ohne irgendein Trennzeichen aneinander pappen, wie soll split splitten? ;)

Ich würde mal substr nehmen.
Da kannst du angeben, welche Teile du haben willst...
Mit Start und Länge..

Gruß, Joachim
Titel: Aw: Reading splitten
Beitrag von: Ralli am 21 Januar 2024, 12:54:13
Mit regular expression:

my $val = "1234";
$val =~ /(..)(..)/;
my $split1 = $1;
my $split2 = $2;
Titel: Aw: Reading splitten
Beitrag von: betateilchen am 21 Januar 2024, 13:53:48
Zitat von: MadMax-FHEM am 21 Januar 2024, 12:53:14Wenn du zu split liest, dann sollte dir klar sein, dass die Funktion anhand von Trennzeichen trennt.
Wenn deine Ziffern ohne irgendein Trennzeichen aneinander pappen, wie soll split splitten?

Die Frage ist einfach zu beantworten und Deine Ansicht ist grundsätzlich falsch.
Vielleicht solltest Du auch nochmal zu split nachlesen?

Siehe offizielle Dokumentation (https://perldoc.perl.org/functions/split) zur perl Funktion split():

ZitatHowever, this:

my @x = split(//, "abc"); # ("a", "b", "c")
uses empty string matches as separators; thus, the empty string may be used to split EXPR into a list of its component characters.

Beispiel:

sub test {
  my $val = "1234";
  my @a = split(//,$val);
  Debug Dumper \@a;
}

funktioniert völlig einwandfrei und liefert als Ergebnis:

2024.01.21 13:48:48 1: DEBUG>$VAR1 = [
          '1',
          '2',
          '3',
          '4'
        ];
Titel: Aw: Reading splitten
Beitrag von: MadMax-FHEM am 21 Januar 2024, 13:58:09
Trotzdem geht dann was der TE will nicht einfach nur mit split.

Gruß, Joachim
Titel: Aw: Reading splitten
Beitrag von: betateilchen am 21 Januar 2024, 13:59:01
Zitat von: Ralli am 21 Januar 2024, 12:54:13Mit regular expression:

my $val = "1234";
$val =~ /(..)(..)/;
my $split1 = $1;
my $split2 = $2;


Das geht auch einfacher:

my ($a,$b) = $val =~ /(\d\d)(\d\d)/;
Titel: Aw: Reading splitten
Beitrag von: betateilchen am 21 Januar 2024, 13:59:37
Zitat von: MadMax-FHEM am 21 Januar 2024, 13:58:09Trotzdem geht dann was der TE will nicht einfach nur mit split.

Doch, das würde auch gehen. Aber mit regex ist es einfacher.

my @a = split(//,$val);
my $a = "$a[0]$a[1]";
my $b = "$a[2]$a[3]";

Man könnte $a und $b natürlich auch mit jeweils zwei split() Aufrufen und der Angabe des array-Index erzeugen.
Aber das wird dann schwer zu lesen, funktioniert trotzdem problemlos "nur mit split".
Titel: Aw: Reading splitten
Beitrag von: MadMax-FHEM am 21 Januar 2024, 14:00:52
Zitat von: betateilchen am 21 Januar 2024, 13:59:37Doch, das würde auch gehen.
Das würde mich aber jetzt interessieren...
...man lernt ja nie aus.

Gruß, Joachim
Titel: Aw: Reading splitten
Beitrag von: betateilchen am 21 Januar 2024, 14:05:28
Ich wusste, dass diese Frage kommt...
Siehe meinen vorherigen Beitrag, den ich gerade ergänzt habe.
Titel: Aw: Reading splitten
Beitrag von: betateilchen am 21 Januar 2024, 14:10:13
Zitat von: MadMax-FHEM am 21 Januar 2024, 12:53:14Dann liegt das verm. an
  • ;)
Um solche Effekte mit unerwünschten smileys zu verhindern, wenn man eigentlich "0 in eckigen Klammern" haben möchte, gibt es in den Optionen zum Beitrag das Feld, in dem man "Keine Smileys verwenden" ankreuzen kann. Das geht auch nachträglich noch.
Titel: Aw: Reading splitten
Beitrag von: MadMax-FHEM am 21 Januar 2024, 14:13:31
Zitat von: betateilchen am 21 Januar 2024, 14:05:28Ich wusste, dass diese Frage kommt...
Siehe meinen vorherigen Beitrag, den ich gerade ergänzt habe.

Dass es so geht ist klar aber ist halt nicht mit nur split ;)
Trotzdem danke :)

Ja das mit den ungewollten Smilies ;)

Gruß, Joachim
Titel: Aw: Reading splitten
Beitrag von: betateilchen am 21 Januar 2024, 14:51:24
Zitat von: MadMax-FHEM am 21 Januar 2024, 14:13:31aber ist halt nicht mit nur split

sub test {
  my $val = "1234";
  my $a = (split(//,$val))[0].(split(//,$val))[1];
  my $b = (split(//,$val))[2].(split(//,$val))[3];
  Debug "$a $b";
}