• Publicidad

Impresión por columnas

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Impresión por columnas

Notapor Josh2701 » 2011-11-01 16:10 @715

Hola, alguien podría decirme como puedo imprimir por columnas. En el código como se puede ver, tengo 4 líneas, pero en una columna debería ir la línea 0, en la segunda columna las líneas 1 y 2 y en la tercer columna la línea 3, tales líneas provienen de un archivo, para ejemplos prácticos sólo puse esas, pero la idea es que tenga tantas columnas como cambie el aid[5].

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. sub trim($);
  4. $va="inicio";
  5. $contacol=1;
  6. $cuental=0;
  7.  
  8.         ##$linea0="3373.51.10.8.1.2.1 : OBJECT IDENTIFIER: .iso.org.dod.internet.private.enterprises.3373.51.14.901";
  9.         ##$linea1="3373.51.10.8.1.4.1 : OCTET STRING- (ascii):     29;2;optional board ;PPI 29;5";
  10.         ##$linea2="3373.51.10.8.1.4.1 : OCTET STRING- (ascii):";
  11.         ##$linea3="3373.51.10.8.1.1.1 : INTEGER: 1";
  12.        
  13.         @c=split(/:+/, $linean);
  14.        
  15.         @aid=split('\.', $c[0]);
  16.                
  17.         if ($va eq $aid[5])
  18.                 {
  19.                 $cambio=0;
  20.                 }
  21.         elsif ($va eq "inicio")
  22.                 {
  23.                 $va=$aid[5];
  24.                 $cambio=0;
  25.                 }
  26.         else
  27.                 {
  28.                 $cambio=1;
  29.                 $contacol+=1;
  30.                 print "\n";
  31.                 $va=$aid[5];
  32.                 }
  33.  
  34.         use Switch;
  35.         switch (trim($c[1]))
  36.                 {
  37.                 case "INTEGER"
  38.                         {
  39.                         print "$c[0]i ". trim($c[2]). "\n";
  40.                         }
  41.                 case "OBJECT IDENTIFIER"
  42.                         {
  43.                         print "$c[0]oi ". trim($c[2]). "\n";                   
  44.                         }
  45.                 case "IpAddress"
  46.                         {
  47.                         print "$c[0]ia ". trim($c[2]). "\n";   
  48.                         }
  49.                 case "OCTET STRING- (ascii)"
  50.                         {
  51.                         print "$c[0]ocs ". trim($c[2]). "\n";
  52.                         }
  53.                 case "Timeticks"
  54.                         {
  55.                         print "$c[0]tm ". trim($c[2]). "\n";   
  56.                         }
  57.                 }
  58.  
  59. sub trim($)
  60. {
  61.         my $string = shift;
  62.         $string =~ s/^\s+//;
  63.         $string =~ s/\s+$//;
  64.         return $string;
  65. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Gracias
Josh2701
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2011-11-01 15:56 @705

Publicidad

Re: Impresión por columnas

Notapor explorer » 2011-11-01 16:36 @733

Bienvenido a los foros de Perl en español, Josh2701.

Comentarte varias cosas: se ve que no muestras el programa completo, porque faltan las líneas que muestren cómo leer el fichero que quieres analizar.

Por favor, no uses el módulo Switch. Tiene errores muy graves, te puede explotar en la cara cuando menos te lo esperes. Es mucho mejor usar given/when que está disponible a partir de Perl v5.10. Además, fue marcado como obsoleto en Perl v5.12, y completamente eliminado en el Perl v5.14.

No entiendo lo de la cadena "inicio". Quizás lo estás usando como una bandera, para indicar los cambios del sexto campo de la primera parte de cada línea. ¿Es así?

Dices que quieres imprimir el resultado en columnas, pero no dices cómo han de estar separadas esas columnas.

La recomendación, en estos casos, es ir guardando en un array o en variables escalares, la información que vamos leyendo, y cuando estamos seguros de que tenemos una nueva línea 0, o hemos llegado al final del fichero, en ese momento podemos sacar toda la línea con todos los nuevos campos.

Si pudieras poner un ejemplo del fichero de entrada, y un ejemplo de cómo tendría que quedar la salida, sería perfecto.
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


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 27 invitados