• Publicidad

Completar tabla informe meteorológico

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

Completar tabla informe meteorológico

Notapor lis » 2017-05-04 12:37 @567

Hola, amigos del foro.

Tengo que generar un reporte meteorológico para 7 días (en el ejemplo que adjunto del resultado que quiero obtener solo muestro dos días para abreviar).

Genero el primer día bien (claro que sin ningún tipo de bucle) pero al momento de hacerlo para un segundo o más días solo me enredo más y por eso acudo a ustedes.

Ocupo Perl y Latex para generar el documento final. La idea es que me pregunte por el día 1 e ir completando los datos de la columna 1 y así sucesivamente. Mí código es este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. # use strict;
  4. # use warnings;
  5.  
  6. use Term::Menu;
  7. use Term::ANSIColor;
  8.  
  9. use Time::Local;
  10. use POSIX qw/strftime/;
  11.  
  12. # Obtenemos la fecha actual desglosada
  13. my ($s, $min, $h, $d, $m, $y) = localtime();
  14.  
  15. my $time = timelocal $s, $min, $h, $d, $m, $y;
  16. my $d0   = strftime "%A %d de %B de %Y", localtime $time; $d0=ucfirst($d0);
  17. my $d1   = strftime "%d %b.", localtime $time;
  18. my $d2   = strftime "%d %b.", $s, $min, $h, $d + 1, $m, $y;
  19. my $d3   = strftime "%A\\\\%d %b.", $s, $min, $h, $d + 2, $m, $y;  $d3=ucfirst($d3);
  20. my $d4   = strftime "%A\\\\%d %b.", $s, $min, $h, $d + 3, $m, $y;  $d4=ucfirst($d4);
  21. my $d5   = strftime "%A\\\\%d %b.", $s, $min, $h, $d + 4, $m, $y;  $d5=ucfirst($d5);
  22. my $d6   = strftime "%A\\\\%d %b.", $s, $min, $h, $d + 5, $m, $y;  $d6=ucfirst($d6);
  23. my $d7   = strftime "%A\\\\%d %b.", $s, $min, $h, $d + 6, $m, $y;  $d7=ucfirst($d7);
  24.  
  25.  
  26. #-------------CONDICION-----------------------------------
  27. print "\n";
  28. # colored(print "Comencemos con el Día $day\n", 'bold red')
  29. print color('bold white');
  30. print "Comencemos con el Día 1\n";
  31. print color('reset');
  32.  
  33. my $prompt = Term::Menu->new(
  34.     beforetext      => 'Elija una de las siguientes opciones de condición:',
  35.     aftertext       => 'Seleccione un número: '
  36. );
  37.  
  38. my $cond = $prompt->menu(
  39.     Despejado               => [ 'Despejado'              , 1 ],
  40. );
  41.  
  42. my $d1c1="\\multirow{X}{*}{\\shortstack{$cond}}";
  43.  
  44. if ($d1c1 =~ s/(_.*?)/\\\\/ or $C =~ s/(.*?_.*?)_/$1 /) {$d1c1=~ s/X/2/g;}
  45. if ($d1c1 =~ s/(_)/ /) {$d1c1=~ s/X/2/g;}
  46. elsif($d1c1 !~ /^\_*$/) {$d1c1 =~ s/X/-1/g;}
  47.  
  48. #-------------PRECIPITACIÓN-------------------------------
  49. print "\n";
  50. print "Ingrese la Cantidad de precipitación: ";
  51. my $prec1=<STDIN>; chop($prec1);
  52. print "\n";
  53.  
  54. print "Ingrese el porcentaje de probabilidad: ";
  55. my $prob1=<STDIN>; chop($prob1);
  56. print "\n";
  57.  
  58. my $d1p1="\\multirow{2}{*}{\\shortstack{$prec1\\\\$prob1\\%}}";
  59.  
  60. if ($d1p1 =~ /--/){$d1p1="\\multirow{2}{*}{\\shortstack{--}}";}
  61.  
  62. #-------------IINTENSIDAD----------------------------------
  63. # print "\n";
  64. my $prompt = Term::Menu->new(
  65.     beforetext      => 'Ingrese la intensidad de precipitación:',
  66.     aftertext       => 'Seleccione un número: '
  67. );
  68. my $answerint = $prompt->menu(
  69.     Debil    => [ 'Débil'   , 1 ],
  70.     Moderada => [ 'Moderada', 2 ],
  71.     Fuerte   => [ 'Fuerte'  , 3 ],
  72.     No_hay   => [ 'No hay'  , 4 ],
  73. );
  74.    
  75. $answerint =~ s/Debil/Débil/;
  76.  
  77. my $d1i1="\\multirow{2}{*}{\\shortstack{$answerint}}";
  78.  
  79. if ($answerint eq 'No_hay'){$d1i1="\\multirow{2}{*}{\\shortstack{--}}";}
  80.  
  81. #-------------HORARIO-------------------------------------
  82.  
  83. print "\n";
  84. print "Ingrese la hora estimada de inicio: ";
  85. my $i1=<STDIN>; chop($i1); if ($i1 < 10) { $i1 = "0" . $i1; }
  86. print "\n";
  87. print "Ingrese la hora estimada de término: ";
  88. my $t1=<STDIN>; chop($t1); if ($t1 < 10) { $t1 = "0" . $t1; }
  89. print "\n";
  90.  
  91. # my $d1h1="\\multirow{2}{*}{\\shortstack{\$\\sim\$$i1 a $t1 hrs}}";
  92. my $d1h1="\\multirow{2}{*}{\\shortstack{$i1 a $t1 hrs}}";
  93.  
  94.  
  95. if ($d1h1 =~ /--|-/){$d1h1="\\multirow{2}{*}{\\shortstack{--}}";}
  96.  
  97. #-------------TEMPERATURA---------------------------------
  98. # print "\n";
  99. print "Ingrese la temperatura mínima: ";
  100. my $tmn1=<STDIN>; chop($tmn1);
  101. print "\n";
  102. print "Ingrese la temperatura máxima: ";
  103. my $tmx1=<STDIN>; chop($tmx1);
  104. print "\n";
  105.  
  106. #-------------VIENTO--------------------------------------
  107. print "\n";
  108. my $prompt = Term::Menu->new(
  109.     beforetext      => 'Elija una de las siguientes opciones de dirección del viento:',
  110.     aftertext       => 'Seleccione un número: '
  111. );
  112.  
  113. my $answervto = $prompt->menu(
  114.     Norte    => [ 'Norte'   , 1 ],
  115. );
  116.    
  117. print "\n";
  118. print "Ingrese la magnitud promedio del viento: ";
  119. my $mag1=<STDIN>; chop($mag1);
  120. print "\n";
  121.  
  122. #-------------HUMEDAD-------------------------------------
  123. # print "\n";
  124. print "Ingrese la humedad relativa: ";
  125. my $hr1=<STDIN>; chop($hr1);
  126. print "\n";
  127.  
  128. my $d1hr1="\\multirow{2}{*}{\\shortstack{$hr1\\%}}";
  129.  
  130.  
  131. #-------------VISIBILIDAD---------------------------------
  132. # print "\n";
  133. my $prompt = Term::Menu->new(
  134.     beforetext      => 'Por favor, elija una de las siguientes opciones de Visibilidad:',
  135.     aftertext       => 'Pulse un número: '
  136. );
  137. my $answervis = $prompt->menu(
  138.     Nula              => [ 'Nula'              , 1 ],
  139.     Limitada          => [ 'Limitada'          , 2 ],
  140.     Limitada_ocasonal => [ 'Limitada ocasional', 3 ],
  141.     Ilimitada         => [ 'Ilimitada'         , 4 ],
  142.     );
  143.  
  144. $answervis =~ s/_/\\\\/;
  145.      
  146. #-------------UV------------------------------------------
  147. print "\n";
  148. my $prompt = Term::Menu->new(
  149.     beforetext      => 'Por favor, elija una de las siguientes opciones de Índice UV:',
  150.     aftertext       => 'Pulse un número: '
  151. );
  152. my $answeruv = $prompt->menu(
  153.     Bajo     => [ 'Bajo'     , 1 ],
  154.     Moderado => [ 'Moderado' , 2 ],
  155.     Alto     => [ 'Alto'     , 3 ],
  156.     Muy_Alto => [ 'Muy Alto' , 4 ],
  157.     Extremo  => [ 'Extremo'  , 5 ],
  158. );
  159.  
  160. my @rangos1 = ("0 - 2", "3 - 5", "6 - 7", "8 - 10", "\$\\geq\$11");
  161. my @colors1 = ('00FF00', 'FFFF00', 'FF8000', 'FF0000', '800080' );
  162.  
  163. if ($answeruv eq 'Bajo')     {$rango1 = $rangos1[0] and $color1=$colors1[0];}
  164. if ($answeruv eq 'Moderado') {$rango1 = $rangos1[1] and $color1=$colors1[1];}
  165. if ($answeruv eq 'Alto')     {$rango1 = $rangos1[2] and $color1=$colors1[2];}
  166. if ($answeruv eq 'Muy_Alto') {$rango1 = $rangos1[3] and $color1=$colors1[3];}
  167. if ($answeruv eq 'Extremo')  {$rango1 = $rangos1[4] and $color1=$colors1[4];}
  168.  
  169. $answeruv =~ s/_/ /;
  170. # __END__
  171. #
  172. #---------------------------------------------------------
  173.  
  174. open( ON, ">Pronostico.tex" );
  175. print ON <<EOF;
  176. \\documentclass[letter,10pt]{article}
  177. \\usepackage[activeacute,spanish]{babel}
  178. \\usepackage{ucs}
  179. \\usepackage[utf8x]{inputenc}
  180. \\usepackage[T1]{fontenc}
  181. \\usepackage{charter}
  182. \\usepackage{mwe}
  183. \\usepackage{subfig}
  184. \\usepackage{graphbox}
  185. \\usepackage{epsfig}
  186. \\usepackage{graphicx}
  187. \\usepackage{float}
  188. \\usepackage{amsmath}
  189. \\usepackage{amsfonts}
  190. \\usepackage{amssymb}
  191. \\usepackage{gensymb}
  192. \\usepackage[margin=70pt]{geometry}
  193. \\usepackage[cm]{fullpage}
  194. \\setlength{\\parindent}{0cm}
  195. \\usepackage{bm}
  196. \\usepackage{multirow}
  197. \\usepackage{hhline}
  198. \\usepackage{amssymb}
  199. \\usepackage{array}
  200. \\usepackage[table,xcdraw]{xcolor}
  201. \\usepackage[]{silence}
  202.  
  203.  
  204. \\newcommand\\Tstrut{\\rule{0pt}{2.6ex}}      
  205. \\newcommand\\Bstrut{\\rule[-0.9ex]{0pt}{0pt}}
  206. \\newcommand{\\TBstrut}{\\Tstrut\\Bstrut}
  207.  
  208. \\begin{document}
  209.  
  210. \\title{Servicio Meteorológico\\\\
  211. \\large{$d0, 08:00 horas}}
  212. \\date{}
  213.  
  214. \\maketitle
  215.  
  216. \\begin{table}[H]
  217. \\centering
  218. \\begin{tabular}{|>{\\bfseries}p{2.5cm}|>{\\centering\\arraybackslash}p{1.9cm}|}
  219. \\hline
  220. \\multirow{2}{*}{\\shortstack[l]{Día de la\\\\semana}}                    & \\multirow{2}{*}{\\shortstack{\\bf{Hoy}\\\\\\bf{$d1}}}                                                                                                                               \\TBstrut \\\\
  221.                                                                           &                                                                                                                                                                                      \\\\  \\hline
  222. \\multirow{7}{*}{Condición}                                               & \\multirow{5}{*}[0.1cm]{\\includegraphics[width=1.8cm]{$cond.png}}                                                                                                  \\TBstrut \\\\
  223.                                                                           &                                                                                                                                                                                      \\\\                                                                      
  224.                                                                           &                                                                                                                                                                                      \\\\
  225.                                                                           &                                                                                                                                                                                      \\\\          
  226.                                                                           &                                                                                                                                                                                      \\\\  
  227.                                                                           & $d1c1                                                                                                                                                                               \\\\
  228.                                                                           &                                                                                                                                                                                      \\\\ \\hline                                                                  
  229. \\multirow{2}{*}{\\shortstack[l]{Precipitación y\\\\probabilidad}}        & $d1p1                                                                                                                                                                                \\TBstrut \\\\
  230.                                                                           &                                                                                                                                                                                      \\\\ \\hline
  231. \\multirow{2}{*}{\\shortstack[l]{Intensidad de\\\\la precipitación}}      & $d1i1                                                                                                                                                                                \\TBstrut \\\\
  232.                                                                           &                                                                                                                                                                                      \\\\ \\hline
  233. \\multirow{2}{*}{\\shortstack[l]{Hora inicio y\\\\término aprox.}}        & $d1h1                                                                                                                                                                                \\TBstrut \\\\
  234.                                                                           &                                                                                                                                                                                      \\\\ \\hline
  235. \\multirow{2}{*}{\\shortstack[l]{Temperaturas\\\\extremas (\\degree C)}}  & \\multirow{2}{*}{\\shortstack[c]{\\textcolor{blue}{Min} \\hspace{0.2cm} \\textcolor{red}{Max}\\\\\\textcolor{blue}{$tmn1\\degree} \\hspace{0.3cm} \\textcolor{red}{$tmx1\\degree}}}  \\TBstrut \\\\
  236.                                                                           &                                                                                                                                                                                      \\\\ \\hline
  237. \\multirow{4}{*}{\\shortstack[l]{Viento\\\\promedio}}                     & \\multirow{4}{*}{\\shortstack{\\includegraphics[width=0.8cm]{$answervto.png}\\\\$answervto\\\\$mag1 m/s}}                                                                     \\TBstrut \\\\
  238.                                                                           &                                                                                                                                                                                      \\\\
  239.                                                                           &                                                                                                                                                                                      \\\\                                                                        
  240.                                                                           &                                                                                                                                                                                      \\\\  \\hline
  241. \\multirow{2}{*}{\\shortstack[l]{Humedad\\\\relativa}}                    & $d1hr1                                                                                                                                                                               \\TBstrut \\\\
  242.                                                                           &                                                                                                                                                                                      \\\\ \\hline
  243. \\multirow{2}{*}{Visibilidad}                                             & \\multirow{2}{*}{\\shortstack{$answervis}}                                                                                                                                                                              \\TBstrut  \\\\  
  244.                                                                           &                                                                                                                                                                                      \\\\ \\hhline{-|-}
  245. \\multirow{2}{*}{\\shortstack[l]{Indice de\\\\radición UV}}               & \\cellcolor[HTML]{$color1}                                                                                                                                                                 \\TBstrut \\\\  
  246.                                                                           & \\cellcolor[HTML]{$color1}\\multirow{-2}{*}{\\shortstack{$rango1\\\\$answeruv}}                                                                                                            \\\\ \\hline
  247. \\end{tabular}
  248. \\end{table}
  249.  
  250.  
  251. \\end{document}
  252. EOF
  253. close ON;
  254.  
  255. system("pdflatex -halt-on-error Pronostico.tex");
  256.  
  257.  
Coloreado en 0.009 segundos, usando GeSHi 1.0.8.4


Como solo se pueden adjuntar tres archivos, así que el código lo reduje bastante para que les corra. Les agradezco mucho, mucho, toda orientación y ayuda.
Adjuntos
Despejado.png
Despejado.png (144.37 KiB) Visto 1653 veces
Norte.png
Norte.png (28.13 KiB) Visto 1653 veces
ejemplo_de_lo_que_quiero_obtener.jpg
ejemplo_de_lo_que_quiero_obtener.jpg (239.21 KiB) Visto 1653 veces
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946

Publicidad

Re: Completar tabla informe meteorológico

Notapor explorer » 2017-05-05 14:03 @627

No entiendo dónde puede estar el problema. ¿No vale con hacer un bucle para todos los días, e ir componiendo la tabla Latex según las columnas que tenga esta tabla?
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: Completar tabla informe meteorológico

Notapor lis » 2017-05-07 12:26 @560

Hola, en eso estoy. Gracias.
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946

Re: Completar tabla informe meteorológico

Notapor lis » 2017-05-11 13:55 @621

Hola, tratando de encontrar una solución a lo que propone explorer tengo un código (es muy sencillo para después aplicarlo al ejemplo del principio de este tema), pero se sobrescriben los resultados (solo muestra el último) y ese es mi problema.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. for (1..2) {
  7.  
  8. print "Ingrese una letra: ";
  9. my $first = <STDIN>;
  10. chop $first;
  11.  
  12. print "Ingrese un número: ";
  13. my $last = <STDIN>;
  14. chop $last;
  15.  
  16. my %array;
  17.  
  18. @{$array{$_}} = ($first, $last);
  19. # push @array, @{$array{$_}};
  20. my @arrays = @{$array{$_}};
  21.  
  22. print "@arrays\n";}
  23.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Por ejemplo, quiero que los resultados se muestren así:
    a 1 b 2
O así:
    a 1
    b 2

Díganme qué estoy haciendo mal, por favor. Gracias.
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946

Re: Completar tabla informe meteorológico

Notapor explorer » 2017-05-13 17:49 @784

Lo que tienes que hacer es primero, meter la información en la matriz o tabla, y luego ya puedes sacarla:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use strict;
  3. use warnings;
  4.  
  5. my @tabla;
  6.  
  7. for my $fila (0..1) {
  8.    
  9.     print "Ingrese una letra: ";
  10.     my $first = <STDIN>;
  11.     chomp $first;
  12.  
  13.     print "Ingrese un número: ";
  14.     my $last = <STDIN>;
  15.     chomp $last;
  16.  
  17.     $tabla[$fila][0] = $first;          # guardamos en la tabla bidimensional
  18.     $tabla[$fila][1] = $last;
  19. }
  20.  
  21. for my $fila (0..1) {
  22.     print "@{ $tabla[$fila] }\n";       # sacamos la fila completa
  23. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Tienes más información en perllol
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: Completar tabla informe meteorológico

Notapor lis » 2017-05-15 11:58 @540

Muchas gracias, explorer, eres genial.
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946


Volver a Básico

¿Quién está conectado?

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