35. kasu praktikoa: karaktereen maiztasunak testuan

      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

Utzi erantzuna

Zure e-posta helbidea ez da argitaratuko. Beharrezko eremuak * markatuta daude