Toon posts:

[perl] geassocieerde datastructuur *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik moet een programma maken in Perl, dat een html-bestand inleest (vb volgt hieronder). Dit html-bestand is een soort van bookmarks-bestand. Daarin moeten we dan de mappen, de namen van de sites en de url eruit halen en opslaan. Dus ik dacht van een hash te gebruiken, met als keys de namen van de url's en als values de url's zelf. Maar nu weet ik niet hoe ik kan bijhouden welke url bij welke map hoort... Zeker niet aangezien een hash, de ingegeven waarde niet in volgorde bijhoudt...

VB:
<DL><P>
<DT><H3>Naam_van_de_folder</H3>
<DL><A HREF="Url_Van_site"> Naam_van_site </A>
<DL><A HREF="Url_Van_site2"> Naam_van_site2 </A>
<DL><A HREF="Url_Van_site3"> Naam_van_site3 </A>
</DL><P>

<DL><P>
<DT><H3>Naam_van_de_folder2</H3>
<DL><A HREF="Url_Van_site4"> Naam_van_site4 </A>
<DL><A HREF="Url_Van_site5"> Naam_van_site5 </A>
<DL><A HREF="Url_Van_site6"> Naam_van_site6 </A>
</DL><P>


De url's en de namen van de url's horen dus ook steeds bij de folder.. Maar ik heb geen idee hoe ik dit kan opslaan, zodat die drie dingen bij elkaar kunnen horen...

Ik hoop dat jullie mij kunnen helpen.
Bedankt alleszins!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hoi, welkom op GoT :)
Lees ook even de verplichte kost, namelijk De P&W FAQ en De "quickstart"
Daarin staan algemene richtlijnen over het posten in P&W. De Algemene GoT FAQ is natuurlijk ook belangrijk

Wat heb je zelf al geprobeerd? Kun je wat code laten zien?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Ok, sorry.

Ik heb wel een beetje code, maar alleen voor het opslaan in een hash (dus de url en de url_naam). Hoe ik dit kan onderbrengen in de folder is mij een groot raadsel,waar ik mijn hoofd al enige tijd over breek, maar nog geen oplossing voor heb gevonden. Ik heb wel wat uitgprobeerd, maar dat heb ik gedeleted omdat het niet werkte...

Hier volgt dan de code voor het in een hash te zetten;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
open (Bookmarks, 'bookmarks.html');

$lijn = <Bookmarks>;
$i = 0;
while ($lijn)
    {
        if ( $lijn =~ /<H3.+>/) #als het een definitielijst is (van de vorm; <H3 ... > )
            { 
                $lijn =~ s/\s+<DT><H3.+\">//;   #Laat "<H3 ID="rdf:#$lsgFe3">" weg voor de naam van de definitielijst 
                $lijn =~ s/<\/H3>//;            #laat "<\H3> weg achter de naam van de definitielijst
                chop $lijn;
                $bookmarks( $onthouVorig ) = $i;
                
            }
        
        if ( $lijn =~ /<DT><A.+>/ ) #als het een bookmark is (van de vorm; <DT><A ... > )
            {
                $hulplijn = $lijn;
                $lijn =~ s/\s+<DT><A.+\">//;    #Laat eerste deel voor de naam van de bookmark weg
                $lijn =~ s/<\/A>//;             #Laat laatste deel na de naam van de bookmark weg
                chop $lijn;
                
                $hulplijn =~ s/.+HREF=\"//;     #Laat het deel voor de url weg
                $hulplijn =~ s/\".+//;          #Laat het deel na de url weg
                chop $hulplijn;
                
                $bookmarks{ $lijn } = $hulplijn;
                
            }



        $lijn = <Bookmarks>;
        

    }



Ik heb er al aan gedacht om in een andere hash bij te houden wat de foldernaam is en hoeveel elementen hij moet bevatten, maar dit lukte niet omdat een hashtabel niet alles in de volgorde bewaart zoals ge het ingeeft.

Of ook om per foldernaam een nieuwe hashtabel te maken. Maar als je dan een ander bestand wilt inlezen, met meer folders, dan weet ik niet hoe ik die hashtabellen kan bijhouden. (bv ik moet zoeken naar een url in alle folder, hoe kan ik er dan voor zorgen dat ik alle folder heb doorlopen)?

En dan dacht ik ook nog aan 2 dimensionale hashes, maar dat gaat niet in perl, voor zover ik gezocht en geredeneerd heb...

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
Je kunt prima 2-dimensionale hashes maken in Perl. Heb je het ueberhaupt geprobeerd?

Denk er trouwens over na of de volgorde van je gegevens van belang is. Wanneer dat het geval is, kun je eigenlijk geen hash gebruiken. Dan is een simpele array (met daarin hashes) weer veel handiger.

Verwijderd

