Página 1 de 1

Completar tabla informe meteorológico

NotaPublicado: 2017-05-04 12:37 @567
por lis
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.

Re: Completar tabla informe meteorológico

NotaPublicado: 2017-05-05 14:03 @627
por explorer
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?

Re: Completar tabla informe meteorológico

NotaPublicado: 2017-05-07 12:26 @560
por lis
Hola, en eso estoy. Gracias.

Re: Completar tabla informe meteorológico

NotaPublicado: 2017-05-11 13:55 @621
por lis
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.

Re: Completar tabla informe meteorológico

NotaPublicado: 2017-05-13 17:49 @784
por explorer
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

Re: Completar tabla informe meteorológico

NotaPublicado: 2017-05-15 11:58 @540
por lis
Muchas gracias, explorer, eres genial.