Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...