Bonjour je suis nouveau sur le forum , et en perl.
J'ai pour mission de remetttre en fonctionnement un script qui recupere dans un fichier des donées pour les injecter en base mysql, et apparement, en ressortir egalement des fichiers ordonnés. Lorsque je le lance, il me sort cette erreur
or les champs censés etre divisés dans cette ligne ne correspondent pas a zero, voici la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part Illegal division by zero at ./script.pl line 69, <FDESC> line 5245
1214829884 STEP 0 r58841 3457 6666 6583 wrigleyref
Je vous joins le script
Help
Jai rajouté les lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 #!/usr/bin/env perl use strict; use warnings; use POSIX; use Date::Parse; use File::Copy ; # To connect mysql thru network use Net::MySQL; my $mysql = Net::MySQL->new( hostname => 'io', database => 'stats_test', user => 'bidule', password => 'machin', my $stat_dir = '/adm/pcs_admin/stat' ; copy("$stat_dir/test_stats","$stat_dir/last_run_stats") or die "file copy error : $!" ; my $stat_source = "$stat_dir/last_run_stats"; if ( -z $stat_source ) { print " file empty, exiting..." ; exit 0; } open( FDESC , "< $stat_source" ) or die "Can't open $orca_stat_source : $!"; foreach my $line ( readline(*FDESC) ) { my ( $timestamp, $Type, $Purify, $User, $Nb_test, $Test_duration, $Total_exec_time,$Prod ) ; my @Liste = split ( /\s+/ , $line ) ; my $Nb_el = $#Liste + 1 ; if ( $Nb_el == 7 ) { ( $timestamp, $Type, $Purify, $User, $Nb_test, $Test_duration, $Total_exec_time ) = @Liste ; } else { ( $timestamp, $Type, $Purify, $User, $Nb_test, $Test_duration, $Total_exec_time, $Prod ) = @Liste ; } my $avrg_test_time = $Test_duration/$Nb_test ; if ( $Nb_test==0 ) { $Test_duration = 0 ; } my %now_date = getHDate( $timestamp ); my $Date = sprintf ( "%4d-%02d-%02d" , $now_date{year} , $now_date{month} , $now_date{day}) ; if ( $Nb_el == 7 ) { $mysql->query(qq{ INSERT INTO stats ( Timestamp, Date, Type, Purify, User, Nb_test, Test_duration, Average_test_time, Total_exec_time ) VALUES ( '$timestamp','$Date', '$Type', '$Purify', '$User', '$Nb_test', '$Test_duration', '$avrg_test_time', '$Total_exec_time' ) }); } else { $mysql->query(qq{ INSERT INTO stats ( Timestamp, Date, Type, Purify, User, Nb_test, Test_duration, Average_test_time, Total_exec_time, Product ) VALUES ( '$timestamp','$Date', '$Type', '$Purify', '$User', '$Nb_test', '$Test_duration', '$avrg_test_time', '$Total_exec_time', '$Prod') }); } }
au cas ou, mais elles n'y étaient pas et l'erreur est la meme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if ( $Nb_test==0 ) { $Test_duration = 0 ; }
L'accés a la base est bien réalisé, et quelque entrées sont insérées, jusqu'a ce que le script s'arrete sur l'erreur citée.
Voici le bout de script qui devrait créer les fichiers.
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 if ($mysql->get_affected_rows_length == 0 ) { printf "The SQL query failed %s \n";$mysql->get_error_message; } close (FDESC) ; #close (FILE) ; # close de DB connexion $mysql->close; sub getHDate { my %Date = (); my ($sec,$min,$hour,$mday,$mon,$year) = gmtime($_[0]); $year += 1900; $mon += 1; $Date{second} = $sec; $Date{minute} = $min; $Date{hour} = $hour; $Date{day} = $mday; $Date{month} = $mon; $Date{year} = $year; $Date{smonth} = "Jan" if $mon == 1; $Date{smonth} = "Feb" if $mon == 2; $Date{smonth} = "Mar" if $mon == 3; $Date{smonth} = "Apr" if $mon == 4; $Date{smonth} = "May" if $mon == 5; $Date{smonth} = "Jun" if $mon == 6; $Date{smonth} = "Jul" if $mon == 7; $Date{smonth} = "Aug" if $mon == 8; $Date{smonth} = "Sep" if $mon == 9; $Date{smonth} = "Oct" if $mon == 10; $Date{smonth} = "Nov" if $mon == 11; $Date{smonth} = "Dec" if $mon == 12; return %Date; }
Partager