miércoles, 30 de abril de 2008

Quinto Ejercicio

En este ejercicio vamos a contar todas las veces que se repiten las palabras que aparecen en un fichero y vamos a imprimir las 50 palabras más repetidas.

El código del programa es el siguiente:

use File::Slurp;

@ARGV || die "Uso: $0 <fichero para contar palabras>\n";
my $text = read_file( $ARGV[0] ) ;
my @palabras = split(" ",$text);
my %indice;

for(@palabras){
if($_ =~ /^([a-záéíóúñ])+$/){
$indice{$_}=$indice{$_}+1;
}
}

@ordenadas = sort {$indice{$b} cmp $indice{$a}} keys %indice;

for(0..49){
if($_<=$#ordenadas){
print $_+1,": ",$ordenadas[$_]," ... ",$indice{$ordenadas[$_]}," veces\n";
}
}

Primero dividimos el texto en palabras con la función split.
Luego recorremos el array con las palabras y si concuerdan con la expresión regular que define "una palabra en minúsculas" vamos incrementando el valor de un hash en el que tenemos como clave la palabra en sí y como valor el número de veces que se ha repetido.
A continuación ordenamos las palabras por repeticiones e imprimimos las 50 más frecuentes.

Cuarto Ejercicio

Vamos a escribir un programa que, dado un fichero de entrada, lo divida en párrafos y le añada las correspondientes etiquetas de párrafo en html (<p>Parrafo</p>).

El código del programa es el siguiente:

use File::Slurp;

@ARGV || die "Uso: $0 <fichero a dividir por párrafos>\n";
my $text = read_file( $ARGV[0] ) ;
my @parrafos=split("\r\n\r\n", $text);

for (@parrafos[0..$#parrafos]){
print "<p>\n",$_,"\n</p>\n";
}

Primero dividimos el texto del fichero en párrafos usando la función split la cual, como indica su primer argumento, añadirá una parte cada vez que encuentre 2 saltos de línea. Seguidamente, recorremos el array que contiene las partes e imprimimos en pantalla cada parte entre las mencionadas etiquetas html.

martes, 22 de abril de 2008

Tercer ejercicio

Vamos a escribir un programa que cuente el número de líneas que no estén en blanco en un fichero, y lo escriba en un fichero de salida cuyo nombre se cree a partir del nombre del fichero original, con la extensión lc.

El código de nuestro programa es el siguiente:

my $leyendo = "diablocojuelo.txt";
if ( ! -r $leyendo ) {
die "El fichero $leyendo no es legible\n";
}
open my $fh, "<", $leyendo
or die "No puedo abrir el fichero $leyendo por $!\n";
open my $fh_out, ">", "$leyendo.lc"
or die "No puedo abrir el fichero $leyendo.lc por $!\n";
my $cont = 0;
while (<$fh>) {
chop; chop;
$cont++ if $_;
}
print $fh_out "$cont\n";

close $fh;
close $fh_out;

Hemos usado cierta funcionalidad de perl que habíamos aprendido en el tutorial:
  • $! es una variable que contiene el último mensaje de error del sistema.
  • <$fh> lee la siguiente línea (incluido el \n) del fichero al que apunta $fh
  • $_ es la variable por defecto de perl. Si en algún sitio debería haber una variable y no la hay, entonces se está usando $_
  • chop elimina un caracter del final de la línea

miércoles, 16 de abril de 2008

Segundo ejercicio

Depurando un fichero .pl desde el intérprete de comandos:
> perl -d fichero.pl

Algunos comandos del depurador:
c: continuar
n: siguiente
q: salir
h: ayuda
b [num_linea]: breakpoint en num_linea

Primer ejercicio

Ejecutando un fichero .pl desde la línea de comandos:
> perl fichero.pl

Iniciándose en Perl

Vamos a realizar un curso rápido de perl.
Se podrá realizar un seguimiento del desarrollo de este curso a través de este blog.

Lo primero que hemos hecho ha sido: