PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : perl und split machen mich fertig



shb
26-02-2005, 10:15
hi ich hab ein kleines programm

foreach(@line){
@split=split("=",$line[$i]);
$dat{$split[0]}=$split[1];
chomp(%dat);
$i++;
}
while ( ($owner, $wert) = each %dat ) {
@pcs=split(",",$wert);
$a=0;
foreach(@pcs){
@name=split("|",$pcs[$a]); xxx
print "$name[0]\n";

$a++;
}
print "\n";
die zeile, die ich mit "xxx" markiert hab, an der komme ich einfach nicht weiter ;(
wie man sieht lasse ich das array @lines anhand von = in ein hash schreiben, dann lasse ich die werte von dem hash anhand von , nochmal trennen und das ergebnis von dieser trennung möchte ich nochmal trennen, nur leider sehe ich den wald vor lauter bäumen nicht ;( entweder herhalte ich immer die anfangsbuchstaben oder nix ;( kann mir da bitte jemand weiter helfen?
thx cu SHB

michael.sprick
26-02-2005, 11:17
Du musst das '|' maskieren, wenn Du es als Delimiter nutzen willst... split erhält als ersten Parameter ein Pattern, mit dem ein Patternmatching ausgeführt wird. [] . | ? * usw. kommen daher eine besondere Bedeutung zu.

In Deinem Fall müsstest Du also



my @name = split(/\|/,$pcs[$a]);


machen, um den String am '|' - Zeichen aufzutrennen.

Hier noch ein Hinweis zum Rest des Programms:

foreach
In einer foreach Schleife brauchst du keinen Zähler... im Schleifenblock hast Du immer das aktuelle Array Element in $_ bzw einer von Dir gewählten Variable:



foreach (@lines)
{
print;
#oder
print $_;
#oder auch
my ($Element1,$Element2) = split(/,/);
}

oder auch


foreach my $line (@lines)
{
print $line;
#und so weiter....
}

shb
26-02-2005, 14:25
danke!
darauf hötte ich auch selber kommen können, aber irgendwie hab ich daran überhaupt nicht dran gedacht, ich hab gedacht es ist ein string und fertig. danke für den anderen tipp, ich werds umbauen ;)

thx cu SHB