Schrift
[thread]12874[/thread]

string in array zu x zeichen zerlegen

Leser: 1


<< >> 3 Einträge, 1 Seite
Gast Gast
 2008-12-07 19:08
#116938 #116938
Hallo,
ich habe in einer Variable einen Zeichenstrom, in dem Daten zu Blöcken zu 8 Zeichen gespeichert sind.
Nun möchte ich diesen Zeichenstrom erstmal in Blöcke trennen.
Code (perl): (dl )
1
2
3
4
5
6
my $str = "abcdefghjklmnopqrstuvwxy";
my @test = unpack("a8" x (length($str) / 8) , $str);
print "anzahl " . $#test . "\n";
foreach (@test) {
        print "test: $_\n";
}

gibt mir auch folgendes aus:

anzahl 2
test: abcdefgh
test: jklmnopq
test: rstuvwxy

Nun interessiert mich aber das Zeichen (bzw. der Wert) an Position x in diesem Block. Darum habe ich das versucht in ein array mit unsignde char zu zerlegen, was aber nicht funktioniert. Also ich schreibe einfach:

Code (perl): (dl )
my @test = unpack("c8" x (length($str) / 8) , $str);


dann wird mir $str aber in 24 Blöcke zerlegt. Aber warum?

Gruß
Thomas
Gast Gast
 2008-12-07 20:05
#116946 #116946
In zwei Schritten habe ich es jetzt so gemacht:
Code (perl): (dl )
1
2
3
4
5
6
my @data;
my @test = unpack("a8" x (length($str) / 8) , $str);
foreach (@test) {
    my @s = unpack("C" x (length($_) ), $_);
    push (@data, $s[0]); # Erstes Zeichen in Array eintragen
}


Aber das geht doch sicher irgendwie in einem Rutsch.
moritz
 2008-12-07 20:46
#116947 #116947
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Gast+2008-12-07 19:05:57--
Code (perl): (dl )
my @test = unpack("a8" x (length($str) / 8) , $str);


Wenn man sich nicht um die letzten, möglicherweise überstehenden Zeichen
kümmert (wenn der String keine Länge hat, die ein Vielfaches von 8 ist), kann
man das auch einfach als

Code (perl): (dl )
my @test = unpack "(a8)*", $str;


schreiben
<< >> 3 Einträge, 1 Seite



View all threads created 2008-12-07 19:08.