Lista Tag Utenti

Risultati da 1 a 3 di 3

Discussione: calcolo consumo medio (perl)

  1. #1
    Senior Member
    ESP User
    L'avatar di aqix
    Data Registrazione
    Oct 2011
    Messaggi
    277
    Citato in
    8 Post(s)
    Taggato in
    0 Thread(s)
    Thanks
    57
    Thanks ricevuti: 22 in 19 Posts

    Predefinito calcolo consumo medio (perl)

    Uno script in perl per creare grafici.
    Allora, provo a spiegare, magari altri si trovano nella stessa situazione. Uso diversi liquidi pronti anche con diversa concentrazione e formati, e non so bene quanto consumo a parte quello che metto nel tank. Ho voluto fare un calcolo preciso in base a quando inizio un flacone e quando l'ho svuotato.
    In pratica mi faccio una tabellina tipo questa:
    Codice:
    Omegavape ry4 20ml 18mg 16/01/2012 - 05/02/2012
    Omegavape congress 20ml 18mg 22/01/2012 - 12/02/2012
    misto misto 10ml 16mg 23/01/2012 - 05/02/2012
    Flavourart ry4 10ml 18mg 21/01/2012 - 28/01/2012
    Flavourart 7foglie 10ml 18mg 29/01/2012 - 05/02/2012
    ogni riga del tipo:
    <marca> <aroma> <ml> <mgnico> <datainizio> - <datafine>

    questa lista la metto in un file input.txt e la dò in pasto al programmino perl che mi crea questi grafici








    tutto questa fatica per scoprire con che consumo 3.83ml di liquido e 67.4mg di nicotina al giorno

    allego lo script per gli smanettoni, è scritto alla meglio ma volendo ci si potrebbe fare una pagina web
    Codice:
    # utilizzo "parse&graph.pl" > output.csv
    
    # esempio input.txt
    #
    #Omegavape ry4 20ml 18mg 16/01/2012 - 29/01/2012
    #Omegavape congress 20ml 18mg 22/01/2012 - 12/02/2012
    #misto misto 10ml 16mg 23/01/2012 - 05/02/2012
    #Flavourart ry4 10ml 18mg 21/01/2012 - 28/01/2012  non male
    #Flavourart 7foglie 10ml 18mg 29/01/2012 - 05/02/2012 
    
    
    use Time::Local;
    #my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
    #my $datestring = sprintf("%4d%02d%02d%02d%02d%02d",($year + 1900),($mon+1),$mday,$hour,$min,$sec);
    # non ho capito l'utilizzo del +1900 e del +1 sotto non l'ho usato ed è ok
    #print $datestring."\n";
    #
    #use POSIX;
    #my $datetime2 = strftime( '%Y%m%d%H%M%S', localtime );
    #print $datetime2."\n";
    #
    #$amonth = $2;
    #$aday = $1;
    #$ayear = $3;        
    #my $date1 = timelocal(0,0,0,$aday,$amonth,$ayear-1900);
    #my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($date1);
    #my $datestring1 = sprintf("%4d%02d%02d",($year + 1900),$mon,$mday,$hour,$min,$sec);
    
    
    #use Date::Calc qw(Delta_Days);
    #use Date::Calc qw(Add_Delta_Days);
    use Date::Calc;
    
    my $datemin="99999999";
    my $datemax="00000000";
    my $i=0;
    
    my @dati_ingresso=();
    
    open LSTFILE, "< input.txt" || die "Cannot read file $_";
    
    foreach my $riga ( <LSTFILE> ){
    	my @colonne = split(/\ /,$riga);
    	my $liquido=@colonne[0];
    	my $ml=@colonne[2]; $ml =~ s/ml//g;
    	my $mgnico=@colonne[3]; $mgnico =~ s/mg//g;
    	my $a=@colonne[4];
    	$a =~ /(\d{2})\/(\d{2})\/(\d{4})/;
    	my $amonth = $2;
            my $aday = $1;
            my $ayear = $3;  
    	my $datestring1=$ayear.$amonth.$aday;
    	my $b=@colonne[6];
    	$b =~ /(\d{2})\/(\d{2})\/(\d{4})/;
    	my $bmonth = $2;
            my $bday = $1;
            my $byear = $3; 
            my $daydiff= Date::Calc::Delta_Days( $ayear,$amonth,$aday , $byear,$bmonth,$bday)+1; ################################# giorni estremi copresi
    	my $datestring2=$byear.$bmonth.$bday;
    	$datemin=$datestring1 if $datestring1<$datemin; 
    	$datemax=$datestring2 if $datestring2>$datemax;	
    	@dati_ingresso[$i++]=$liquido.";".$ml.";".$mgnico.";".$datestring1.";".$datestring2.";".$daydiff.";".($ml/$daydiff).";".(($ml/$daydiff)*$mgnico);
    	print $liquido.";".$ml.";".$mgnico.";".$datestring1.";".$datestring2.";".$daydiff.";".($ml/$daydiff).";".(($ml/$daydiff)*$mgnico)."\n";
    }
    
    close LSTFILE;
    
    #print $datemin."\n";
    #print $datemax."\n";
    
    my $date_i=$datemin;
    my $j=0;
    my @x_date=();
    my @y_ml=();
    my @y_mg=();
    
    while ($date_i<$datemax){
    	#print "-----------------------------------------------------\n";
    	#print $date_i ."\n";
    	my $val1=0;
    	my $val2=0;
    	foreach (@dati_ingresso){
    		#print $_."\n";
    		my @colonne = split(/;/,$_);	
    		#print @colonne[3]."\n";
    		#print @colonne[4]."\n";
    		$val1 = $val1+@colonne[6] if ($date_i>=@colonne[3])*($date_i<=@colonne[4]);       ################################# giorni estremi copresi
    		$val2 = $val2+@colonne[7] if ($date_i>=@colonne[3])*($date_i<=@colonne[4]);	  ################################# giorni estremi copresi	
    	}
    	
    	print $date_i.";".$val1.";".$val2."\n";
    	$date_i =~ /(\d{4})(\d{2})(\d{2})/;
    	my $month = $2;
            my $day = $3;
            my $year = $1; 
            @x_date[$j]=$day.'/'.$month;
    	@y_ml[$j]=$val1;
    	@y_mg[$j]=$val2;
    	$j++;
    	($y, $m, $d) = Date::Calc::Add_Delta_Days($year , $month, $day, 1);
            $date_i=sprintf("%4d%02d%02d",$y,$m,$d,0,0,0);
    }
    
    
    print @x_date ."\n";
    print @y_ml ."\n";
    print @y_mg ."\n";
    #######################################################################################
    
    use strict;
    use CGI;
    use GD::Graph::mixed;
    
    use constant TITLE => "Consumo medio liquido";
    
    my $q     = new CGI;
    my $graph = new GD::Graph::bars( 700, 300 );
    #my $graph = new GD::Graph::points( 700, 300 );
    #my $graph = new GD::Graph::lines( 700, 300 );
    my @data  = (
        [@x_date],
        [@y_ml],
    );
    
    
    $graph->set( 
        title           => TITLE,
        x_label         => "Day",
        y_label         => "Eliquid (ml)",
        long_ticks      => 1,
        y_max_value     => 16,
        y_min_value     => 0, 
        y_tick_number   => 8,
        y_label_skip    => 2,
        x_label_skip    => 4,
        bar_spacing     => 4,
        show_values => 1,
        values_vertical => 1,
        #types           => [ "linespoints", "linespoints" ],
    );
    
    #$graph->set_legend( "Morning", "Evening" );
    my $gd_image = $graph->plot( \@data );
    
    print $q->header( -type => "image/png", -expires => "now" );
    
    binmode STDOUT;
    
    open FILELST, "> ml.png" or die "ERRORE SCRITTURA FILE test1.png: $!";   
    binmode(FILELST); 
    #flock (FILELST, LOCK_EX);       # BLOCCA IL FILE 
    
    print FILELST $gd_image->png;
    
    #flock (FILELST, LOCK_UN);  
    close FILELST;	
    
    
    #####################################################################################
    use constant TITLE => "Consumo medio nicotina";
    
    my $q     = new CGI;
    my $graph = new GD::Graph::bars( 700, 300 );
    #my $graph = new GD::Graph::lines( 700, 300 );
    my @data  = (
        [@x_date],
        [@y_mg],
    );
    
    
    $graph->set( 
        title           => TITLE,
        x_label         => "Day",
        y_label         => "Nicotine (mg)",
        long_ticks      => 1,
        y_max_value     => 160,
        y_min_value     => 0, 
        y_tick_number   => 8,
        y_label_skip    => 2,
        x_label_skip    => 4,
        bar_spacing     => 4,
        show_values => 1,
        values_vertical => 1,
        #types           => [ "linespoints", "linespoints" ],
    );
    
    #$graph->set_legend( "Morning", "Evening" );
    my $gd_image = $graph->plot( \@data );
    
    print $q->header( -type => "image/png", -expires => "now" );
    
    binmode STDOUT;
    
    open FILELST, "> mg.png" or die "ERRORE SCRITTURA FILE test1.png: $!";   
    binmode(FILELST); 
    #flock (FILELST, LOCK_EX);       # BLOCCA IL FILE 
    
    print FILELST $gd_image->png;
    
    #flock (FILELST, LOCK_UN);  
    close FILELST;	
    
    
    ####################################################################################
    my $graph = new GD::Graph::mixed( 700, 300 );
    my @data  = (
        [@x_date],
        [@y_ml],
        [@y_mg],
    );
    
    use constant TITLE => "Consumo medio liquido e nicotina";
    $graph->set( 
        title           => TITLE,
        x_label         => "Day",
        two_axes     =>1,
        long_ticks      => 1,
        y1_label     =>'Eliquid',
        y2_label     =>'Nicotine',
        y1_max_value =>8,
        y2_max_value =>80,
        y_min_value     => 0,
        y_tick_number   => 8,
        y_label_skip    => 2,
        bar_spacing     => 4,
        x_label_skip    => 4,
        #show_values => 1,
        #values_vertical => 1,
        types           => [ "lines", "lines" ],
        dclrs       => [ 'green','red','blue', 'cyan'],
    );
    
    $graph->set_legend( "Eliquid (ml)", "Nicotine (mg)" );
    my $gd_image = $graph->plot( \@data );
    
    print $q->header( -type => "image/png", -expires => "now" );
    
    binmode STDOUT;
    
    open FILELST, "> mixed.png" or die "ERRORE SCRITTURA FILE test1.png: $!";   
    binmode(FILELST); 
    #flock (FILELST, LOCK_EX);       # BLOCCA IL FILE 
    
    print FILELST $gd_image->png;
    
    #flock (FILELST, LOCK_UN);  
    close FILELST;

    e gli eseguibili per chi non ha perl http://glumbouploads.com/zgjt90glf0ns
    Ultima modifica di aqix; 31-01-2012 alle 17:11

  2. I seguenti User ringraziano:


  3. #2
    Very Old Poster
    ESP User
    Very Old Poster L'avatar di Patalollo
    Data Registrazione
    Jan 2011
    Messaggi
    1,551
    P.Vaporizer
    Precise 10440
    Citato in
    112 Post(s)
    Taggato in
    0 Thread(s)
    Thanks
    55
    Thanks ricevuti: 172 in 111 Posts

    Predefinito

    Bello :-)

  4. Il seguente User ringrazia :


  5. #3
    Ispiratore di Chrom© ®
    ESP User
    Very Old Poster L'avatar di Sturusu
    Data Registrazione
    Apr 2010
    Località
    roma-palermo
    Messaggi
    6,376
    P.Vaporizer
    tutto ciò che è utile a non dare soldi ai politici e/o anafe
    Citato in
    553 Post(s)
    Taggato in
    5 Thread(s)
    Thanks
    1,007
    Thanks ricevuti: 3,629 in 1,610 Posts

    Predefinito

    bravo @aqix ;-)

    sarebbe interessante sapere dai produttori le vendite di aromi (%) sul mercato del fumodigitale. magari quando avranno meno casino nel gestire gli ordini

    una sorta di borsa degli aromi, il virginia si prende il 12,3% del mercato e lascia il darkvapour al 7%...
    Uno stato in cui difendersi costa più della pena da cui ci si vorrebbe difendere non è civile.
    Che palle chi dà il benvenuto a tutti i costi


    Quello che sta nel cuore del sobrio è sulla lingua dell'ubriaco.(Plutarco)
    ci sedemmo dalla parte del torto poichè tutti gli altri posti erano occupati B.Brecht

Discussioni Simili

  1. consumo batterie
    Di roby68 nel forum Discussioni Generali
    Risposte: 2
    Ultimo Messaggio: 19-09-2011, 18:46
  2. Consumo annuo di E-liquid
    Di Heracleum nel forum Discussioni Generali
    Risposte: 9
    Ultimo Messaggio: 10-09-2011, 10:36
  3. svapatore medio: un anno insieme!!!
    Di tuccino nel forum Testimonianze
    Risposte: 8
    Ultimo Messaggio: 16-01-2011, 07:35
  4. fogli di calcolo...
    Di sally nel forum E-Liquidi Mix e Ricette
    Risposte: 8
    Ultimo Messaggio: 21-12-2010, 13:08
  5. Problema con il foglio di calcolo
    Di Ray63 nel forum E-Liquidi Mix e Ricette
    Risposte: 8
    Ultimo Messaggio: 16-04-2010, 17:52

Tag per Questa Discussione

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •