Vraag & Antwoord

Programmeren

Perl: foreach loop en elementen opslaan

Anoniem
None
6 antwoorden
  • Ik heb een foreach loop met de elementen van $key:

    foreach $key (keys(%hash))

    Nu wil ik alle ellementen van deze loop opslaan in een array zodat ik ze later kan matchen met strings. Hoe doe ik dat?

    Bedankt
  • zoiets?

    foreach $key (keys(%hash)) {
    unshift @elementen,$key;
    }

    Maar waarom foreach?

    @elementen = keys(%hash);
  • oops, je hebt gelijk. In een foreach loop zit er eigenlijk al een array ingebakken. :oops:

    Ik heb een tekstbestand. Ik heb daar bepaalde woorden uitgehaald met hashes en nu dus opgeslagen in een array. Die woorden wil ik weer gaan matchen met alle regels van het tekstbestand. Dit lukt me niet, omdat ik de while loop al heb afgesloten.

    Een voorbeeld:

    [code:1:5707ad1792]
    while ($line = <FILE>) {
    if ($line =~ m/\b$word1\b/i) {
    $hash1{$line}++;
    }
    }

    @elements = keys(%hash1);

    [/code:1:5707ad1792]

    Hoe kan ik theoretisch de @elements gaan matchen met de lines in het tekstbestand nadat de while loop gesloten is?
  • Volgens mij doe je het veel te ingewikkeld. Kun je nog eens kort omschrijven wat je precies wilt doen?

    Als je het zo wilt houden, kun je dat matchen net zo goed in de bestaande loop opnemen.
  • Ik heb een wiskundige formule waarbij ik de statistiek van een tekstbestand kan bepalen. Nu zal ik je niet lastig vallen met die formule.

    kort samengevat:
    er zijn bijv. in totaal 10 regels (in mijn bestand vele duizenden). 6 regels bevatten woord X. Deze 6 regels met woord X wil ik dan weer opbreken in losse woorden, bijv. 15 woorden in totaal. Al deze 15 woorden wil ik met dezelfde methode bij woord X met de hele tekst matchen. Dan wil ik per woord kijken hoeveel regels van de totale tekst dat woord bevatten. Dat wil ik dus voor elk woord bijhouden. Ik heb van woord X een argument gemaakt wat de gebruiker moet invoeren.

    Ingewikkeld, ja ik weet het. Ik krijg er hoofdpijn van.
  • Ach, je moet het gewoon in kleine stapjes doen. Als ik het goed begrijp:

    1. inlezen regels
    2. checken op aanwezigheid woord x
    3. indien ja, in array plaatsen
    4. regels in array splitsen in woorden
    5. deze woorden vergelijkbaar aan 2. matchen aan de hele tekst
    6. frequentie van deze woorden tellen

    Je moet dus een aantal keren matchen. Om te matchen aan de gehele tekst, zul je dus bij het inlezen van de regel, ook de gehele tekst in een string moeten plaatsen. Of het inlezen moeten herhalen. Het eerste vreet geheugen, het tweede vreet tijd. Ik denk dat het tweede wel eens sneller zou kunnen zijn.

    Nog een puntje: gaan het echt om regels, en niet om zinnen?

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.

Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord