Programita en perl novatos.

Riu

Hola, a ver si alguno me podia explicar porque usar arrays en este ejercicio y porqué. Llevo ya un ratiyo mirando y no tengo ni idea para que cojones se necesita usar arrays, no es que venga a que me lo hagais, sino que me lo expliqueis. A continuación pongo el Enunciado y lo que he escrito de codigo. Un saludo, y gracias de antebraso.

A partir de un fichero que contenga una serie de líneas, crear una página web que incluya cada una de esas líneas en un párrafo, de esta forma
<p>Primera línea</p>
<p>Segunda línea</p>
Y así sucesivamente.
El fichero se pasará o bien por entrada estándar o su nombre como argumento. La salida se escribirá en un fichero llamado parrafos.html.
Envío

Se enviará el programa en Perl y el fichero de entrada y salida en un solo fichero .zip o .tgz.

Obligatorio:

Usar arrays
No cometer Errores en la estructura HTML resultante
Usar las estructuras de control más adecuadas

Mi código sin array:

#!c:perlbinperl.exe

my $narchivo; #nombre de la variable donde vamos a decirle el nombre del fichero que deseamos abrir


print "Escribe el nombre del archivo con su formato para convertir en formato html.n ej: nombre.formato web.txtn"; #Aquí pedimos el nombre del archivo y explicamos como escribirlo#


$narchivo=<STDIN>; #Creamos un flujo de entrada e ingresamos el nombre del archivo y lo guardamos en la variable $narchivo


open(IN, $narchivo); #Abrimos el fichero de entrada
open(OUT, ">parrafos.html"); #enviamos el fichero abierto a otro archivo llamado parrafos.html

while($linea = <IN>) {
     print OUT $linea;
}
close(IN);
close(OUT);

Linea del fichero TXT:

<html><head></head><title>Programación de servidores. Lenguaje PERL.</title><body><center><p1> Este es un programa</p1><p><p2> para el curso</p2><p><p3> de</p3><p><p4> Programación web</p></center></body></html>
DaRk-eXe

Si estas aprendiendo, si te obligan a hacerlo con arrays será apra que aprendas su funcionamiento y utilidad.

Aviso: no tengo npi de Perl.

Pero al hacer un <IN> que supongo que es coger una linea del flujo de entrada.. copiarías todo esto:
1º iteración: <html><head></head><title>Programación de servidores. Lenguaje PERL.</title><body>
2º iteración: <center><p1> Este es un programa</p1><p><p2> para el curso</p2><p><p3> de</p3><p>
3º iteración: <p4> Programación web</p></center></body></html>

Mi duda desde el desconocimiento es: ¿Las etiquetas HTML también las guarda no?, con lo cual, si es así, deberias tratar en cada iteración y quitar las etiquetas pertinentes y dejar toda la frase con <p>frase </p>.

Es decir, de esto:

<html><head></head><title>Programación de servidores. Lenguaje PERL.</title><body>

a:

<p>Programación de servidores. Lenguaje PERL.</p>

Para eso usas vectores, lo almacenas en 1 vector y lo tratas hasta tener el resultado deseado y luego lo escribes en el fichero pertinente.

1 respuesta
Riu

#2 se usar vectores, lo que no entiendo es para que..., no es necesario para el programa. Voy a coger el archivo txt y lo voy a meter en un array y lo voy a pasar mediante un bucle al fichero destino y au, cuando lo consiga lo pego... porque vaya liada con la puta sintaxis que me tiene loco xd

cabron

Yo creo que estás haciendo mal el ejercicio, yo leo el enunciando y entiendo que el archivo que vas a abrir tiene esto:

Línea 1
Línea 2
Línea 3
...

Línea n

Y tienes que generar un archivo html con cada línea en un párrafo, y tú lo que estás haciendo es tener en el archivo el html ya hecho, y lo copias línea a línea en otro archivo...

1 1 respuesta
Riu

#4 se que lo que hago esta mal, yo también lo entendi asi, pero no se como hacerlo, donde pongo la estructura html en el programa, en el fichero?, si es en el programa, como inserto las lineas que me pide?, nose seguramente sera como tu dices, pero no me queda claro y en el foro del ejercicio no lo dejan claro tampoco, ni el mismo profesor.... solo me dice que esta mal, porque faltan arrays y . por lo tanto creo que lo de poner la estructura a parte del archivo no es necesiario... de todas maneras me gustaria saber como hacerlo, porque me interesa aprender perl...

1 respuesta
cabron

#5

Hacer la estructura html es muy sencillo, haces print de :

<html><head></head><title>Programación de servidores. Lenguaje PERL.</title><body>

antes de leer cada línea dle fichero, y otro print de :

</body></html>

Cuando termines de leer el fichero.

Entre medias lees el contenido, y por cada línea que haya imprimes:

<p> + contenido de la línea + </p>

Lo de usar arrays, lo único que se me ocurre es que en lugar de leer el archivo línea a línea, lo leas todo de golpe en un array, y luego recorras el array para imprimirlo, añadiendo en ese momento los

<p> </p>

, prueba con algo así:

 @array = <IN>
1 respuesta
C

Es más eficiente procesar el fichero con while como ya lo tienes echo que leerlo entero a un array.

Usando arrays yo haría algo así:

#!/usr/bin/env perl

use warnings;
use strict;

my @data = @ARGV ? <ARGV> : <>; 

for my $line ( @data ) { 
    chomp $line;
    if ( $line =~ m/\S/ ) { 
        $line =~ s|^|<p>|;
        $line =~ s|$|</p>|;
    }   
printf qq|%s\n|, $line; }

Mi prueba: tanto con el fichero como argumento, como introduciendo las líneas desde STDIN.

$ cat infile
Línea 1
Línea 2
Línea 3
Línea n
$ perl script.pl infile
<p>Línea 1</p>
<p>Línea 2</p>
<p>Línea 3</p>
<p>Línea n</p>
$ perl script.pl
hola

mundo
html
<p>hola</p>

<p>mundo</p>
<p>html</p>
1 respuesta
Riu

#6 muchas gracias, #7 gracias también, creo que tu respuesta es la que andaba buscando ;)

Usuarios habituales