• Publicidad

Tutorial Retro

Aprende Perl

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-08-11 03:37 @192

EJERCICIO 4

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use Data::Dumper;
  5.  
  6. my @linea;
  7.  
  8. my $contador;
  9. my $i;
  10. my $j;
  11. my @long;
  12.  
  13. open( FICHERO, "../ficheros/tabla" );
  14. open( HTML,    ">../ficheros/tabla.html" );
  15.  
  16. while (<FICHERO>) {
  17.  
  18.     my @columna;
  19.     @columna = split;
  20.     $linea[$contador] = \@columna;
  21.     $contador++;
  22.  
  23. }
  24.  
  25. print HTML "<html><body><table border=\"1\">";
  26.  
  27. for ( $i = 0; $i <= $#linea; $i++ ) {
  28.     print HTML "<tr>";
  29.     @long = @{ $linea[$i] };
  30.     for ( $j = 0; $j <= $#long; $j++ ) {
  31.  
  32.         print HTML "<td>" . $linea[$i][$j] . "</td>";
  33.  
  34.     }
  35.  
  36.     print HTML "</tr>";
  37. }
  38.  
  39. print HTML "</table></body></html>";
  40.  
  41. close FICHERO;
  42. close HTML;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Publicidad

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-08-11 03:40 @194

Tengo mis dudas si es la manera correcta de crear un archivo html.
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor explorer » 2020-08-11 05:05 @254

Si el resultado es un archivo en el disco, perfecto. Otra cosa es el estilo que estás usando para crearlo.

Por ejemplo, en la función open estás usando el modo de "dos argumentos":

open (HTML,">../ficheros/tabla.html");

pero hoy en día se recomienda el uso del modo de "tres argumentos":

open (HTML, '>', '../ficheros/tabla.html');

Además, siempre es preferible usar variables escalares para los identificadores de archivo (son más fáciles de pasar a subrutinas):

open (my $HTML, '>', '../ficheros/tabla.html');

Como es una operación de archivos, siempre hay que comprobar que hemos tenido éxito:

open (my $HTML, '>', '../ficheros/tabla.html') or die "ERROR: No puedo crear el archivo resultado: $!\n";

Y ponerlo también en los print y close, pero eso es mucho rollo. Casi mejor usar un módulo que nos ahorre toda esa burocracia: use autodie; Entonces quedaría

open my $HTML, '>', '../ficheros/tabla.html';

(así, sin paréntesis, porque no hay más sentencias a los lados).

Si sabes algo de inglés, deberías leer el libro Modern Perl: http://onyxneon.com/books/modern_perl/m ... letter.pdf

Si el archivo es más complicado, entonces habría que pensar en algún módulo generador de código HTML o de plantillas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-08-11 05:17 @261

Gracias por el aporte. ¡Me lo apunto!

Lo que más dudas me genera es el estilo de crear el archivo html. ¿Por dónde puedo empezar a investigar este punto?
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor explorer » 2020-08-11 07:17 @345

Es que depende de a qué nivel quieras generar ese código HTML.

Si es algo muy pequeño o pequeño, con poner las marcas HTML en el propio código Perl, es suficiente.

Si es algo más complicado, lo recomendado es usar un sistema de plantillas. Bueno... SIEMPRE es recomendable en cualquier situación, porque de esa manera tienes el código HTML separado del código Perl, a costa de tenerlo en dos archivos distintos.

A nivel intermedio, en MetaCPAN encontrarás multitud de módulos para generar HTML. Orientado a objetos, como Widgets, como funciones... muchos. Yo siempre usaba las funciones del módulo CGI, por ejemplo. En el otro extremo tenemos monstruos como HTML5::DOM, por ejemplo.

A nivel profesional... siempre se usa sistemas de plantillas, como Template. Por ejemplo, Mojolicius. De hecho, si quieres entrar a saco con algo verdaderamente útil a nivel profesional, empezaría por ahí.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-08-12 02:08 @131

¡Gracias! ¡Uf!, se me hace un mundo mirar de reojo esas soluciones :)

Aunque parece que el Template es bastante sencillo, creo que empezaré a investigar por ahí.
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-08-12 07:27 @352

EJERCICIO 5

Hacer un programa que extraiga de un array todos aquellos elementos que aparezcan más de una vez, y los coloque en otro array. Hacerlo usando
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-08-12 07:28 @353

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4.  
  5. my @lista1 = ( "Ser", "Ram", "Ral", "Gon", "Emi", "But", "Ser", "Alv", "Ral", "Rod", "Est", "But" );
  6. my @lista2 = @lista1;
  7.  
  8. foreach my $repeticion (@lista2) {
  9.  
  10.     my @listarepetidas = grep( /$repeticion/, @lista1 );
  11.  
  12.     if ( scalar(@listarepetidas) >= 2 ) {
  13.  
  14.         print "este elemento esta repetido:" . $repeticion . "\n";
  15.     }
  16.  
  17. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-08-26 05:44 @281

EJERCICIOS 6

1. Dado un fichero que contenga varias líneas en el formato siguiente: Apellido 1 Apellido 2, Nombre Nota como un número real. Poner los nombres en el formato Nombre Apell1 Apell2 Nota como Calificación (Notable, Sobresaliente, etc.), ordenándolos por orden de nota.

2. Dado un fichero que contenga URL, o direcciones de Internet, generar otro que incluya alrededor de las mismas una referencia del tipo <a href=URL>URL</a>.

3. En un programa en código fuente C o Perl, imprimir las líneas en las que comience un bucle for(), e imprimir la variable de bucle que se usa.

4. En un programa en código fuente C, sustituir todas las constantes definida usando la directiva de precompilación #define por su valor, definido en la misma orden.
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-08-26 05:45 @281

EJERCICIO 6.1

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use autodie;
  5.  
  6. my $nombre;
  7. my $apellido1;
  8. my $apellido2;
  9. my $nota;
  10. my $calificacion;
  11.  
  12. open( FICHERO, "../ficheros/notas.txt" );
  13.  
  14. while (<FICHERO>) {
  15.  
  16.     ( $apellido1, $apellido2, $nombre, $nota ) = /([a-zA-Z]+)\s([a-zA-z]+)\s([a-zA-Z]+)\s(\d\.?\d?)/;
  17.  
  18.     if ( $nota < 5 )  { $calificacion = 'INSUFICIENTE'; }
  19.     if ( $nota == 5 ) { $calificacion = 'SUFICIENTE'; }
  20.     if ( $nota > 5  && $nota <= 7 ) { $calificacion = 'BIEN'; }
  21.     if ( $nota >= 8 && $nota < 10 ) { $calificacion = 'NOTABLE'; }
  22.     if ( $nota == 10 ) { $calificacion = 'SOBRESALIENTE'; }
  23.  
  24.     print "$nombre $apellido1 $apellido2 $calificacion \n";
  25. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

AnteriorSiguiente

Volver a Formación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado