Sarrera-datu gisa testu bat jaso eta bertako hitzak karaktere kopuruaren arabera sailkatuko dituen programa nahi dugu.
Datuak gordetzeko hash egitura erabiliko dugu. Honela: gako bezala karaktere kopurua, eta bere balioa array baterako erreferentzia. Erreferentziatutako array honek gakoan adierazitako karaktere kopurua duten hitzen zerrenda gordeko du.
karKopFitx.pl
#!/usr/bin/perl
use strict;
use warnings;
my ($fitx, $lerro, @hitzak, $karKop, %Zerrenda);
$fitx = $ARGV[0];
open (FI, $fitx) ||
die(“Ezin $fitx fitxategia zabaldu!n”);
while ($lerro = <FI>) {
chomp($lerro);
# Banatu lerroa hitzetan.
# Banatzaileak: koma, puntu eta koma, puntua,
# galdera eta harridura ikurrak eta zuriuneak
@hitzak = split(/[,.s?!;]+/,$lerro);
# Lerroko hitz bakoitzeko
foreach my $hitz (@hitzak) {
# Hitzaren karaktere kopurua gorde
$karKop = length($hitz);
# %Zerrenda hash-ean $karkop gakoa existitzen
# ez bada, sortu gako horrentzako
# izengabeko array baten erref.
$Zerrenda{$karKop} = []
if (!exists($Zerrenda{$karKop}));
# Gehitu hitza erreferentziatutako array-aren
# amaieran
push(@{$Zerrenda{$karKop}}, $hitz);
}
}
# %Zerrenda egiturako gakoak ordenatuta lortu
# eta begizta bidez banan-banan pantailaratu
foreach my $luz (sort({$a <=> $b} keys(%Zerrenda))) {
print(“$luz karakteretako hitzak: “);
# $luz luzerako hitzen array-a atzitu eta @hitzak
# array-an gorde
@hitzak = @{$Zerrenda{$luz}};
# @hitzak ordenatu, string bakarrean bildu eta
# pantailan bistaratu
print(join(“, “, sort(@hitzak)));
print(“n”);
}
Programak bi zati nagusi dauzka:
1.- while begizta. Fitxategia lerroz lerro irakurri eta datuak hash egituran gordetzen ditu.
2.- foreach begizta. Hash egituran gordetako datuak ordenatu eta pantailan bistaratzen ditu.
Jaitsi karKopFitx.pl fitxategia