Sabine: Wert in einem Array trennen splitten

Hallöchen,

ich habe ein Array mit einem Wert, der eigentlich mehrere hat!
wie kann ich den einen Wert im Array aufsplitten?

MfG

  1. Halihallo Sabine

    ich habe ein Array mit einem Wert, der eigentlich mehrere hat!

    Hä?

    wie kann ich den einen Wert im Array aufsplitten?

    Wie sind die Werte im Array gespeichert? - Als referenzierte Datenstrukturen, oder als
    nichtreferenzierte, skalare Werte? - Äm, OK, lassen wir das...

    perldoc -f split

    Viele Grüsse

    Philipp

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
  2. Hallöchen,

    ich habe ein Array mit einem Wert, der eigentlich mehrere hat!
    wie kann ich den einen Wert im Array aufsplitten?

    MfG

    Mir ist zwar noch nicht ganz klar, wie dein Wert im Array aussieht, aber vielleicht hilft dir mein Beispiel trotzdem.

    Wenn man die Zerichnkette einer Variabel aufsplitten will, da sie aneinander gehängte Werte beinhaltet, wie z.b. 33&&44&&45&&48, kann man aufgrund des Trennzeichens in diesem Fall && die Zeichenketten zerlegt in den Array schreiben:

    @array = split(/&&/,$variabel);

    d.h. jedes Trennzeichen bewirkt eine neue "Zeile" im Array
    0 33
    1 44
    2 45
    3 48

  3. Hallo.

    Hypothetische Situatuion:

    Dein Array sieht so aus: ("a","b","c;d;e","f","g")
    (Das Trennzeichen innerhalb des Werts, "der eigentlich mehrere hat", wäre also das Semikolon.)
    Und du willst an Stelle von "c;d;e" "c","d","e" haben, so dass dein Array nachher so aussieht: ("a","b","c","d","e","f","g")

    Nehmen wir an, das ist das, was du willst, dann müsste sich das Ganze so lösen lassen:

    my @a1 = ("a","b","c;d;e","f","g");
    for(my $i = 0; $i < @a1; $i++)
     {
      next unless($a1[$i] =~ /;/);
      my @a2 = split(/;/,$a1[$i]);
      splice(@a1,$i,1,@a2);
      $i+=@a2;
     }
    print join(",",@a1);

    Das ursprüngliche Array (@a1) wird durchgegangen und es wird nach dem Trennzeichen (;) Ausschau gehalten.
    Enthält ein Eintrag das Trennzeichen, wird er aufgesplittet und die daraus hervorgehende Liste wird an die Stelle des ursprünglichen Eintrags gesetzt.
    Zu guter Letzt, wird noch der Index um die Anzahl der sich im Eintrag befindlichen Einträge erhöht, die müssen ja nicht mehr überprüft werden (kann man aber auch weg lassen).

    Na ja, und wenn man's lieber kompakt (und ohne zusätzliche Indexerhöhung) haben will:

    my @a1 = ("a","b","c;d;e","f","g");
    for(my $i = 0; $i < @a1; $i++){splice(@a1,$i,1,split(/;/,$a1[$i])) if($a1[$i] =~ /;/);}
    print join(",",@a1);

    Gruß
    Norbert

    1. Nochmal hallo.

      my @a1 = ("a","b","c;d;e","f","g");
      for(my $i = 0; $i < @a1; $i++){splice(@a1,$i,1,split(/;/,$a1[$i])) if($a1[$i] =~ /;/);}
      print join(",",@a1);

      Vergiss das, noch einfacher ist:

      my @a = ("a","b","c;d;e","f","g");
      @a = split(/;/,join(";",@a));
      print join(",",@a);

      Gruß
      Norbert