#!/usr/bin/perl ######################################################## # Autor(a): Lucas Moreira de Araujo Conçalves # #------------------------------------------------------# # Data: //2008 # #------------------------------------------------------# # Descricao: # # # # # # #------------------------------------------------------# # Modificacoes: # # # # # ######################################################## # Bibliotecas Utilizadas #----------------------- #use strict; # Obriga a declarar todas as variaveis use Env::Sourced ("/home/gempak/NAWIPS/Gemenviron.profile"); use Getopt::Std; # Biblioteca para argumentos de linha de comando use Time::Local; # Biblioteca padrao para processar data e hora # Exemplo $time=timelocal($seg,$min,$horas,$dia,$mes-1,$ano-1900); # OU $time=timegm($seg,$min,$horas,$dia,$mes-1,$ano-1900); # # Exemplo 2 > Somando 24 horas a uma data # my $newtime=$time + 60*60*24; # #Exemplo 3 < subtraindo 10 minutos # my $newtime=$time -60*10; # # Exemplo 4 Imprimindo a data # print scalar(localtime($timei)),"\n"; # # Exemplo 5 Comparando datas # if (($timef > $time) && ($timei< $time) { # use Cwd; # biblioteca para obter o path ou diretorio de trabalho use Glib; # Biblioteca de de subrotinas de uso geral use Convert_arc; # Modulo para conversao de arquivos de diferentes formatos use POSIX; use Date::Manip; use vars qw($opt_t); # opcao para entrar com data maunalmente use vars qw($opt_s); # Opcao para roda com data do sistema my $ano; my $mes; my $dia; my $hora; my $minuto; my $obsdate; # Data da obsevacao no calendario juliano a partir do ano de 1900 my $tipo_dado; my $timewindow; my $narq; my $data1; my $data2; #my $hf; my $hratual; my $date1; my $date2; %teste; #my $arq_out="$ENV{HOME}/resultados"; #---------------------------------------------------------------------------------------- &getopts('t:s') ||die "Erro: Nao existe essa opcao! Digite -h para Ajuda\n"; # Opcao -T ( Roda o programa para uma data especifica ) #------------------------------------------------------ if("$opt_t") { my $anomesdia=$opt_t; print "$0,$1,$2\n"; print "$opt_t,$anomesdia\n"; $anomesdia=~ /(\d\d\d\d)(\d\d)(\d\d)(\d\d)/; $ano="$1"; $mes="$2"; $dia="$3"; $hora="$4"; #$obsdate=timelocal(0,0,$hora,$dia,$mes-1,$ano-1900); #$arq="/data/ldm/gempak/upperair/".$anomesdia."_upa.gem"; $narq="$anomesdia"; $horacentral=$ano.$mes.$dia.$hora.":00".":00"; $date1 = DateCalc("$horacentral","- 3 hour",\$err); $date2 = DateCalc("$horacentral","+ 3 hour",\$err); print "Hora menos 3 = $date1\n"; print "Hora mais 3 = $date2\n"; $date1 =~ /(\d{4})(\d{2})(\d{2})(\d{2}):\d{2}:\d{2}/; $as=$1; $ms=$2; $ds=$3; $hs=$4; $arqent="/data/ldm/gempak/upperair/".$ano.$mes.$dia."_upa.gem"; if ($ds != $dia) { print "ENTROU aqui\n"; $arq="/data/ldm/gempak/upperair/".$as.$ms.$ds."_upa.gem"; $h{$data1}=$arq; }else { $h{$data1} = $arqent ; } $h{$data2} = $arqent ; } # {Opcao -S [ Roda o programa para a data do sistema (horario sinoptico mais proximo)] #------------------------------------------------------------------------------------ # -Obtem a data e hora do sistema # -Converte a hora para horario sinotico mais proximo # -Converte data para calendario juliano if("$opt_s") { $mes = strftime('%m', gmtime(time)); $ano = strftime('%Y', gmtime(time)); $dia = strftime('%d', gmtime(time)); $hora= strftime('%H', gmtime(time)); $hratual=$ano.$mes.$dia.$hora.":00".":00"; print "$teste\n"; $date1 = DateCalc("$hratual","- 6 hour",\$err); $date2 = DateCalc("$hratual","- 3 hour",\$err); $date1 =~ /(\d{4})(\d{2})(\d{2})(\d{2}):\d{2}:\d{2}/; $a6=$1; $m6=$2; $d6=$3; $h6=$4; $date2 =~ /(\d{4})(\d{2})(\d{2})(\d{2}):\d{2}:\d{2}/; $a3=$1; $m3=$2; $d3=$3; $h3=$4; #$ano=~ s/\d\d(\d\d)/$1/; #$hf=$date1; #if ($hora=="21") # { # $hf eq "LAST"; # } $hf=$h3-1; if ($hf<=9) { $hf="0"."$hf"; } $data1=$d6."/".$h6."-$d3/"."$hf"."59"; $data2=$d3."/".$h3."-$dia/".$hora; print "C: $d6 DIA: $dia\n"; $arqent="/data/ldm/gempak/upperair/".$ano.$mes.$dia."_upa.gem"; if ($d6 != $dia) { print "ENTROU aqui\n"; $arq="/data/ldm/gempak/upperair/".$a6.$m6.$d6."_upa.gem"; $h{$data1}=$arq; }else { $h{$data1} = $arqent ; } $h{$data2} = $arqent ; print "$data1\n"; print "$data2\n"; $arqapdd="resultados/uair/".$d6.$h6."-".$dia.$hora.".txt"; print "$arqapdd\n\n"; } #--------------------------- # Insere os dados no GEMPAK # -------------------------- while (($k, $v) = each (%h)) { print "$k => $v\n"; $teste=$k; $teste=~ s/\//_/g; $teste=~ s/-/_/g; $narq1="$teste"."_uair.txt"; #$teste=$k; #$teste=~ /(\d\d)\/\d\d-\d\d\/\d\d/; $teste=$1; print "TESTE $teste\n"; print "ARQ $narq1\n"; push (@apd,"resultados/uair/"."$narq1"); system(` $ENV{'GEMEXE'}/snlist << EOF SNFILE = $v AREA = DSET DATTIM = $k SNPARM = HGHT;TMPK;DWPK;UWND;VWND;TOST STNDEX = SHOW LEVELS = ALL VCOORD = PRES OUTPUT = f /resultados/uair/$narq1 MRGDAT = YES r e EOF`); }