/ 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
join() på NULL-værdier
Fra : Søren Boll Overgaard


Dato : 10-04-01 11:50

Hej

Et spørgsmål angående join().
Efter have hevet en række ud fra en mysql-database med fetchrow_array (og
over i et array (@array)), vil jeg gerne join()'e @array. Det er der som
sådan ikke noget odiøst i. Problemet består i at visse kolonner (og dermed
visse indgange i @array) er NULL. Det resulterer i en "Use of uninitialized
value"-fejl.

Mit spørgsmål er så, er det join() der ikke bryder sig om NULL-værdier?
Og hvorledes håndterer jeg sligt pænest muligt?

--
Søren O.

 
 
Stig H. Jacobsen (10-04-2001)
Kommentar
Fra : Stig H. Jacobsen


Dato : 10-04-01 16:30

On 10 Apr 2001 10:50:24 GMT, Søren Boll Overgaard wrote:

> Mit spørgsmål er så, er det join() der ikke bryder sig om NULL-værdier?

DBI returner undef for NULL værdier og når du kører med
warnings/strict, så er det fy-fy at dereferere variable uden
indhold. Det er uanset om det er join() eller andet der gør det.

> Og hvorledes håndterer jeg sligt pænest muligt?

Sørg for at dit array ikke indeholder undefs - udskift dem med
tomme strenge eller noget før du joiner.

Eller undgå at joine, flyt dit array med håndkraft i et loop
(eller i slices, hvis du ved hvor der er undefs) og skip
elementer hvor !defined() er sand.

Eller slå warnings fra mens du joiner (se perllexwarn(1)) med
noget i retning af:

{
local ($^W) = 1 ;
... join osv ...
}

--
Stig / shj@bigfoot.com

Thomas Martin Widman~ (10-04-2001)
Kommentar
Fra : Thomas Martin Widman~


Dato : 10-04-01 19:04

"Stig H. Jacobsen" <shj@bigfoot.com> writes:

> On 10 Apr 2001 10:50:24 GMT, Søren Boll Overgaard wrote:
>
> > Mit spørgsmål er så, er det join() der ikke bryder sig om NULL-værdier?
>
> DBI returner undef for NULL værdier og når du kører med
> warnings/strict, så er det fy-fy at dereferere variable uden
> indhold. Det er uanset om det er join() eller andet der gør det.
>
> > Og hvorledes håndterer jeg sligt pænest muligt?
>
> Sørg for at dit array ikke indeholder undefs - udskift dem med
> tomme strenge eller noget før du joiner.

Og det behøver ikke at fylde meget, du kan fx bare skrive
print join(';', map { (defined)? $_: '' } @a)
i stedet for
join(';', @a)

/Thomas
--
Thomas Martin Widmann, Universitetsparken 8, 2., -333, DK-8000 Århus C
+45/702 84 406 viralbus@daimi.au.dk http://www.daimi.au.dk/~viralbus
MA stud. (ling-dat); stud.prog.; aktiv radikal; formand/DK-TUG; T4ONF/TK
Der stemmes om sci.lang.scandinavian (se CFV i news.announce.newgroups)!

Søren Boll Overgaard (10-04-2001)
Kommentar
Fra : Søren Boll Overgaard


Dato : 10-04-01 20:18

On 10 Apr 2001 20:04:25 +0200, Thomas Martin Widmann wrote:

>Og det behøver ikke at fylde meget, du kan fx bare skrive
> print join(';', map { (defined)? $_: '' } @a)
>i stedet for
> join(';', @a)

Tak. Just hvad jeg manglede.

--
Søren O.

Ask Bjoern Hansen (11-04-2001)
Kommentar
Fra : Ask Bjoern Hansen


Dato : 11-04-01 11:09

Thomas Martin Widmann <viralbus@humulus.daimi.au.dk> writes:

> Og det behøver ikke at fylde meget, du kan fx bare skrive
> print join(';', map { (defined)? $_: '' } @a)

map er vidst overkill naar

print join ';', grep { defined } @a;

kunne goere det.


- ask

--
ask bjoern hansen - http://ask.netcetera.dk/

Thomas Martin Widman~ (11-04-2001)
Kommentar
Fra : Thomas Martin Widman~


Dato : 11-04-01 11:12

Ask Bjoern Hansen <ask@netcetera.dk> writes:

> Thomas Martin Widmann <viralbus@humulus.daimi.au.dk> writes:
>
> > Og det behøver ikke at fylde meget, du kan fx bare skrive
> > print join(';', map { (defined)? $_: '' } @a)
>
> map er vidst overkill naar
>
> print join ';', grep { defined } @a;
>
> kunne goere det.

Det er korrekt, hvis man bare vil erstatte med '' som i mit eksempel.
Men det er mere fleksibelt, da man fx kan erstatte '' med 'NULL'
(hvilket kan være praktisk i visse sammenhænge).

/Thomas
--
Thomas Martin Widmann, Universitetsparken 8, 2., -333, DK-8000 Århus C
+45/702 84 406 viralbus@daimi.au.dk http://www.daimi.au.dk/~viralbus
MA stud. (ling-dat); stud.prog.; aktiv radikal; formand/DK-TUG; T4ONF/TK
Der stemmes om sci.lang.scandinavian (se CFV i news.announce.newgroups)!

Adam Sjøgren (11-04-2001)
Kommentar
Fra : Adam Sjøgren


Dato : 11-04-01 11:55

On 11 Apr 2001 03:08:56 -0700, Ask Bjoern Hansen wrote:

>> du kan fx bare skrive print join(';', map { (defined)? $_: '' } @a)

> map er vidst overkill naar

> print join ';', grep { defined } @a;

> kunne goere det.

De to gør da ikke det samme?

virgil$ perl -e '@a=(1,undef,2,undef,3,4,"\n");
print join(";", map { (defined)? $_: "" } @a);
print join ";", grep { defined } @a'
1;;2;;3;4;
1;2;3;4;
virgil$


Mvh.

--
"Vi lugter af bukselak Adam Sjøgren
Vi lugter af bukselak" asjo@koldfront.dk

Søren Boll Overgaard (11-04-2001)
Kommentar
Fra : Søren Boll Overgaard


Dato : 11-04-01 13:32

On 11 Apr 2001 03:08:56 -0700, Ask Bjoern Hansen wrote:

> map er vidst overkill naar
>
> print join ';', grep { defined } @a;
>
> kunne goere det.

Såvidt jeg kan se vil den der gøre at der ikke er samme antal felter i alle
linier, idet felter indeholdende undef fjernes fra det array der joines.

Eller er det bare mig?

--
Søren O.

Ask Bjoern Hansen (12-04-2001)
Kommentar
Fra : Ask Bjoern Hansen


Dato : 12-04-01 06:16

boll@fw1.dk (Søren Boll Overgaard) writes:

> > map er vidst overkill naar
> >
> > print join ';', grep { defined } @a;
> >
> > kunne goere det.
>
> Såvidt jeg kan se vil den der gøre at der ikke er samme antal felter i alle
> linier, idet felter indeholdende undef fjernes fra det array der joines.
>
> Eller er det bare mig?

Nej, det er rigtigt. Jeg misforstod dig og troede at det var hvad du
ville have. :)


- ask

--
ask bjoern hansen - http://ask.netcetera.dk/

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

Månedens bedste
Årets bedste
Sidste års bedste