Newsgroup: it.comp.lang.perl
Titolo: SVUOTARE LE VARIABILI

Buongiorno,
mi chiamo Lorenzo e sono un programmatore Perl che sta muovendo ora i
suoi primi passi in questo enorme mondo.
Sto realizzando una pagina, che prendendo dei valori dai campi di un
database mi riporta i dati di quel mese dell'anno "aaaa".
Mi spiego meglio, la struttura e la seguente:
|  mese/anno  |  col1  |  col2  |  col3  |  col4  |  col5  |  ....
|  gen        |  10    |  20    |  30    |  15    |  12    |  ....
|  feb        |  23    |  45    |  65    |  2     |  54    |  ....
 ecc....
il problema è che se "col1" nel mese di genna vale 10 e in quello di
febbraio vale 20, nella "casella" di "col1" del mese di febbraio mi
visuaòlizzerà 30
(e non 20).
|  mese/anno  |  col1  |  col2  |  col3  |  col4  |  col5  |  ....
|  gen        |  10    |  20    |  30    |  15    |  12    |  ....
|  feb        |  30    |  40    |  50    |  25    |  22    |  ....
xchè feb valeva: 
|  feb        |  20    |  20    |  20    |  10    |  10    |  ....
 ecc....
Faccio recuperare i valori con un ciclo For sul n° del mese, per via
della struttura del databse...
come faccio alla fine di ogni "giro" a svuotaere le variabili in modo
tale che NON  avvenga più la somma tra i valori di una cella con
quelli della successiva??
Grazie della gentile attenzione!!
Lorenzo Perotti
em@il: 
lorenzo...@email.it

 quelli della successiva??
Settandole a zero?
Tipo:
	$var = 0;
Esattamente, com'è fatto sto ciclo?
Ciao,
-- 
+--------+ ASCII ribbon campaign ( )
|  kral  |  - against HTML email  X 
+--------+              & vCards / \

 Ciao,
