/ 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
udskrive array of hashes ?
Fra : TDJ


Dato : 03-05-03 09:45

Jeg har et "lille" problem med at forstå referencer til et
array of hashes.

Jeg har (med stor hjælp, tak!) fået brygget et script sammen som
læser DR's programoversigt.

Nu har jeg følgende datastruktur:

@prog {
   {
       "tid" => "09.18",
       "prog" => "Børnetime",
       "kort" => "Program for børn med bamse",
       "lang" => "Bla bal bla bal... la bl abla bla"
   }
   {
       "tid" => "21.00",
       "prog" => "Nyheder",
       "kort" => "Nyhedstimer med sport",
       "lang" => "Bla bal bla bal...sdfasf asdfasfd la bl abla bla"
   }    
}

Problemet er at @prog er en reference, og jeg kan simpelthen ikke
få perl til at "gå over" hver post i mit array. De enkelte poster
i også referencer, til et HASH.

Jeg har læst diverse "understand references in perl" men de giver
ikke nogen simple ned-på-jorden eksempler.

Nogen som kan hjælpe ?

 
 
Adam Sjøgren (03-05-2003)
Kommentar
Fra : Adam Sjøgren


Dato : 03-05-03 10:11

On Sat, 03 May 2003 08:44:53 GMT, TDJ wrote:

> @prog {
>    {
>        "tid" => "09.18",
>        "prog" => "Børnetime",
>        "kort" => "Program for børn med bamse",
>        "lang" => "Bla bal bla bal... la bl abla bla"
>    }
>    {
>        "tid" => "21.00",
>        "prog" => "Nyheder",
>        "kort" => "Nyhedstimer med sport",
>        "lang" => "Bla bal bla bal...sdfasf asdfasfd la bl abla bla"
>    }    
> }

Hvad er det? Pseudokode? Perl? Det giver ikke rigtigt mening, synes
jeg. Når du viser kode frem, så kopier altid fra noget du har prøvet
at køre.

Hvis der stod:

my @prog=(
{
"tid" => "09.18",
"prog" => "Børnetime",
"kort" => "Program for børn med bamse",
"lang" => "Bla bal bla bal... la bl abla bla"
},
{
"tid" => "21.00",
"prog" => "Nyheder",
"kort" => "Nyhedstimer med sport",
"lang" => "Bla bal bla bal...sdfasf asdfasfd la bl abla bla"
},
);

i stedet, kan du så få dit program til at virke?

Du kan så løbe igennem således:

foreach my $program (@prog) {
print "$program->{tid} $program->{prog}\n";
}

(og på 16 andre måder, mindst, sikkert).

Et godt værktøj til at finde rundt i sine data-strukturer er
Data::Dumper. F.ex.:

use Data::Dumper;
print STDERR Dumper(\@prog);

indsat efter definitionen ovenfor, giver flg. uddata:

VAR1 = [
{
'lang' => 'Bla bal bla bal... la bl abla bla',
'prog' => 'Børnetime',
'kort' => 'Program for børn med bamse',
'tid' => '09.18'
},
{
'lang' => 'Bla bal bla bal...sdfasf asdfasfd la bl abla bla',
'prog' => 'Nyheder',
'kort' => 'Nyhedstimer med sport',
'tid' => '21.00'
}
];

Hvis du i stedet havde skrevet som du gjorde oprindeligt
(syntaksrettet):

my @prog={
{
"tid" => "09.18",
"prog" => "Børnetime",
"kort" => "Program for børn med bamse",
"lang" => "Bla bal bla bal... la bl abla bla"
},
{
"tid" => "21.00",
"prog" => "Nyheder",
"kort" => "Nyhedstimer med sport",
"lang" => "Bla bal bla bal...sdfasf asdfasfd la bl abla bla"
},
};

så får du dette uddata fra Data::Dumper:

$VAR1 = [
{
'HASH(0x813aa8c)' => {
'lang' => 'Bla bal bla bal...sdfasf asdfasfd la bl abla bla',
'prog' => 'Nyheder',
'kort' => 'Nyhedstimer med sport',
'tid' => '21.00'
}
}
];

Hvoraf du tydeligt kan se, at der er noget galt; du har misforstået
noget mht. lister og (), {}, [] osv.


Mvh.

--
"Che Guevará" "Ja, så jobbar vi!" Adam Sjøgren
asjo@koldfront.dk

TDJ (03-05-2003)
Kommentar
Fra : TDJ


Dato : 03-05-03 10:21

> Du kan så løbe igennem således:
>
> foreach my $program (@prog) {
> print "$program->{tid} $program->{prog}\n";
> }
>

Hurra hurra hurra !

Det var lige det skridt jeg manglede. TAK!

> VAR1 = [
> {
> 'lang' => 'Bla bal bla bal... la bl abla bla',
> 'prog' => 'Børnetime',
> 'kort' => 'Program for børn med bamse',
> 'tid' => '09.18'
> },
> ];

