/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
split problem
Fra : Dieter Britz


Dato : 21-01-08 16:25

Hvad er der galt med

@initials = split (/[A-Z][a-z]*/, $firstname);

$firstname er en kæde af bogstaver, og jeg vil spalte kæden op i de
enkelte (mest store) bogstaver; dog med den undtagelse at, hvis der er
et par bestående af et stort og et lille, skal de blive sammen. Det
dækker så tilfældet af initialerne Yu (for russisk Yuri).

Jeg printer $firstname, og det er OK, fx "AB", men når jeg så printer
@initials, kommer der ingenting ud.

?
--
Dieter Britz (britz<at>chem.au.dk)

 
 
Thorbjørn Ravn Ander~ (21-01-2008)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 21-01-08 18:41

Dieter Britz <britz@chem.au.dk> writes:

> $firstname er en kæde af bogstaver, og jeg vil spalte kæden op i de
> enkelte (mest store) bogstaver; dog med den undtagelse at, hvis der er
> et par bestående af et stort og et lille, skal de blive sammen. Det
> dækker så tilfældet af initialerne Yu (for russisk Yuri).
>
> Jeg printer $firstname, og det er OK, fx "AB", men når jeg så printer
> @initials, kommer der ingenting ud.

split er beregnet til at skille felter ad ud fra nogen tegn man egentlig
ikke er interesseret i. Du kan sætte parantes om dit regexp og så få
dem med ud. "perldoc -f split" har nogen gode debugtrick til at få
det på plads.

Prøv den her i stedet:

$ perl -le '$a = "<AYuB>"; print join(":", $a =~ m/[A-Z][a-z]*/g)'
A:Yu:B

--
Thorbjørn Ravn Andersen

Dieter Britz (22-01-2008)
Kommentar
Fra : Dieter Britz


Dato : 22-01-08 09:44

Thorbjørn Ravn Andersen wrote:

> Dieter Britz <britz@chem.au.dk> writes:
>
>> $firstname er en kæde af bogstaver, og jeg vil spalte kæden op i de
>> enkelte (mest store) bogstaver; dog med den undtagelse at, hvis der er
>> et par bestående af et stort og et lille, skal de blive sammen. Det
>> dækker så tilfældet af initialerne Yu (for russisk Yuri).
>>
>> Jeg printer $firstname, og det er OK, fx "AB", men når jeg så printer
>> @initials, kommer der ingenting ud.
>
> split er beregnet til at skille felter ad ud fra nogen tegn man egentlig
> ikke er interesseret i. Du kan sætte parantes om dit regexp og så få

Ah, seføli! Nu forstår jeg hvad problemet er, jeg splittede en række
ingenting ad. Jeg er helt ny til Perl, som i nok kan se. Jeg er i gang
med at konvertere en bibliografi (ca. 1400 items) skrevet i min egen
stil, til BibTex form, og det aktuelle problem var at lave sådan
noget som "Blow JYu" om til "J. Yu. Blow and " osv. Nu kommer jeg
videre.

>
> Prøv den her i stedet:
>
> $ perl -le '$a = "<AYuB>"; print join(":", $a =~ m/[A-Z][a-z]*/g)'
> A:Yu:B

Tak!
--
Dieter Britz (britz<at>chem.au.dk)

Michael Zedeler (21-01-2008)
Kommentar
Fra : Michael Zedeler


Dato : 21-01-08 19:47

Dieter Britz wrote:
> Hvad er der galt med
>
> @initials = split (/[A-Z][a-z]*/, $firstname);
>
> $firstname er en kæde af bogstaver, og jeg vil spalte kæden op i de
> enkelte (mest store) bogstaver; dog med den undtagelse at, hvis der er
> et par bestående af et stort og et lille, skal de blive sammen. Det
> dækker så tilfældet af initialerne Yu (for russisk Yuri).

Prøv at kigge på output når man kører dette her:

print join(':', 1, 2, 3, 10), "\n";
print join(':', split(/_/, 'abc_defg_hiJK_L') ), "\n";
print join(':', split(/[A-Z][a-z]*/, 'Ab_CD_efg_h') ), "\n";

split gør nok ikke det du forventer - kig i manualen (man perlfunc) og
se om ikke der står noget i perlre (man perlre) du kan bruge i stedet.

Mvh. Michael.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste