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:
Using perl Syntax Highlighting
- #!/usr/bin/perl
- # use strict;
- # use warnings;
- use Term::Menu;
- use Term::ANSIColor;
- use Time::Local;
- use POSIX qw/strftime/;
- # Obtenemos la fecha actual desglosada
- my ($s, $min, $h, $d, $m, $y) = localtime();
- my $time = timelocal $s, $min, $h, $d, $m, $y;
- my $d0 = strftime "%A %d de %B de %Y", localtime $time; $d0=ucfirst($d0);
- my $d1 = strftime "%d %b.", localtime $time;
- my $d2 = strftime "%d %b.", $s, $min, $h, $d + 1, $m, $y;
- my $d3 = strftime "%A\\\\%d %b.", $s, $min, $h, $d + 2, $m, $y; $d3=ucfirst($d3);
- my $d4 = strftime "%A\\\\%d %b.", $s, $min, $h, $d + 3, $m, $y; $d4=ucfirst($d4);
- my $d5 = strftime "%A\\\\%d %b.", $s, $min, $h, $d + 4, $m, $y; $d5=ucfirst($d5);
- my $d6 = strftime "%A\\\\%d %b.", $s, $min, $h, $d + 5, $m, $y; $d6=ucfirst($d6);
- my $d7 = strftime "%A\\\\%d %b.", $s, $min, $h, $d + 6, $m, $y; $d7=ucfirst($d7);
- #-------------CONDICION-----------------------------------
- print "\n";
- # colored(print "Comencemos con el Día $day\n", 'bold red')
- print color('bold white');
- print "Comencemos con el Día 1\n";
- print color('reset');
- my $prompt = Term::Menu->new(
- beforetext => 'Elija una de las siguientes opciones de condición:',
- aftertext => 'Seleccione un número: '
- );
- my $cond = $prompt->menu(
- Despejado => [ 'Despejado' , 1 ],
- );
- my $d1c1="\\multirow{X}{*}{\\shortstack{$cond}}";
- if ($d1c1 =~ s/(_.*?)/\\\\/ or $C =~ s/(.*?_.*?)_/$1 /) {$d1c1=~ s/X/2/g;}
- if ($d1c1 =~ s/(_)/ /) {$d1c1=~ s/X/2/g;}
- elsif($d1c1 !~ /^\_*$/) {$d1c1 =~ s/X/-1/g;}
- #-------------PRECIPITACIÓN-------------------------------
- print "\n";
- print "Ingrese la Cantidad de precipitación: ";
- my $prec1=<STDIN>; chop($prec1);
- print "\n";
- print "Ingrese el porcentaje de probabilidad: ";
- my $prob1=<STDIN>; chop($prob1);
- print "\n";
- my $d1p1="\\multirow{2}{*}{\\shortstack{$prec1\\\\$prob1\\%}}";
- if ($d1p1 =~ /--/){$d1p1="\\multirow{2}{*}{\\shortstack{--}}";}
- #-------------IINTENSIDAD----------------------------------
- # print "\n";
- my $prompt = Term::Menu->new(
- beforetext => 'Ingrese la intensidad de precipitación:',
- aftertext => 'Seleccione un número: '
- );
- my $answerint = $prompt->menu(
- Debil => [ 'Débil' , 1 ],
- Moderada => [ 'Moderada', 2 ],
- Fuerte => [ 'Fuerte' , 3 ],
- No_hay => [ 'No hay' , 4 ],
- );
- $answerint =~ s/Debil/Débil/;
- my $d1i1="\\multirow{2}{*}{\\shortstack{$answerint}}";
- if ($answerint eq 'No_hay'){$d1i1="\\multirow{2}{*}{\\shortstack{--}}";}
- #-------------HORARIO-------------------------------------
- print "\n";
- print "Ingrese la hora estimada de inicio: ";
- my $i1=<STDIN>; chop($i1); if ($i1 < 10) { $i1 = "0" . $i1; }
- print "\n";
- print "Ingrese la hora estimada de término: ";
- my $t1=<STDIN>; chop($t1); if ($t1 < 10) { $t1 = "0" . $t1; }
- print "\n";
- # my $d1h1="\\multirow{2}{*}{\\shortstack{\$\\sim\$$i1 a $t1 hrs}}";
- my $d1h1="\\multirow{2}{*}{\\shortstack{$i1 a $t1 hrs}}";
- if ($d1h1 =~ /--|-/){$d1h1="\\multirow{2}{*}{\\shortstack{--}}";}
- #-------------TEMPERATURA---------------------------------
- # print "\n";
- print "Ingrese la temperatura mínima: ";
- my $tmn1=<STDIN>; chop($tmn1);
- print "\n";
- print "Ingrese la temperatura máxima: ";
- my $tmx1=<STDIN>; chop($tmx1);
- print "\n";
- #-------------VIENTO--------------------------------------
- print "\n";
- my $prompt = Term::Menu->new(
- beforetext => 'Elija una de las siguientes opciones de dirección del viento:',
- aftertext => 'Seleccione un número: '
- );
- my $answervto = $prompt->menu(
- Norte => [ 'Norte' , 1 ],
- );
- print "\n";
- print "Ingrese la magnitud promedio del viento: ";
- my $mag1=<STDIN>; chop($mag1);
- print "\n";
- #-------------HUMEDAD-------------------------------------
- # print "\n";
- print "Ingrese la humedad relativa: ";
- my $hr1=<STDIN>; chop($hr1);
- print "\n";
- my $d1hr1="\\multirow{2}{*}{\\shortstack{$hr1\\%}}";
- #-------------VISIBILIDAD---------------------------------
- # print "\n";
- my $prompt = Term::Menu->new(
- beforetext => 'Por favor, elija una de las siguientes opciones de Visibilidad:',
- aftertext => 'Pulse un número: '
- );
- my $answervis = $prompt->menu(
- Nula => [ 'Nula' , 1 ],
- Limitada => [ 'Limitada' , 2 ],
- Limitada_ocasonal => [ 'Limitada ocasional', 3 ],
- Ilimitada => [ 'Ilimitada' , 4 ],
- );
- $answervis =~ s/_/\\\\/;
- #-------------UV------------------------------------------
- print "\n";
- my $prompt = Term::Menu->new(
- beforetext => 'Por favor, elija una de las siguientes opciones de Índice UV:',
- aftertext => 'Pulse un número: '
- );
- my $answeruv = $prompt->menu(
- Bajo => [ 'Bajo' , 1 ],
- Moderado => [ 'Moderado' , 2 ],
- Alto => [ 'Alto' , 3 ],
- Muy_Alto => [ 'Muy Alto' , 4 ],
- Extremo => [ 'Extremo' , 5 ],
- );
- my @rangos1 = ("0 - 2", "3 - 5", "6 - 7", "8 - 10", "\$\\geq\$11");
- my @colors1 = ('00FF00', 'FFFF00', 'FF8000', 'FF0000', '800080' );
- if ($answeruv eq 'Bajo') {$rango1 = $rangos1[0] and $color1=$colors1[0];}
- if ($answeruv eq 'Moderado') {$rango1 = $rangos1[1] and $color1=$colors1[1];}
- if ($answeruv eq 'Alto') {$rango1 = $rangos1[2] and $color1=$colors1[2];}
- if ($answeruv eq 'Muy_Alto') {$rango1 = $rangos1[3] and $color1=$colors1[3];}
- if ($answeruv eq 'Extremo') {$rango1 = $rangos1[4] and $color1=$colors1[4];}
- $answeruv =~ s/_/ /;
- # __END__
- #
- #---------------------------------------------------------
- open( ON, ">Pronostico.tex" );
- print ON <<EOF;
- \\documentclass[letter,10pt]{article}
- \\usepackage[activeacute,spanish]{babel}
- \\usepackage{ucs}
- \\usepackage[utf8x]{inputenc}
- \\usepackage[T1]{fontenc}
- \\usepackage{charter}
- \\usepackage{mwe}
- \\usepackage{subfig}
- \\usepackage{graphbox}
- \\usepackage{epsfig}
- \\usepackage{graphicx}
- \\usepackage{float}
- \\usepackage{amsmath}
- \\usepackage{amsfonts}
- \\usepackage{amssymb}
- \\usepackage{gensymb}
- \\usepackage[margin=70pt]{geometry}
- \\usepackage[cm]{fullpage}
- \\setlength{\\parindent}{0cm}
- \\usepackage{bm}
- \\usepackage{multirow}
- \\usepackage{hhline}
- \\usepackage{amssymb}
- \\usepackage{array}
- \\usepackage[table,xcdraw]{xcolor}
- \\usepackage[]{silence}
- \\newcommand\\Tstrut{\\rule{0pt}{2.6ex}}
- \\newcommand\\Bstrut{\\rule[-0.9ex]{0pt}{0pt}}
- \\newcommand{\\TBstrut}{\\Tstrut\\Bstrut}
- \\begin{document}
- \\title{Servicio Meteorológico\\\\
- \\large{$d0, 08:00 horas}}
- \\date{}
- \\maketitle
- \\begin{table}[H]
- \\centering
- \\begin{tabular}{|>{\\bfseries}p{2.5cm}|>{\\centering\\arraybackslash}p{1.9cm}|}
- \\hline
- \\multirow{2}{*}{\\shortstack[l]{Día de la\\\\semana}} & \\multirow{2}{*}{\\shortstack{\\bf{Hoy}\\\\\\bf{$d1}}} \\TBstrut \\\\
- & \\\\ \\hline
- \\multirow{7}{*}{Condición} & \\multirow{5}{*}[0.1cm]{\\includegraphics[width=1.8cm]{$cond.png}} \\TBstrut \\\\
- & \\\\
- & \\\\
- & \\\\
- & \\\\
- & $d1c1 \\\\
- & \\\\ \\hline
- \\multirow{2}{*}{\\shortstack[l]{Precipitación y\\\\probabilidad}} & $d1p1 \\TBstrut \\\\
- & \\\\ \\hline
- \\multirow{2}{*}{\\shortstack[l]{Intensidad de\\\\la precipitación}} & $d1i1 \\TBstrut \\\\
- & \\\\ \\hline
- \\multirow{2}{*}{\\shortstack[l]{Hora inicio y\\\\término aprox.}} & $d1h1 \\TBstrut \\\\
- & \\\\ \\hline
- \\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 \\\\
- & \\\\ \\hline
- \\multirow{4}{*}{\\shortstack[l]{Viento\\\\promedio}} & \\multirow{4}{*}{\\shortstack{\\includegraphics[width=0.8cm]{$answervto.png}\\\\$answervto\\\\$mag1 m/s}} \\TBstrut \\\\
- & \\\\
- & \\\\
- & \\\\ \\hline
- \\multirow{2}{*}{\\shortstack[l]{Humedad\\\\relativa}} & $d1hr1 \\TBstrut \\\\
- & \\\\ \\hline
- \\multirow{2}{*}{Visibilidad} & \\multirow{2}{*}{\\shortstack{$answervis}} \\TBstrut \\\\
- & \\\\ \\hhline{-|-}
- \\multirow{2}{*}{\\shortstack[l]{Indice de\\\\radición UV}} & \\cellcolor[HTML]{$color1} \\TBstrut \\\\
- & \\cellcolor[HTML]{$color1}\\multirow{-2}{*}{\\shortstack{$rango1\\\\$answeruv}} \\\\ \\hline
- \\end{tabular}
- \\end{table}
- \\end{document}
- EOF
- close ON;
- system("pdflatex -halt-on-error Pronostico.tex");
Coloreado en 0.008 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.