IL COD DEL CICLO FOR E' IL SEGUENTE:
## ANNUARIO
sub visual_anno(){
# le funz. dei totali sono presi dalla funzione         sub
free_online()
print qq~ 	
<HTML>
<HEAD>
<TITLE>Pagina Statistiche Web-Email</TITLE>
  <STYLE>
BODY { font-family:VERDANA; font-size:SMALLER }
TABLE { font-family:VERDANA; font-size:10px }
 TD { font-family:VERDANA; font-size:10px}
</STYLE>
</HEAD>
<body  bgcolor=#ffffff>
~; 
 $htm_data   = make_data_stat( $pmese , $par_anno );
 $htm_free   = make_free();
print free_online_top2() ;
my $nwith =  sprintf ("%.0f", 900/7);
my $campodata =  300;
print qq~ 
<table align=center width="95%">
	<tr bgcolor=#C0FFC0 align=right> 
	    <td width=$nwith align=right>Data</td>
	    <td bgcolor=#FFCC99 width=$nwith
align=center>Accessi<br>Atlanet</td>
	    <td bgcolor=#FFCC99 width=$nwith
align=center>Accessi<br>Vipnet</td>
	    <td bgcolor=#FFCC99  width=$nwith
align=center>Accessi<br>Active</td>
	    <td bgcolor=#FFCC99  width=$nwith
align=center>Totale<br>Accessi</td>
	    <td width=$nwith align=center>Minuti<br>Atlanet</td>
	    <td width=$nwith align=center>Minuti<br>Vipnet</td>
	    <td width=$nwith align=center>Minuti<br>Active</td>
	    <td width=$nwith align=center>Minuti PK<br>Active</td>
	    <td width=$nwith align=center>Minuti OFF-PK<br>Active</td>
	    <td width=$nwith align=center>Totale<br>Minuti</td>
	    <td width=$nwith align=center>Ricavi<br>Atlanet</td>
	    <td width=$nwith align=center>Ricavi<br>Active</td>
	    <td width=$nwith align=center>Totale<br>Ricavi</td>
	    <!--
	    <td width=$nwith align=center>Media Min.Conn. Atl.</td>
	    <td width=$nwith align=center>Media Min.Conn. Act.</td>
	    -->
	    <td width=$nwith align=center>Richieste Dial. Fine Reg.</td> 
	    <td width=$nwith align=center>Richieste Dial<br>Atlanet</td>
	    <td width=$nwith align=center>Richieste Dial<br>Active</td>
	</tr>
 
~;
if ( $pmese1 eq "")
 {	
 	$pmese1 = 1;
 }
else
 {
 	$pmese1 = $q->param('mm_start');	
 }
if ( $pmese2 eq "")
 {	
 	$pmese2 =12;
 }
else
 {
 	$pmese2 = $q->param('mm_fine');	
 }
if ( $par_anno1 eq "")
 {	
 	$par_anno1 = 2003;
 }
else
 {
 	$par_anno1 = $q->param('aa_inizio');	
 }
 
if ( $par_anno2 eq "")
 {	
 	$par_anno2 = 2003;
 }
else
 {
 	$par_anno2 = $q->param('aa_inizio');	
 } 
 $par_anno = "2003";
for(my $pmese=1;$pmese=12;$pmese++){
###  inserire totale crediti inutilizzate 
   my $dbh = apri_db();
 
   my $query = "select  *   from stat_email ";
 
   if ( $pmese  ne ""){	
 	$query .= "  WHERE  DATE_FORMAT(DATA, '%c') = '$pmese'";
   }
 
   if ( $par_anno  ne ""){	
 	$query .= "  AND DATE_FORMAT(DATA, '%Y') ='$par_anno'";
   }
 
   $query .= " ORDER BY DATA DESC ";
 
  my(@gidref)=select_multi_row_hash($dbh,"$query");
  my $gidtot=@gidref;	
 
  my $giorni_coll = 0 ;
  ## se il mese visualizzato č il corrente 
  ## allora il giorno per le stat č -1 
  my $mese_corr = &mese_corrente();
 
  my $calcola_giorno = 1;
 
  if  ( $mese_corr eq $pmese ){
 
      $giorni_coll = -1 ;
      # se  sono nel mese corrente non devo 
      # calcolare il primo giorno ai fini della media 
      $calcola_giorno = 0;
  }
 
  for(my $j=0;$j<$gidtot;$j++){		
 
  if ($gidref[$j]->{FREE_SEC} ne 0 ){
 
    $giorni_coll++;
 
    my $dat_stat = &data_giorno_mese( $gidref[$j]->{DATA} );
 
    $minuti_vip = $gidref[$j]->{FREE_SEC_VIP} / 60;
    $minuti_vip = sprintf ("%.0f", $minuti_vip);
 
    $minuti_vip_show = &inserisci_punti_int($minuti_vip);
  ######  
    $minuti = $gidref[$j]->{FREE_SEC} / 60;
    $minuti = sprintf ("%.0f", $minuti);
 
    $minuti_show = &inserisci_punti_int($minuti);
 
##################################################   
 
    $min_pk = $gidref[$j]->{FREE_M_2_PK} / 60;
    $min_pk = sprintf ("%.0f", $min_pk);
 
    $minuti_show_2 =  &inserisci_punti_int($min_pk);
 
    $min_off_pk = $gidref[$j]->{FREE_M_2_OF} / 60;
    $min_off_pk = sprintf ("%.0f", $min_off_pk);
 
    $minuti_show_3 =  &inserisci_punti_int($min_off_pk);
 
##################################################### 
 
    $min_tot =  $minuti + $min_off_pk + $min_pk;
    $minuti_show_t =  &inserisci_punti_int($min_tot);
 
    ### 3 lire al minuto
    $ricavo_min = $minuti * 0.0016;
    $ricavo_min_vip = $minuti_vip * 0.0016;
 
    ##  3.8 lire al min 
    $data_rif_mese = $gidref[$j]->{DATA};
    my ($lanno,$lmese,$lgiorno) = split(/-/,$data_rif_mese);       
 
   if ( ($lanno < 2002 && $lmese < 11) || $lanno < 2002 ){
      $ricavo_min = $minuti * 0.0021;	
   }
 
   if ( ($lanno >= 2002 && $lmese >=11) || $lanno > 2002 ){
      $ricavo_min = $minuti * 0.0031;	
   }
 
   $ricavo_off_pk =  $min_off_pk  *  0.0018;
   $ricavo_off_pk = sprintf ("%.2f", $ricavo_off_pk);
   $ricavo_pk =  $min_pk *  0.0036;
   $ricavo_pk = sprintf ("%.2f", $ricavo_pk);
 
   $ricavo_min_2 = $ricavo_off_pk + $ricavo_pk;
 
   $ricavo_min_t =  sprintf ("%.2f", $ricavo_min +  $ricavo_min_2);
   $ricavo_min_t_show = &show_numero_e($ricavo_min_t);
 
   $ricavo_min = sprintf ("%.2f", $ricavo_min);
 
   if ( $calcola_giorno eq 1 ){
#####################################################   
 
    # totale di OFF-PK
    $tot_off_pk += $min_off_pk;
 
    # totale di PK
    $tot_pk += $min_pk;
 
    # tot PK + OFF-PK
    $tot_min_2 = $min_pk + $min_off_pk;
    $tot_all_pk += $tot_min_2;
#####################################################      
#######################   \/    VIPNET  \/  
##############################
    $tot0_vip   += $gidref[$j]->{FREE_UT_VIP};
    $tot0_2_vip += $gidref[$j]->{FREE_ACC_VIP}; 
    $tot0_3_vip += ($gidref[$j]->{FREE_UT_VIP} +
$gidref[$j]->{FREE_ACC_VIP});
 
    $tot1_vip += $gidref[$j]->{FREE_SEC_VIP};
#######################################################################
 
    $tot0   += $gidref[$j]->{FREE_UT};        
    $tot0_2 += $gidref[$j]->{FREE_ACC_2}; 
    $tot0_3 += ($gidref[$j]->{FREE_UT} + $gidref[$j]->{FREE_ACC_2});
 
    $tot1   += $gidref[$j]->{FREE_SEC};   
    $tot2   += $ricavo_min;   
    $tot2_2 +=  $ricavo_min_2; 
    $tot2_3 +=   $ricavo_min_t;           
 
    $tot3 += $gidref[$j]->{CLICK_DIALER};    
    $tot4 += $gidref[$j]->{CLICK_DIALER_1};  
    $tot6 += $gidref[$j]->{CLICK_DIALER_2};  
    $tot5 += $media_min;
    $tot5_2 += $media_min_2;
    }else{
       $calcola_giorno = 1;
    }
 
    $ricavo_min = &show_numero_e($ricavo_min);  
 
    $utenti_vip_show   = 
&inserisci_punti_int($gidref[$j]->{FREE_UT_VIP});
    $utenti_vip_show_2 = 
&inserisci_punti_int($gidref[$j]->{FREE_ACC_VIP});
    $utenti_vip_show_t = 
&inserisci_punti_int($gidref[$j]->{FREE_UT_VIP} +
$gidref[$j]->{FREE_ACC_VIP});
 
    $utenti_show   =  &inserisci_punti_int($gidref[$j]->{FREE_UT});
    $utenti_show_2 =  &inserisci_punti_int($gidref[$j]->{FREE_ACC_2});
    $utenti_show_t =  &inserisci_punti_int($gidref[$j]->{FREE_UT} +
$gidref[$j]->{FREE_ACC_2});
 
    $min_all_pk_show = &inserisci_punti_int($min_pk + $min_off_pk);
 
    $ricavo_min_2_show = &show_numero_e($ricavo_min_2);
 
    }
 
  }
 
 $tot0_vip_show   =  &inserisci_punti_int($tot0_vip);
 $tot0_2_vip_show =  &inserisci_punti_int($tot0_2_vip);
 $tot0_3_vip_show =  &inserisci_punti_int($tot0_3_vip);
 $tot1_vip = $tot1_vip / 60;
 $tot1_vip = sprintf ("%.0f", $tot1_vip);
 
 $tot1_vip_show =  &inserisci_punti_int($tot1_vip);
 
 $tot0_show   =  &inserisci_punti_int($tot0);
 $tot0_2_show =  &inserisci_punti_int($tot0_2);
 $tot0_3_show =  &inserisci_punti_int($tot0_3);
 
 $tot0_media = sprintf ("%.0f", $tot0 / $giorni_coll);
 $tot0_media_show = &inserisci_punti_int($tot0_media);
 
 $tot0_media_2 = sprintf ("%.0f", $tot0_2 / $giorni_coll);
 $tot0_media_show_2 = &inserisci_punti_int($tot0_media_2);
 
 $tot0_media_t = sprintf ("%.0f", $tot0_3 / $giorni_coll);
 $tot0_media_show_t = &inserisci_punti_int($tot0_media_t);
 
 $tot1 = $tot1 / 60;
 $tot1 = sprintf ("%.0f", $tot1);
 
 $tot1_show =  &inserisci_punti_int($tot1);
 
 $tot_pk_show       = &inserisci_punti_int($tot_pk);
 $tot_off_pk_show   = &inserisci_punti_int($tot_off_pk);
 
 $tot0_allPK_show   = &inserisci_punti_int($tot_all_pk);  
 
 $tot_minuti        = sprintf ("%.0f",$tot1 + $tot_pk + $tot_off_pk);
 $tot_minuti_show   = &inserisci_punti_int($tot_minuti); 
 $tot2_show         = &show_numero_e($tot2);
 $tot2_2_show       = &show_numero_e($tot2_2);
 $tot2_3_show       = &show_numero_e($tot2+$tot2_2);
 
 $tot3_show =  &inserisci_punti_int($tot3);
 $tot4_show =  &inserisci_punti_int($tot4);
 $tot6_show =  &inserisci_punti_int($tot6);
 
 
print qq~ 
	  <tr bgcolor=#d3d0f7 align=right> 
	    <td align=left>$pmese-$par_anno</td>
	    <td width=$nwith>$tot0_show</td>
	    <td width=$nwith>$tot0_vip_show</td>
	    <td width=$nwith>$tot0_2_show</td>
	    <td width=$nwith>$tot0_3_show</td>
 
	    <td width=$nwith>$tot1_show</td>
	    <td width=$nwith>$tot1_vip_show</td>
	    <td width=$nwith>$tot0_allPK_show</td>
	    <td width=$nwith>$tot_pk_show</td>
	    <td width=$nwith>$tot_off_pk_show</td>
	    <td width=$nwith>$tot_minuti_show</td>
 
	    <td width=$nwith>$tot2_show</td>
	    <td width=$nwith>$tot2_2_show</td>
	    <td width=$nwith>$tot2_3_show</td>
	    <!--
	    <td width=$nwith></td>
	    <td width=$nwith></td>
	    -->
	    <td width=$nwith>$tot3_show</td>
	    <td width=$nwith>$tot4_show</td>
	    <td width=$nwith>$tot6_show</td>
 
	  </tr>
~;
$tot_off_pk = 0;
$tot_pk = 0;
$tot_min_2 = 0;
$tot_all_pk = 0;
$tot0 = 0;
$tot0_2 = 0;
$tot0_3 = 0;
$tot1 = 0;
$tot2 = 0;
$tot2_2 = 0;
$tot2_3 = 0;
$tot3 = 0;
$tot4 = 0;
$tot5 = 0;
$tot5_2 = 0;
$tot6 = 0;
$tot1_vip  = 0 ;
$tot0_vip  = 0 ;
$tot0_2_vip = 0 ;
$tot0_3_vip  = 0;
$minuti_vip = 0;
}
print qq~ 
 </table>
 
 </CENTER></BODY>
 </HTML>
~;
}

    }
for(my $pmese=1;$pmese=12;$pmese++){
  $tot_off_pk = 0;
  $tot_pk = 0;
  $tot_min_2 = 0;
  $tot_all_pk = 0;
  $tot0 = 0;
  $tot0_2 = 0;
  $tot0_3 = 0;
  $tot1 = 0;
  $tot2 = 0;
  $tot2_2 = 0;
  $tot2_3 = 0;
  $tot3 = 0;
  $tot4 = 0;
  $tot5 = 0;
  $tot5_2 = 0;
  $tot6 = 0;
  $tot1_vip  = 0 ;
  $tot0_vip  = 0 ;
  $tot0_2_vip = 0 ;
  $tot0_3_vip  = 0;
  $minuti_vip = 0;
###  inserire totale crediti inutilizzate 
   my $dbh = apri_db();
Potresti inizializzare le variabili ad ogni ciclo, quindi subito dopo
l'struzione for. Spero di aver capito giusto.
