Hvordan manipulere data i Perl

Perl er designet for å lese og manipulere tekstdata. Det er lett å manipulere sine tre grunnleggende datastrukturer (den skalare, listens og hash) fordi Perl tolk kan skrive den basert på kontekstuelle data. Den hyppigst manipulert dataformat i Perl er kommaseparerte verdier.

Bruksanvisning

1 Åpne datafilen, hvis du ikke leser data fra STDIN eller DATA. Bruk en filehandle som er lett identifiseres:
"open CSVFILE, "test.csv";"

2 Lese dataene. Med små filer, kan du lese alle linjene samtidig. For store filer, bør du lese en linje av gangen, og behandle det før du leser neste linje. Her er vinkelbeslag "magiske syntaks" for å lese alle linjer brukes til å lese alle linjene i matrisen @lines:
"@lines = ;" "@lines = ;"

3 Stripe linjeskift i slutten av hver linje, ved hjelp av kartfunksjonen. De linjeskift er ikke nødvendig, da de er meningsløse når alle linjene leses i Kartet funksjonen vil kalle blokken gikk som det første argumentet for hvert element i listen.:
"map({chomp} @lines);"

4 Splitte linjer. De kommadelte verdier må være delt inn i matriser, som kan oppnås ved å bruke splitt og kartfunksjon. Linjene vil bli gjenforent på en lignende måte når dataene vil bli skrevet ut igjen. "@lines = map({[split /,/]} @lines);"

5 Manipulere data, nå som alle data i minnet er i et lett tilgjengelig format.

6 Loop over dem med foreach søkeordet. Den foreach søkeord kjører en blokk for hvert element i en matrise, tildele til hver matrise element en referanse til standard variabel. Dette eksempelet forutsetter det andre feltet (matrise indeks på 1) inneholder en numerisk verdi, og legger 20 til det. Eventuelle andre manipuleringer, deriblant matte og streng manipulasjoner, kan utføres på en lignende måte:
"foreach (@lines) {
$_->[1] += 20;
}"

7 Slutt dataene før de kan skrives tilbake til en CSV-fil. Feltene må gjenforent med komma:
"@lines = map({join ",",@{$_}} @lines);"

8 Skriv ut dataene. Igjen, vil du løkken over @lines, men denne gangen bare skrive ut hver linje. Her linjene skrives til stdout, men du kan like gjerne åpne en annen fil og skrive ut til at:
"foreach (@lines) {
print $_ . "\n";
}"

Hint

  • Husk at standard variabel $ _ er ikke en listevariabel, men er i stedet en referanse til en listevariabel. For å indeksere matrise, må du først dereference referansen med -> operatør.