Det var netop lige det jeg skulle ha' posted.
> Hvoraf du tydeligt kan se, at der er noget galt; du har misforstået
> noget mht. lister og (), {}, [] osv.

Nemlig. Og det har du hjulpet mig med nu.

Tak for det :)

Christian Vandsø (03-05-2003)
Kommentar
Fra : Christian Vandsø


Dato : 03-05-03 11:19

On Sat, 03 May 2003 08:44:53 GMT, TDJ <myicq@gmx_fjernmig_.net> wrote:


>Nu har jeg følgende datastruktur:
>
>@prog {

<snip>

Jeg har været igennem samme øvelse og endte med at vælge XML i stedet
for en obskur datastruktur. Det er faktisk rart at arbejde med.

/Christian

p.s. Et eksempel på dagens TV program i XML kan ses på
http://broothal.dk/fun/tv.xml

Flemming Frandsen (04-05-2003)
Kommentar
Fra : Flemming Frandsen


Dato : 04-05-03 09:34

Christian Vandsø wrote:
>>Nu har jeg følgende datastruktur:
> Jeg har været igennem samme øvelse og endte med at vælge XML i stedet
> for en obskur datastruktur.

Han snakker om en datastruktur i memory ikke en wire protokol.

Du foreslår vel ikke at han gemmer al sin data i en stor xml-streng?


Desuden kan det bemærkes at xml er et format opfundet af folk der bruger
sprog som gør det svært at parse simple formater (læs: folk der ikke
bruger perl) så derfor blev de nødt til at opfinde et kan-alt-format så
de aldrig mere skulle lave et nyt format, men bare genbruge den samme
parser.

Personligt synes jeg at alt for mange bruger xml hvor et simpelt format
kunne bruges, hvis for eksempel man skulle gemme en perl data struktur
til senere så er Storable svært at slå, til debugging er Data::Dumper
meget lettere at læse end xml.

Faktisk er dette (inter-site communikation) det eneste område hvor jeg
synes at xml er en god ide.


> p.s. Et eksempel på dagens TV program i XML kan ses på
> http://broothal.dk/fun/tv.xml

Hmm, kun dagens program, øv:) ... men et godt eksempel på fornuftig brug
af xml.

--
Regards Flemming Frandsen - http://dion.swamp.dk
PartyTicket.Net co founder & Yet Another Perl Hacker


Thorbjoern Ravn Ande~ (04-05-2003)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 04-05-03 20:16

Flemming Frandsen <ff-news.tiscali.dk@partyticket.net> writes:

> Desuden kan det bemærkes at xml er et format opfundet af folk der
> bruger sprog som gør det svært at parse simple formater (læs: folk der
> ikke bruger perl) så derfor blev de nødt til at opfinde et
> kan-alt-format så de aldrig mere skulle lave et nyt format, men bare
> genbruge den samme parser.

Det lyder nu som en historie du selv har fundet på

XML giver platformuafhængighed, tegnsætuafhængighed, og
tidsuafhængighed. Det er ret fikst.

Desværre fylder det en bondegård.
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn

Vlad Tepes (05-05-2003)
Kommentar
Fra : Vlad Tepes


Dato : 05-05-03 21:33

>>>>>> Thorbjoern Ravn Andersen <nospam0000@unixsnedkeren.dk> wrote:
>
> XML giver platformuafhængighed, tegnsætuafhængighed, og
> tidsuafhængighed. Det er ret fikst.

Hva mener du med at XML giver tidsuafhængighed?

--
Vlad

Thorbjoern Ravn Ande~ (05-05-2003)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 05-05-03 22:02

Vlad Tepes <minceme@start.no> writes:

> > XML giver platformuafhængighed, tegnsætuafhængighed, og
> > tidsuafhængighed. Det er ret fikst.
>
> Hva mener du med at XML giver tidsuafhængighed?

At i mine øjne er XML et medie til at bære data mellem programmer.
(Lige som filer, men XML-data behøver ikke befinde sig i en fil).

Ved at bruge XML behøver to dataudvekslende programinstanser ikke befinde
sig på samme platform (som fx visse Windowsprogrammer), bruge samme
underliggende tegnsæt (Mac versus PC), eller køre
på samme tid (som pipes under Unix).

XML kommer til at betyde det samme for data, som ASCII gjorde for
tegnsæt.
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn

Flemming Frandsen (06-05-2003)
Kommentar
Fra : Flemming Frandsen


Dato : 06-05-03 07:52

Thorbjoern Ravn Andersen wrote:
> XML kommer til at betyde det samme for data, som ASCII gjorde for
> tegnsæt.

Well, vi kan jo kun håbe, i mellemtiden er jeg irriteret over alle dem
der tror at en løsning der bruger 8000 linier xslt og 37 timer til at
transformere en xml fil til et andet xml format er bedre end et 7
liniers perl script som gør det samme på 80 sekunder.

--
Regards Flemming Frandsen - http://dion.swamp.dk
PartyTicket.Net co founder & Yet Another Perl Hacker


Thorbjoern Ravn Ande~ (06-05-2003)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 06-05-03 23:27

Flemming Frandsen <ff-news.tiscali.dk@partyticket.net> writes:

> > XML kommer til at betyde det samme for data, som ASCII gjorde for
> > tegnsæt.
>
> Well, vi kan jo kun håbe, i mellemtiden er jeg irriteret over alle dem
> der tror at en løsning der bruger 8000 linier xslt og 37 timer til at
> transformere en xml fil til et andet xml format er bedre end et 7
> liniers perl script som gør det samme på 80 sekunder.

Jeg er helt sikker. Det er så vidt jeg kan se XML her, der og
allevegne.

Mht Perl og XML så var det ikke supergodt dengang jeg kiggede grundigt
på det for et par år siden, da Unicodeunderstøttelsen ikke var særlig
god (jvf asiatiske tegn...). Unicode skulle være blevet meget bedre
siden, og også ens muligheder fra Perl til at behandle data.

Gad vide om jeg skal finde mine gamle "Just another XML
hacker"-scripts frem fra gemmerne. Det var skæg :)

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn

Peter Brodersen (06-05-2003)
Kommentar
Fra : Peter Brodersen


Dato : 06-05-03 23:54

On 05 May 2003 23:01:40 +0200, Thorbjoern Ravn Andersen
<nospam0000@unixsnedkeren.dk> wrote:

>XML kommer til at betyde det samme for data, som ASCII gjorde for
>tegnsæt.

Problemet er blot, at det nogle gange lader til at selv leverandører
ikke tager det seriøst. Vel kan man sidde og gnække, når man bare kan
læne sig tilbage, efter at have slået sin leverandør oven i hovedet
med DTD/XSD'en og sige, at hans data er defekt, men i samme omgang
oplever man måske, at leverandøren ikke engang selv har gidet at
validere, og i nogle tilfælde nærmest bare har genereret sin XML ud
fra en eller anden helt simpel skabelon, hvor der laves lidt
søg&erstat i, uden hensyn til tegnsæt, <>&, etc.

Selvom man ikke behøver at tage diskussionen, så har jeg oplevet at
sidde og vente på at noget bliver fixet i den anden ende - og samtidig
vide, at det sikkert ville have været lettere, hvis leverandøren bare
bankede nogle komma- eller linjeskift-separerede filer sammen.

Misforstå mig korrekt; jeg er glad for XML, og ser mange fordele og
ideer ved XML, men jeg har desværre oplevet alt for mange tilfælde,
hvor firmaer eller lignende skulle behandle XML, at deres
indgangsvinkel blot har været, at det var "en slags tekstfiler",
fremfor at bruge XML-redskaber til at validere, visualisere strukturen
elegant, eller på anden måde hjælpe til behandlingen (på et niveau,
der ligger ud over m#<data>(.*?)</data># , hvilket desværre ikke er
noget særsyn)

--
- Peter Brodersen

Thorbjoern Ravn Ande~ (07-05-2003)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 07-05-03 07:09

Peter Brodersen <usenet@ter.dk> writes:

> Problemet er blot, at det nogle gange lader til at selv leverandører
> ikke tager det seriøst. Vel kan man sidde og gnække, når man bare kan
> læne sig tilbage, efter at have slået sin leverandør oven i hovedet
> med DTD/XSD'en og sige, at hans data er defekt, men i samme omgang
> oplever man måske, at leverandøren ikke engang selv har gidet at
> validere, og i nogle tilfælde nærmest bare har genereret sin XML ud
> fra en eller anden helt simpel skabelon, hvor der laves lidt
> søg&erstat i, uden hensyn til tegnsæt, <>&, etc.

Jeg har skam set det samme - at der var specificeret leverance af XML,
men at det var leverandøren ikke klar over hvad egentlig indebar, og
at det derfor var temmeligt ubrugeligt. Heldigvis kunne man da gøre
noget ved det.

Jeg tror ikke det drejer sig om at "gide validere" men ganske enkelt
at man ikke ved hvad det drejer sig om. Tror man at XML er det samme
som HTML, men bare lidt anderledes, så bliver man overrasket.

> Selvom man ikke behøver at tage diskussionen, så har jeg oplevet at
> sidde og vente på at noget bliver fixet i den anden ende - og samtidig
> vide, at det sikkert ville have været lettere, hvis leverandøren bare
> bankede nogle komma- eller linjeskift-separerede filer sammen.

Her har Windows faktisk en stor fordel. Man kan nemlig sige at
"IE skal kunne indlæse denne XML fil uden at melde fejl i bunden", og
hvis så XML-filen indeholder en DOCTYPE er man faktisk hjemme med
hensyn til validering og alt det der. Så slipper man også for at de
brokker sig over dig, da Microsoft i denne sammenhæng må formodes at
være en neutral part.

Kan det iøvrigt stadig være et problem? Verden flytter sig hurtigt
lige her.

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn

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

Månedens bedste
Årets bedste
Sidste års bedste