#!perl #Programa p/ desagregar dados de PREC do SENAMHI/Bolivia em diarios $dir = "C:\\Users\\proclima\\Desktop\\dados_bolivia\\temperatura_media_ambiente"; $dirin = "C:\\Users\\proclima\\Desktop\\dados_bolivia\\temperatura_media_ambiente\\dados_txt"; # dados de entrada $dirout = "C:\\Users\\proclima\\Desktop\\dados_bolivia\\temperatura_media_ambiente\\diarios"; # saida dos dados system ("dir /B $dirin\\*.txt > $dir\\arquivos.dat"); # cria arquivo referencia dos arquivos open IN, "){ open EST,"<$dirin\\$nome"; print "Processando: $nome"; @aux1=split(/_/,$nome); $cod=$aux1[0]; $ano=substr($aux1[1],0,4); $ndiasmes[2] = 28; if(isBissexto($ano)){ # verifica se ano é bissexto $ndiasmes[2] = 29; } for($i = 0; $i < 11; $i++){ # pula linhas em branco $linha=; if($i==1){ #linha 2 @aux2=split(/:/,$linha); $long=-((substr($aux2[2],0,3))+(substr($aux2[2],7,2))/60+(substr($aux2[2],11,2))/3600); $lati=-((substr($aux2[3],0,3))+(substr($aux2[3],7,2))/60+(substr($aux2[3],11,2))/3600); $elev=substr($aux2[1],0,5); ($elev=$elev)=~s/L//; } } $cont=1; if(($ano>=1970)&&($ano<=1990)){ while($linha=){ # linha recebe nome estação @valores = split(/\s+/,$linha); # guarda dados no array $dia = $valores[0]; # pega o dia na coluna 1 if(($cont <= 31)&&($dia > 0)){ for($i=1;$i<=12;$i++){ #loop sobre os meses if($cont<=$ndiasmes[$i]){ $mes = sprintf("%02d",$i); $dia = sprintf("%02d",$dia); $temp=$valores[$i]; if($temp ne "****"){ ($temp = $temp) =~ s/,/./; #troca , por . $temp = sprintf("%10.4f",$temp); $lati = sprintf("%10.4f",$lati); # formatação $long = sprintf("%10.4f",$long); # formatação $cod = sprintf("%30s",$cod); $elev = sprintf("%10.2f",$elev); # formatação $aux1=sprintf("%5s",$dia); if($temp >= 50){ open(PROBLEM, ">>${dir}\\Problemas_com_dados_Temp.txt"); print PROBLEM "$cod$lati$long$temp$elev$aux1-$mes-$ano \n"; close PROBLEM; }#if open (TEMP, ">>${dirout}\\temp_$dia$mes$ano.dat"); print TEMP "$cod$lati$long$temp$elev\n" ; # escreve em TEMP: o codigo, lat, long e prec. close TEMP; }#if }#if }#for $cont++; }#if }#while }#if close EST; }#while close IN; system ("rm -f $dir\\arquivos.dat"); exit; sub isBissexto{ # retorna 1, se for bissexto $ano = $_[0]; if ($ano%400==0){ return 1; }elsif ($ano%4==0 && $ano%100!=0){ return 1; }else{ return 0; } }