Tom: Splitten ohne Zeichen?

Hi,

gibt es in Perl eine Möglichkeit, ohne Zeichen zu splitten? Also z.B. dass von einer Zahl (z.B. 32549) jede Ziffer als Skalar eines Arrays gesplittet wird?
Bzw. kann man es auch machen, dass nach jeder 2. Ziffer (oder 3., 4. ...) splittet?

Danke & viele Grüße
Tom

  1. Hi!

    gibt es in Perl eine Möglichkeit, ohne Zeichen zu splitten? Also z.B. dass von einer Zahl (z.B. 32549) jede Ziffer als Skalar eines Arrays gesplittet wird?
    Bzw. kann man es auch machen, dass nach jeder 2. Ziffer (oder 3., 4. ...) splittet?

    Mit split() geht das meines Wissens nicht. Ich wuerde das ungefaehr so machen:

    $string = "32549";
    push(@chars, $1) while($string =~ s/^.//);

    bzw. um immer zwei Zeichen abzusplitten:

    push(@twochars, $1) while($string =~ s/^..//);
    push(@twochars, $string) if ($string);   # falls eine Ziffer uebriggeblieben, diese auch noch pushen

    Calocybe

    1. Hi Calocybe,

      also ich hab das jetzt mal so probiert (hoffentlich hab ich das richtig verstanden):

      open(ID,"$root/dat/$Q{'id'}.txt");  
      $countvalue = <ID>;  
      close(ID);  
      push(@chars,$countvalue) while($countvalue =~ s/^.//);  
      print "Content-type: text/html\n\n";  
      foreach $line (@chars){  
      

      print "$line<br><br>\n";
      }

      in der Datei, die ausgelesen wird, steht z.B. der Wert "12345". Mit dem obenstehenden Code wird folgendes ausgegeben:

      ---

      2345

      345

      45

      5

      ---

      keine Ahnung, ob das an mir liegt, oder es einfach nicht der richtige Code für so eine Anwendung ist...

      danke & viele Grüße
      Tom

      1. Hi Tom!

        Sorry, ich hatte da einen Fehler gemacht (und diesen dann weiter kopiert):

        Nochmal mein Text:

        push(@chars, $1) while($string =~ s/^.//);

        Muss heissen:
        push(@chars, $1) while($string =~ s/^(.)//);

        Durch die vergessenen Klammern um den Punkt wurde $1 nicht definiert - das konnte natuerlich nichts werden.

        Analog statt

        push(@twochars, $1) while($string =~ s/^..//);

        push(@twochars, $1) while($string =~ s/^(..)//);

        Ansonsten ist der Code ok. Tausche einfach nochmal die push-Zeile aus.

        Calocybe

        1. Hi Calocybe,

          scheint immer noch nicht zu funktionieren. Ich werd's morgen nochmals ausprobieren, ich bin jetzt wohl schon zu müde dafür :)
          Schon mal danke für Deine Hilfe

          Gruß
          Tom

  2. Also z.B. dass von einer Zahl (z.B. 32549) jede Ziffer als Skalar eines Arrays gesplittet wird?

    Das geht, und zwar mit der naheliegendsten Konstruktion:

    $wert = 32549;
    @array = split (//, $wert);
    foreach my $feld (@array)
            {print "Feld: '$feld'\n"; }