Topicstarter
Ik heb niet geprobeerd nee, aangezien ik niet zo heel veel van perl ken. (hebben maar zeer beknopt les van gehad). En de assistent zei impliciet (bijna expliciet) dat het niet ging in perl.... En die persoon heb ik dan maar op zijn woord geloofd... (Wat precies niet echt slim is |:( )

  • smoking2000
  • Registratie: September 2001
  • Laatst online: 05:42

smoking2000

DPC-Crew

dpkg-reconfigure reality

Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/perl -w

#<DL><P>
#<DT><H3>Naam_van_de_folder2</H3>
#<DL><A HREF="Url_Van_site4"> Naam_van_site4 </A>
#<DL><A HREF="Url_Van_site5"> Naam_van_site5 </A>
#<DL><A HREF="Url_Van_site6"> Naam_van_site6 </A>
#</DL><P>

my $data;
open(F, 'bookmarks.html') || die "Cannot open file ($!)";
while(<F>) {
        $data .= $_;
}
close F;

$data =~ s/\r?\n//g;    # strip carriage returns & newlines

my %folder_url;

# Extract all folders, including headers, urls etc...
my @folders = $data =~ /<DL><P>(.*?)<\/DL><P>/g;
foreach my $folder_data (@folders) {
        # extract header/name from data
        (my $folder_name) = $folder_data =~ /<H3>(.*?)<\/H3>/;

        # extract all urls from folder data
        my @url = $folder_data =~ /(<A HREF=".*?">.*?<\/A>)/g;
        foreach(@url) {
                # extract url & name from url-line
                my ($url, $name) = /<A HREF="(.*?)">(.*?)<\/A>/;

                # add url to name hashkey in hash with folder as key
                $folder_url{$folder_name}{$name} = $url;
        }
}

foreach my $folder (sort keys %folder_url) {
        print "Folder : $folder\n";

        foreach(sort keys %{$folder_url{$folder}}) {
                print "$_ -> $folder_url{$folder}{$_}\n";
        }
}

[ Voor 15% gewijzigd door smoking2000 op 26-02-2004 21:41 ]

| [Folding@Home] Announce: Client monitor voor Linux (fci) | fci-1.8.4 | Fatal Error Group |


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
Op het moment dat een wazige figuur op internet het beter weet dan je docent, kun je overwegen om het vertrouwen in je docent voor onbeperkte duur op te schorten. ;)

smoking2000: leuk dat jij het wel kan, maar zo gaat AquaLord het nooit leren, hé!

[ Voor 21% gewijzigd door Soultaker op 26-02-2004 21:41 ]


  • smoking2000
  • Registratie: September 2001
  • Laatst online: 05:42

smoking2000

DPC-Crew

dpkg-reconfigure reality

Soultaker schreef op 26 februari 2004 @ 21:40:
Op het moment dat een wazige figuur op internet het beter weet dan je docent, kun je overwegen om het vertrouwen in je docent voor onbeperkte duur op te schorten. ;)

smoking2000: leuk dat jij het wel kan, maar zo gaat AquaLord het nooit leren, hé!
Hij kan het nog niet goed, heel weinig zegt ie zelf. Ik heb perl geleerd door de code van mijn toenmalig werkgever door te lezen, dmv de comments, variable names e.d in de code heb ik perl leren begrijpen (en leren programmeren).

Ik dacht op deze wijze een voorbeeld te geven van hoe het kan met zijn voorbeeld, en zo als de spreuk gaat "There's more than one way to do it", dus dit is niet per se de enige goede oplossing.

Ik zie het als een hint / een van de mogelijke oplossingen...
geen 'use strict', dus niet eens een echt goede ;)

[ Voor 7% gewijzigd door smoking2000 op 26-02-2004 22:02 ]

| [Folding@Home] Announce: Client monitor voor Linux (fci) | fci-1.8.4 | Fatal Error Group |


Verwijderd

Topicstarter
Soultaker: In de docent heb ik al eventjes geen vertrouwen meer; ze wist zelfs niet echt hoe een eenvoudige FTP werkte... Bij deze docent vraag ik me echt wel af hoe ze het zo ver heeft kunnen schoppen...

Smoke2000: Dankje voor het voorbeeld :) Ben er echt wel veel mee om perl een beetje beter te leren begrijpe :)

Smoke200 en Soultaker: Het is idd een voorbeeld, maar het is niet zo dat ik het niet helemaal ga leren zo. Er komt nog veel meer bij kijken, maar dit was een klein deelprobleempje, waar ik vast zat. Dit is echter maar een klein deeltje van wat er moet gebeuren, dus ik moet zelf ook nog een heel deel dingen uitzoeken. En ik ben ook nie echt van plan om dit voorbeeld maar klakkeloos over te nemen, want daar leer je idd niets bij. Maar wel door een vb te zien en daar over na te denken en zelf een andere oplossing te zoeken :) (wat ik dus ook ga doen).

Bedankt allemaal nu kan ik wel verder!

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 22-05 14:17
smoking2000 schreef op 26 februari 2004 @ 21:48:
[...]
geen 'use strict', dus niet eens een echt goede ;)
Hoe zou je het dan wel doen met een use strict aan, dat zou ik namelijk graag willen weten :).

zeroxcool.net - curity.eu


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
ZeRoXcOoL schreef op 26 februari 2004 @ 22:09:
Hoe zou je het dan wel doen met een use strict aan, dat zou ik namelijk graag willen weten :).
Precies zo; hij is al helemaal geschikt voor use strict. :P
Pagina: 1