13. kasu praktikoa: gurutzegramak

      Ona omen da garunari herdoila kentzeko gurutzegramak egitea. Gurea gogortu xamarra dago honezkero, nahiz eta gogotsu hasi, nekez amaitu ohi ditugu eta. Bukaera aldera beti gelditzen zaigu asmatu ezineko baten bat. Ez aurrera eta ez atzera, holakoetan etxeko ohiko hiztegiek apenas laguntzen diguten.
     Nola bilatu hiztegian, adibidez, lehenengo letra “e” eta azkena “o” daukaten 3 letrako hitzak? Edo “ia” kateaz amaitzen diren 5 karaktereko hitzak? Era honetako bilaketak egiteko hiztegi elektronikoa beharko genuke, eta bilaketak zehazteko lengoaia egokia ere bai.
     Ez daukagu urrutira joan beharrik. Hiztegi elektronikoa eskura daukagu,
xuxen.txt, eta zer hoberik adierazpen erregularrak baino bilaketa-terminoak zehazteko?
     Herdoildutako kaskoari buelta batzuk eman, eta onena neurrira egindako Perl programa idaztea litzatekeela erabaki dugu, programaren sarrera/irteera honela zehaztuz: sarrerako datu gisa bi argumentu, lehena hiztegi-fitxategiaren izena, eta bigarrena bilaketa-terminoa edo -patroia. Irteera, bilaketa-patroiarekin bat egiten
duten hiztegiko hitzen zerrenda izango da.
     Programaren gakoa bilaketa-patroian dago. Nola adierazi gure murriztapenak? Hona modu bat: karaktere ezagunak bere horretan idatzi eta ezezagunak puntu karaktere bidez adierazi. Adibidez: 6 karaktereko hitza “ra” katearekin bukaeran, “….ra”. Edo, “e” letraz hasi eta “a” letraz amaitzen den 4 karaktereko hitza, “e..a”. Puntu karakterea ez dugu besterik gabe aukeratu karaktere ezezagunak adierazteko, ezta? Ez, noski, puntu karakterea berezia da adierazpen
erregularretan, “edozein karaktere” adierazten duen metakarakterea.
Horretxegatik aukeratu dugu hain zuzen ere karaktere ezezagunak adierazteko.

Algoritmoa:
1. Komando-lerrotik jasotako fitxategia ireki
2. Teklatu bidez bilaketa-terminoa jaso, $bilaketa
3. Fitxategiaren $lerro lerro bakoitzeko
      3.1. Baldin ($lerro =~ /^$bilaketa$/i) orduan
            bistaratu $lerro
4. Fitxategia itxi

Programa:
gurutzegramak.pl
 #!/usr/bin/perl
 use warnings;
 use strict;
 print(“Idatzi bilaketarako terminoa: “);
 my $bilaketa = <STDIN>;
 chomp($bilaketa);
 open(FITX, $ARGV[0]) or
      die(“Ezin $ARGV[0] fitxategia ireki!n”);
 my $lerro;
 while ($lerro = <FITX>) {
      # patroiak osorik bat egin behar du $lerro-ko
      # edukiarekin
      if ($lerro =~ /^$bilaketa$/i) {
                 print(“$lerro”);
      }
 }
 close(FITX);

Jaitsi   gurutzegramak.pl   fitxategia

Hobekuntza: exekuzio aldi bakoitzean nahi adina bilaketa burutzen dituen programa (“q” letra sakatu artean iteratzen jarraituko du).

gurutzegramak2.pl
 #!/usr/bin/perl
 use warnings;
 use strict;
 print(“Idatzi bilaketarako terminoa. Amaitzeko, idatzi qn”);
 my $bilaketa = <STDIN>;
 chomp($bilaketa);
 open(FITX, $ARGV[0]) or
      die(“Ezin $ARGV[0] fitxategia ireki!n”);
 my $lerro;
 while ($bilaketa ne “q”) {
       while ($lerro = <FITX>) {
              # patroiak osorik bat egin behar du $lerro-ko
              # edukiarekin
               if ($lerro =~ /^$bilaketa$/i) {
                     print(“$lerro”);
               }
       }       # amaitu da bilaketa
       # fitxategiaren hasierara mugitu
       seek(FITX, 0, 0);
       print(“nnIdatzi bilaketarako terminoa. Amaitzeko,
              idatzi qn”);
       $bilaketa = <STDIN>;
       chomp($bilaketa);
 }
 close(FITX);

Jaitsi   gurutzegramak2.pl   fitxategia

Utzi erantzuna

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