14. kasu praktikoa: hitz-egiturak

      Egitura konkretuko hitzak bilatuko dituen programa eskatu digute esperimentu linguistiko baterako. Adibidez: K B K B idatziz gero, Kontsonantea-Bokala-Kontsonantea-Bokala egitura duten hitzak bilatu beharko lituzke programak: pala, sute, pila, etab.
      Sarrerako datu gisa, hitz-egitura eta bilaketa-fitxategia behar ditugu, horiek programan jasotzeko bi bide ezberdin erabiliko ditugularik: patroiaren egitura komando-lerroaren bitartez, letra larriz eta letren artean hutsune bat utziz, modu honetan: B K B (Bokala-Kontsonantea-Bokala). Bilaketa-fitxategia, berriz, programak berak eskatuko du abiatzean.
      Programaren dei posible bat hauxe litzateke:

>perl egitura.pl K B K K B
Zein fitxategitan egingo dut bilaketa?
xuxen.txt
bable
bafle
balbe

zurtu
Zutza
zuzki
>

Programak bi egiteko nagusi dauzka:
1. Komando-lerrotik jasotako egiturarekin bilaketa-patroia eraiki.
2. Sarrera estandarretik jasotako fitxategian bilaketak egin.

Algoritmoa:
1. Komando-lerrotik jasotako egiturarekin patroia eraiki
     1.1. Jasotako $arg argumentu bakoitzeko
           1.1.1. Baldin $arg berdin “K” orduan
                    $patroia patroiari kontsonantea gehitu
           1.1.2. Bestela, baldin $arg berdin “B” orduan
                    $patroia patroiari bokala gehitu
           1.1.2. Bestela bistaratu “argumentu okerra”
2. Sarrera estandarretik jasotako fitxategian bilaketak egin
     2.1. Teklatutik jasotako fitxategia ireki
     2.2. Fitxategiaren $lerro lerro bakoitzeko
           2.2.1. Baldin ($lerro =~ /$patroia/i) orduan
                bistaratu $lerro
     2.3. Fitxategia itxi

Programa:

egitura.pl
 #!/usr/bin/perl
 use warnings;
 use strict;
 my $konts = “[bcdfghjklmnñpqrstvwxz]”;     # kontsonanteak
 my $bok = “[aeiou]”;                       # bokalak
 my $patroia = “b”;    # hasieratu patroia hitz-mugarekin
 foreach my $arg (@ARGV) {
      if ($arg eq “B”) {
                 # kateatu bokala patroiari
                 $patroia = $patroia . $bok;
      }
      elsif ($arg eq “K”) {
                 # kateatu kontsonantea patroiari
                 $patroia = $patroia . $konts;
      }
      else {
                 die(“Patroi egitura okerran”);
      }
 }
 $patroia = $patroia . “b”;   # hitz-muga kateatu bukaeran
 print(“Zein fitxategitan egingo dut bilaketa?n”);
 my $fitx = <STDIN>;
 open(FITX, $fitx) or
      die(“Ezin $fitx fitxategia zabaldu!n”);
 my $lerroa;
 while ($lerroa = <FITX>) {
      # i modifikatzailea: letra larri/xehe bereizketarik ez
      if ($lerroa =~ /$patroia/i) {
             # bat egiten duen string puska soilik bistaratu
             print(“$&n”);
       }
 }
 close(FITX);

Jaitsi   egitura.pl   fitxategia

Utzi erantzuna

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