|
| 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/
| |
|
|