39. kasu praktikoa: fitxategien edukiak konparatu

      Hurrengo programak fitxategien edukia konparatzeko balio du. Argumentu gisa bi fitxategi jaso, eta lerro komunak bistaratzen ditu. Programak ez du edukia hitzez hitz edo esaldiz esaldi konparatzen, lerroak hartzen ditu aintzat. Lerroen ordenak ez du zertan bi fitxategietan berbera izanik programak detekta ditzan.
      Adibide gisa, demagun fitx1.txt eta fitx2.txt fitxategiak konparatu nahi ditugula, beraien edukia honakoa izanik:

  fitx1.txt             fitx2.txt
 arbela                 belarria
 belarria               haizea
 danba                  danba
 filma                    filma
 gogorra
 haizea
     
Beraien edukia konparatzeko edukiKonp.pl programa erabiliz gero, hauxe
da itzuliko ligukeena:

 >perl edukiKonp.pl fitx1.txt fitx2.txt
 >fitx2.txt 1 lerroan fitx1.txt 2 lerroan:
 belarria
 >fitx2.txt 3 lerroan fitx1.txt 3 lerroan:
 danba
 >fitx2.txt 4 lerroan fitx1.txt 4 lerroan:
 filma
 >fitx2.txt 2 lerroan fitx1.txt 6 lerroan:
 haizea
 >

      Bi fitxategietan errepikatzen diren lerroak soilik bistaratzen ditu, aurretik fitxategi bakoitzean zenbatgarren lerroan agertzen diren ere adieraziz.

    Hona hemen edukiKonp.pl programaren kodea:

edukiKonp.pl
 #!/usr/local/bin/perl
 # Komando-lerrotik bi fitxategi jaso eta lerro komunak
 pantailaratu
 use warnings;
 use strict;
my ($fitxBat, $fitxBi, $lerro1, $lerro2, $l1, $l2,
      %fitxHash);
 $fitxBat = $ARGV[0],
 $fitxBi = $ARGV[1];
 open(FITX1, $fitxBat) ||
       die(“Ezin $fitxBat fitxategia zabaldun”);
 $l1 = 0;
 $l2 = 0;
 # gorde $fitxBat hash egituran
 while ( $lerro1 = <FITX1> ) {
    chomp($lerro1);
    $l1++;
    # gakoa: hitza
    # balioa: agerpenaren lerro zenbakia
    $fitxHash{$lerro1} = $l1;
 }
 close(FITX1);
 open(FITX2, $fitxBi) ||
       die(“Ezin $fitxBi fitxategia zabaldun”);
 # $fitxBi lerroz-lerro zeharkatu eta
 # lerro bakoitza %fitxHash-en aurrez
 # existitzen den begiratu
 while( $lerro2 = <FITX2> ) {
       chomp($lerro2);
       $l2++;
       if( exists $fitxHash{$lerro2} ) {
             # lerro errepikatua
             print (“>$fitxBat $fitxHash{$lerro2}
                  lerroant$fitxBi $l2 lerroan:n”);
             print (“$lerro2n”);
       }
 }
 close(FITX2);

Jaitsi   edukiKonp.pl   fitxategia

Utzi erantzuna

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