356speedster Skrevet 1. mars 2005 Del Skrevet 1. mars 2005 Bruker denne koden for å dele opp en tekststreng: $s="$message"; %h = $s=~/\s*(\D+?)\s*(\d+)/g; foreach my $key (keys %h) { $bokstav=$key; $verdi=$h{$key}; print"$bokstav($verdi)<br>\n"; } Eksempelvis så gir den dette resultatet hvis: $message='a10b20c30'; a(10) b(20) c(30) Så over til problemet. Det jeg ønsker er i tillegg at $bokstav skal få en "default" verdi som er a hvis $message ikke inneholder bokstaver Har forsøkt med denne metoden med det funket ikke: $s="$message"; %h = $s=~/\s*(\D+?)\s*(\d+)/g; foreach my $key (keys %h) { if ($key eq ''){ $bokstav='a'; }else{ $bokstav=$key; } $verdi=$h{$key}; print"$bokstav($verdi)<br>\n"; } Noen som har tips til hvordan dette kan løses? Lenke til kommentar
mysjkin Skrevet 1. mars 2005 Del Skrevet 1. mars 2005 Standardmåten å sette en defaultverdi på i perl er $bokstav = $key || 'a'; leses: $bokstav er $key eller 'a'. (En lang forklaring med hvordan perl behandler || (or) operatoren forklarer hvorfor..) Men, jeg tror du har et lite problem her, hvis du ikke har noen bokstaver, vil du ikke få ut noe i %h, så du må ha sjekken litt tidligere og evt stappe infoen inn i %h: %h = $s=~/\s*(\D+?)\s*(\d+)/g; $h{a}=$s unless (%h); foreach my $key... eller for å skrive sjekken på en litt mer c-aktig måte: if (not(%h)){ $h{a}=$s} (unless == if not, for en en linjes sammenlikning kan sjekken settes etter i perl) Håper dette hjelper. M. Lenke til kommentar
356speedster Skrevet 2. mars 2005 Forfatter Del Skrevet 2. mars 2005 Takker musjkin denne linjen $h{a}=$s unless (%h); gjorde susen :-) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå