Testu elektronikoak aztertzen diharduen lagun batek honako enkargua eman digu: sarrera gisa testu bat jaso eta letra bakoitzaren agerpen kopurua zenbatzen duen programa behar du. Gainera, emaitza bi modutan ordenatuta bistaratzea nahiko luke: lehenbizi karaktere-zerrenda alfabetikoki, bakoitza bere agerpen kopuruarekin; eta segidan agerpen-maiztasunaren arabera ordenatuta, handienetik txikienera.
Kasu gehienetan emaitza pantailan ikusteko baino handiagoa izango denez, egokia litzateke bigarren argumentu bezala fitxategi-izen bat eman eta bertan idatzi ditzala irteerako datuak. Modu honetan:
>perl letraMaiz.pl esaeraZaharrak.txt irteera.txt
Aurreko programa-deiak esaeraZaharrak.txt fitxategiko letren maiztasuna kalkulatu eta irteera.txt fitxategian gordeko ditu. Exekuzioaren ostean, irteera.txt fitxategiaren edukia editorearekin bistaratuz gero:
irteera.txt
—————————————
Alfabetikoki ordenatuta:
—————————————
_ 4
a 2386
b 413
d 425
…
—————————————
Orain maiztasunaren arabera ordenatuta:
—————————————
a 2386
e 1633
i 1179
r 1124
…
>
Hona programa:
letraMaiz.pl
#!/usr/bin/perl
use strict;use warnings;
my ($fitxIn, $fitxOut, $lerro, $kar, %frek, $gako, $balio);
$fitxIn = $ARGV[0];
$fitxOut = $ARGV[1];
# Iturburu eta helburu fitxategiak ireki
open(FITXIN, $fitxIn) ||
die (“Ezin $fitxIn fitxategia zabaldun”);
open(FITXOUT, “>$fitxOut”) ||
die(“Ezin $fitxOut fitxategia zabaldun”);
while ($lerro = <FITXIN>) {
chomp($lerro);
$lerro =~ tr/A-Z/a-z/; # Letra larriak xehe bihurtu
while ($lerro =~ /(w)/gi) {
# Espresio erregularraren aukerak: g globala
# i maiuskula/minuskula ez bereizi
$kar = $1; # parekatu-berria den karakterea
$frek{$kar}++;
}
}
Kasu praktikoak 227
# Iturburu fitxategia itxi
close(FITXIN);
print (FITXOUT “—————————————n”);
print (FITXOUT “Alfabetikoki ordenatuta:n”);
print (FITXOUT “—————————————n”);
foreach $kar (sort (keys(%frek))) {
print (FITXOUT “$kar $frek{$kar} n”);
}
print (FITXOUT “—————————————n”);
print (FITXOUT “Orain maiztasunaren arabera
ordenatuta:n”);
print (FITXOUT “—————————————n”);
# Hurrengo agindua konplexu-samarra da.
# Hash baten gakoak atxikitua duten balioen arabera
# ordenatu, handienetik txikienera
foreach $kar
(sort ({$frek{$b} <=> $frek{$a}} (keys %frek))) {
print (FITXOUT “$kart$frek{$kar}n”);
}
close(FITXOUT);
Jaitsi letraMaiz.pl fitxategia