/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Perl-problemer...
Fra : Rander


Dato : 03-04-04 18:24

På forhånd undskyld det lange indlæg, men jeg kunne ikke lige finde ud af
at forklare mit problem uden at inkludere en del kode - men altså:

Jeg holder en webside for en radio-station, og får hver uge tilsendt deres
dansktop i Word-format, som jeg konverterer til ren tekst (med antiword
uden problemer - så langt så godt.

I ren tekst ser en linie f.eks. sådan her ud:

|12|Bar' det ikke går helt galt |Hannibal Henrik Hildorf |12 |5 |10 |

Altså placering, titel, kunstner, placering sidste uge, antal uger og
højeste placering.

Jeg har så lavet et script der konverterer hele dynen til HTML, og det har
virket fint indtil nu.

Der er hver uge fem boblere, hvor linierne ser sådan her ud:

|22|Bar' det ikke går helt galt |Hannibal Henrik Hildorf | | | |

Altså blank i de tre sidste felter. Det konverterer jeg med følgende stump:

if (@lines[($i+$count)] =~ /^\|\s*[0-9]+\s*\|/)
{
@lines[($i+$count)] =~ /^\|\s*.*\s*\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|/;
@titel[$listenr] = $1;
@kunstner[$listenr] = $2;
@sidst[$listenr] = $3;
@uger[$listenr] = $4;
@max[$listenr] = $5;
$listenr++;
}
else
{
@lines[($i+$count)] =~ /^\|\s*\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|/;
@titel[$listenr-1] = @titel[$listenr-1] . $1;
@kunstner[$listenr-1] = @kunstner[$listenr-1] . $2;
@sidst[$listenr-1] = @sidst[$listenr-1] . $3;
@uger[$listenr-1] = @uger[$listenr-1] . $4;
@max[$listenr-1] = @max[$listenr-1] . $5;
$listlength++;
}

else-tingen er for det tilfælde at et af felterne er for langt og bliver
ombrudt i cellen af word, og kommer til at stå på to linier i tekstfilen.
Som det ses er jeg heller ikke interesseret i placeringen (første felt), da
denne alligevel genereres internt...

Og her kommer så mit problem: Hver uge siges farvel til fem numre. Det ser
så sådan her ud:

| |Bar' det ikke går helt galt |Hannibal Henrik Hildorf |22 |0 |0 |

I dette tilfælde kom bobleren altså ikke ind. Koden er så:

if (@lines[($i+$count)] =~ /\|\s*[0-9]+\s*\|/)
{
@lines[($i+$count)] =~ /^\|\s*\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|/;
@titel[$listenr] = $1;
@kunstner[$listenr] = $2;
@sidst[$listenr] = $3;
@uger[$listenr] = $4;
@max[$listenr] = $5;
$listenr++;
}
else
{
@lines[($i+$count)] =~ /^\|\s*\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|/;
@titel[$listenr-1] = @titel[$listenr-1] . $1;
@kunstner[$listenr-1] = @kunstner[$listenr-1] . $2;
@sidst[$listenr-1] = @sidst[$listenr-1] . $3;
@uger[$listenr-1] = @uger[$listenr-1] . $4;
@max[$listenr-1] = @max[$listenr-1] . $5;
$listlength++;
}

Virker fint. Men i denne uge har vedkommende der har skrevet listen
efterladt feltet med højeste placering (sidste felt i linien) blankt
(består altså af tre spaces) - og det opdagede jeg først da jeg kiggede på
top og så, at scriptet har brugt ca. 98% CPU-kraft siden middag i går!

Jeg har prøvet at trace igennem scriptet og fundet ud af, at når den når
linien med det sidste felt uden noget tal, så hopper den konstant til
else-delen og hænger så i et endeløst loop (ovenstående kodestump er pakket
ind i en for-løkke, der tæller op til $listlength)...

Ud af det vil jeg så gætte på at det er mine regulære udtryk der er gale -
jeg har prøvet lidt frem og tilbage, men kan ikke få det til at virke.

Er der en perl-ekspert tilstede?

--
Lars Rander, www.rander.dk ICQ#: 987520 ** Pil ikke ved min adresse **
Sjathelt og beskytter af det svage køn (udnævnt af diktator SEJ 5/6-99)

Den første halvdel af vores liv bliver ødelagt af vores forældre,
den anden af vores børn. (Clarence Darrow)


 
 
Jacob Bunk Nielsen (03-04-2004)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 03-04-04 18:39

Rander <lrNOSPAM@rander.dk> writes:

> Er der en perl-ekspert tilstede?

Måske ovre i news:dk.edb.programmering.perl. Det er der de plejer at
hænge ud.

--
Jacob - www.bunk.cc
Nobody knows the trouble I've been.

Rander (03-04-2004)
Kommentar
Fra : Rander


Dato : 03-04-04 21:59

Sat, 03 Apr 2004 19:38:47 +0200 brugte Jacob Bunk Nielsen 10 linier på at
fortælle dette til dk.edb.system.unix:

>> Er der en perl-ekspert tilstede?
>Måske ovre i news:dk.edb.programmering.perl. Det er der de plejer at
>hænge ud.

Okay, så er der ikke nogen... Den gruppe er jo gabende tom!

--
Lars Rander, www.rander.dk ICQ#: 987520 ** Pil ikke ved min adresse **
Sjathelt og beskytter af det svage køn (udnævnt af diktator SEJ 5/6-99)

Øl er beviset på at Gud elsker os vil vil have os til at være glade. (Benjamin Franklin)


Adam Sjøgren (03-04-2004)
Kommentar
Fra : Adam Sjøgren


Dato : 03-04-04 22:08

On Sat, 03 Apr 2004 22:59:04 +0200, Rander wrote:

>>> Er der en perl-ekspert tilstede?

>> Måske ovre i news:dk.edb.programmering.perl. Det er der de plejer
>> at hænge ud.

> Okay, så er der ikke nogen... Den gruppe er jo gabende tom!

Det er et par uger siden der er nogen der har skrevet noget - det
betyder ikke at der ikke er nogen der læser gruppen; du kan jo prøve
at skrive i den.


Mvh.

--
"Mr. Cotton's... parrot. Same question." Adam Sjøgren
asjo@koldfront.dk

Søg
Reklame
Statistik
Spørgsmål : 177551
Tips : 31968
Nyheder : 719565
Indlæg : 6408836
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste