PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : frage zu arry/split



Chakotay
09-08-2006, 11:52
mit

my $String = "test test";
my @array = split(//, $String);
print("@array");
kann ich ja meinen $String nach jeder zeile ein leerzeichen machen lassen
ausgabe:
"t e s t t e s t "

ist es auch möglich das split nich nach jedem zeichen greift sondern nur alle 2 oder 3 zeichen

geplante ausgabe bei 2:
"te st t es t"
oder bei 3:
"tes t t est "
???

wenn ja wie

Romanday
09-08-2006, 15:07
mit
ist es auch möglich das split nich nach jedem zeichen greift sondern nur alle 2 oder 3 zeichen

geplante ausgabe bei 2:
"te st t es t"
oder bei 3:
"tes t t est "
???

Ne, split() macht so etwas nicht. Wenn Du rumflippen willst mußt
du persönlich Hand anlegen.

.. Mit einer Schleife einzeln die Buchstaben durchlaufen, und dann
entsprechend die Leerzeichen setzen. (if/else o. random)

sveni
09-08-2006, 15:15
so sollte das gehen ...



my $string = "test test";
my @array;
# Number of characters at one array pos
my $mod = 2;


my $arrayIndex=-1;
for($i=0; $i < length($string); $i++) {
if($i % $mod == 0) {
$arrayIndex++;
}
$array[$arrayIndex] = $array[$arrayIndex].substr($string, $i, 1);
}

print "@array";



liefert für
für $mod = 1: t e s t t e s t
für $mod = 2: te st t es t
für $mod = 3: tes t t est


grüssle
sveni
...

michael.sprick
09-08-2006, 16:11
Oder via regex:



push(@Array,$&) while $String=~m/.{1,2}/xg;

Chakotay
09-08-2006, 16:58
@sveni danke für die hilfe
hat bei mir aber leider lauter fehler hervorgerufen ?

chakotay@VOYAGER:~/.xchat2/CS-MODULE$ ./a-test.pl
Global symbol "$i" requires explicit package name at ./a-test.pl line 22.
Global symbol "$i" requires explicit package name at ./a-test.pl line 22.
Global symbol "$i" requires explicit package name at ./a-test.pl line 22.
Global symbol "$i" requires explicit package name at ./a-test.pl line 23.
Global symbol "$i" requires explicit package name at ./a-test.pl line 26.
Execution of ./a-test.pl aborted due to compilation errors.
chakotay@VOYAGER:~/.xchat2/CS-MODULE$
trotzdem danke (bin ja für jede hilfe dankbar :-D)

@michael.sprick
hat wie immer zum sofortigen erfolg geführt *glücklich bin*

weisst du sowas einfach oder hast du ne gute geheim seite zum nachschlagen (wenn ja her damit^^)

michael.sprick
09-08-2006, 21:02
Ich hab ein paar gute Bücher im Regal stehen und bereits selber viele Probleme gehabt ;).

Ansonsten ist perldoc immer einen Blick wert ;)

zum Beispiel:

perldoc -f split
perldoc perlre
perldoc perlretut



Zu den Fehlermeldungen:
Vermutlich nutzt Du das Pragma 'strict' - was übrigens auch gut so ist ;)

Ändere die for-Schleife mal so:



for(my $i=0; $i < length($string); $i++)
{
if($i % $mod == 0)
{
$arrayIndex++;
}
...
}
# oder noch besser:

my $i=0;
for($i=0; $i < length($string); $i++)
{
if($i % $mod == 0)
{
$arrayIndex++;
}
...
}

sveni
10-08-2006, 12:56
sorry. mein fehler! Ich hab leider mal wieder das Pragam 'strict' weggelassen.
Dann läuft das natürlich nicht so wie ich das gemacht habe.

danke @michael.sprick ... man sollte sich das gleich angewöhnen, da man
sich so viele, schwierig nachvollziehbare Fehler ersparen kann!