[Perl] debeuuugage de la mort qui tue!!!!

debeuuugage de la mort qui tue!!!! [Perl] - Perl - Programmation

Marsh Posté le 29-04-2005 à 09:59:58    

Bon!!! je comprend vraiment pas j'ai viré tout les sous programme pour voir et ça marche tjrs pas!! je remet le bon de code pour voir si je suis fou ou si je me suis belle et bien planté: je vous rapel que le dernier print "Fichier fils=@buffer_fils\n"; ne me retourne rien !!!!!! alors que le  
print "Fichier pere=@buffer_pere\n"; est ok!!!!!!! il est ou le prob certainement dans les variable mais je voie pas!!!!
 
#! /usr/bin/perl
use strict;
use SNMP_util "1.04";
my $i = 0;
my $IP = '130.71.30.200';
my @oid_FCSerror = (1,3,6,1,2,1,10,7,2,1,3);
my $seconde;
my $minute;
my $heure;
my $jour;
my $mois;
my $annee;
my $wday;
my $yday;
my $isdst;
my $maintenant;
my @FCS_index;
my @buffer_fils;
my @buffer_pere;
my $file;
my $cpt;
my $FCSerror;
my @oid_FCS_ok;
 
my @mc;
 
 
&get_FCS_error_index;
&get_nom_fils;
 
  print "Aucun fichier de sauvegarde!! Création du fichier père!.\n";
   
  print "coucou ici papa\n";
  ($seconde,$minute,$heure,$jour,$mois,$annee,$wday,$yday,$isdst) = localtime(time);
  $annee += 1900;
  $mois++;
  $jour = ($jour - 1);
  $file = "$jour-$mois-$annee";
  print"file=$file\n";
  open(FIC,">>$file" );
  while($i < $cpt) {
   push(@oid_FCSerror,@FCS_index[$i]);
   my @oid_FCS_ok = join('.',@oid_FCSerror);
   my $FCSerror = snmpget ($IP,@oid_FCS_ok);
   pop(@oid_FCSerror);
   print FIC"<",scalar localtime,"> $IP  FCS_error=$FCSerror  FCS_index=@FCS_index[$i]\n";
   $i++;
  }
  close(FIC);
  print "coucou ici papa\n";
  ($seconde,$minute,$heure,$jour,$mois,$annee,$wday,$yday,$isdst) = localtime(time);
  $annee += 1900;
  $mois++;
  $jour = ($jour - 1);
  $file = "$jour-$mois-$annee";
  print"file=$file\n";
  open (FIC,"$file" );
  @buffer_pere = <FIC>;
  close(FIC);
  print "Fichier père ta race =\n@buffer_pere\n";
   
   
   
  ****************************************************
   
   
  print "coucou ici filston\n";
  ($seconde,$minute,$heure,$jour,$mois,$annee,$wday,$yday,$isdst) = localtime(time);
  $annee += 1900;
  $mois++;
  $file = "$jour-$mois-$annee";
  print"file=$file\n";
  open(FIC,">>$file" );
  while($i < $cpt) {
   push(@oid_FCSerror,@FCS_index[$i]);
   my @oid_FCS_ok = join('.',@oid_FCSerror);
   my $FCSerror = snmpget ($IP,@oid_FCS_ok);
   pop(@oid_FCSerror);
   print FIC"<",scalar localtime,"> $IP  FCS_error=$FCSerror  FCS_index=@FCS_index[$i]\n";
   $i++;
  }
  close(FIC);
  print "coucou ici filston\n";
  ($seconde,$minute,$heure,$jour,$mois,$annee,$wday,$yday,$isdst) = localtime(time);
  $annee += 1900;
  $mois++;
  $file = "$jour-$mois-$annee";
  print"file=$file\n";
  open (FIC,"$file" );
  @buffer_fils= <FIC>;
  close(FIC);
  print "Fichier fils=@buffer_fils\n";

Reply

Marsh Posté le 29-04-2005 à 09:59:58   

Reply

Marsh Posté le 29-04-2005 à 10:18:05    

heuuuu où est ce que tu assignes ta variable $cpt ???

Reply

Marsh Posté le 29-04-2005 à 10:21:13    

Heuuuuu MALA comme notre malette qui ROX? ou pas du tout?
#! /usr/bin/perl  
use strict;  
use SNMP_util "1.04";  
my $i = 0;  
my $IP = '130.71.30.200';  
my @oid_FCSerror = (1,3,6,1,2,1,10,7,2,1,3);  
my $seconde;  
my $minute;  
my $heure;  
my $jour;  
my $mois;  
my $annee;  
my $wday;  
my $yday;  
my $isdst;  
my $maintenant;  
my @FCS_index;  
my @buffer_fils;  
my @buffer_pere;  
my $file;  
my $cpt; <===================== ICI!!! non?
my $FCSerror;  
my @oid_FCS_ok;  
 
my @mc;


Message édité par mc40 le 29-04-2005 à 10:22:22
Reply

Marsh Posté le 29-04-2005 à 10:25:42    

ben nan .. là, tu la déclares !!!
on recommence : où est-ce que tu mets une valeur dans $cpt ?
Parce là, tes while($i < $cpt) doivent danser la gigue avec $cpt non assigné ! o_O


Message édité par Mr Mala le 29-04-2005 à 10:26:03
Reply

Marsh Posté le 29-04-2005 à 10:32:38    

heuuu alors je vois pas la diff entre assigner et déclarer je te remet mon code en entier:
#! /usr/bin/perl  
use strict;  
use SNMP_util "1.04";  
my $i = 0;  
my $IP = '192.168.0.1';  
my @oid_FCSerror = (1,3,6,1,2,1,10,7,2,1,3);  
my $seconde;  
my $minute;  
my $heure;  
my $jour;  
my $mois;  
my $annee;  
my $wday;  
my $yday;  
my $isdst;  
my $maintenant;  
my @FCS_index;  
my @buffer_fils;  
my @buffer_pere;  
my $file;  
my $cpt;  
my $FCSerror;  
my @oid_FCS_ok;  
my $z=0;  
my @mc;  
 
 
&get_FCS_error_index;  
&get_nom_fichier_fils;  
if( 1 == open(FIC,"$file" )){  
 @buffer_fils = <FIC>;  
   
}  
else{  
 print "Erreur pas de fichier fils! Recherche d'un fichier père\n";  
 &get_nom_fichier_pere;  
 if( 1 == open(FIC,"$file" )){  
  print "Fichier père trouvé\n";  
  @buffer_pere = <FIC>;  
  close(FIC);  
  &set_fichier_fils;  
 }  
 else{  
  print "Aucun fichier de sauvegarde!! Création du fichier père!.\n";  
   
  &get_nom_fichier_fils;  
  &get_FCS_error;  
  &get_nom_fichier_fils;  
  open (FIC,"$file" );  
  @mc = <FIC>;  
  close(FIC);  
  print "Fichier fils=\n@mc\n";    
   
  &get_nom_fichier_pere;  
  &get_FCS_error;  
  &get_nom_fichier_pere;  
  open (FIC,"$file" );  
  @buffer_pere = <FIC>;  
  close(FIC);  
  print "Fichier père=\n@buffer_pere\n"; <========== ici
 
 
 }  
 
}  
 
sub set_fichier_fils {  
 &get_nom_fichier_fils;  
 open(FIC,">$file" );  
 &get_FCS_error;  
 close(FIC);  
}  
sub get_FCS_error {  
 open(FIC,">>$file" );  
 while($i < $cpt) {  
  push(@oid_FCSerror,@FCS_index[$i]);  
  my @oid_FCS_ok = join('.',@oid_FCSerror);  
  my $FCSerror = snmpget ($IP,@oid_FCS_ok);  
  pop(@oid_FCSerror);  
  print FIC"<",scalar localtime,"> $IP  FCS_error=$FCSerror  FCS_index=@FCS_index[$i]\n";  
  $i++;  
 }  
 close(FIC);  
}  
 
sub get_FCS_error_index {  
 @FCS_index = map {/(\d+)/} snmpwalk ($IP,'1.3.6.1.2.1.10.7.2.1.1');  
 $cpt = scalar @FCS_index;  
}  
 
sub get_nom_fichier_fils{  
 print "coucou ici filston\n";  
 ($seconde,$minute,$heure,$jour,$mois,$annee,$wday,$yday,$isdst) = localtime(time);  
 $annee += 1900;  
 $mois++;  
 $file = "$jour-$mois-$annee";  
 print"file=$file\n";  
}  
sub get_nom_fichier_pere{  
 print "coucou ici papa\n";  
 ($seconde,$minute,$heure,$jour,$mois,$annee,$wday,$yday,$isdst) = localtime(time);  
 $annee += 1900;  
 $mois++;  
 $jour = ($jour - 1);  
 $file = "$jour-$mois-$annee";  
 print"file=$file\n";  
}  
 
c'est tjrs le deuxième petit bloc dans mon
"else{ print "Aucun fichier de sauvegarde!! Création du fichier père!.\n";"
qui print pas !!!

Reply

Marsh Posté le 29-04-2005 à 10:47:19    

my $cpt='o';
et comme ça c mieux???

Reply

Marsh Posté le 29-04-2005 à 10:51:22    

non c'est pas mieux :( les boules!!! je vais tout casser!!

Reply

Marsh Posté le 29-04-2005 à 10:53:10    

Ben voilà ! "$cpt = scalar @FCS_index;" ... c'est déjà plus clair avec tout le code !
 
bon ben va revoir la doc de la fonction 'open' .. tu verras que tu ne crées aucun fichier avec 'open(FIC,"$file" );' ...
 
edit: et en plus, tu le fais correctement plus bas 'open(FIC,">$file" );' ... :heink:


Message édité par Mr Mala le 29-04-2005 à 10:56:49
Reply

Marsh Posté le 29-04-2005 à 11:02:00    

tu me dis qu'avec ça  :
  &get_nom_fichier_fils;  
  &get_FCS_error;  
  &get_nom_fichier_fils;  
  open (FIC,"$file" );  
  @mc = <FIC>;  
  close(FIC);  
  print "Fichier fils=\n@mc\n";    
     
  &get_nom_fichier_pere;  
  &get_FCS_error;  
  &get_nom_fichier_pere;  
  open (FIC,"$file" );  
  @buffer_pere = <FIC>;  
  close(FIC);  
  print "Fichier père=\n@buffer_pere\n";
 
je ne crée pas de fichier!!!! pour tant ça me crée bien mes deux fichiers mais celui du deuxième bloc d'instruction (la le père) est vide!!! je vais mater la doc!!!

Reply

Marsh Posté le 29-04-2005 à 11:07:51    

heuuu tu ne lis pas ce que j'écris ??? :p
edit: et en plus, tu le fais correctement plus bas 'open(FIC,">$file" );'


Message édité par Mr Mala le 29-04-2005 à 11:08:49
Reply

Marsh Posté le 29-04-2005 à 11:07:51   

Reply

Marsh Posté le 29-04-2005 à 11:11:20    

bon je vais reprendre tout mon code je reviens!!

Reply

Marsh Posté le 29-04-2005 à 11:52:30    

bon je vous remet le prog avec kelke modif mais ça marche tjrs pas!!!!
 
#! /usr/bin/perl5
use strict;
use SNMP_util "1.04";
my $i = 0;
my $IP = '192168.0.1';
my @oid_FCSerror = (1,3,6,1,2,1,10,7,2,1,3);
my $seconde;
my $minute;
my $heure;
my $jour;
my $mois;
my $annee;
my $wday;
my $yday;
my $isdst;
my $maintenant;
my @FCS_index;
my @buffer_fils;
my @buffer_pere;
my $file;
my $cpt=0;
my $FCSerror;
my @oid_FCS_ok;
my @mc;
 
 
&get_FCS_error_index;
&get_nom_fichier_fils;
 
if( 1 == open(FIC,"<$file" )) {
 @buffer_fils = <FIC>;
}
else {
 print "Erreur pas de fichier fils! Recherche d'un fichier père\n";
 &get_nom_fichier_pere;
 if( 1 == open(FIC,"<$file" )) {
  print "Fichier père trouvé\n";
  @buffer_pere = <FIC>;
  close(FIC);
  &set_fichier_fils;
 }
 else {
  print "Aucun fichier de sauvegarde!! Création du fichier père!.\n";
  &set_fichier_fils;
  &set_fichier_pere;
 }
}
 
sub set_fichier_pere {
 &get_nom_fichier_pere;
 &get_FCS_error;
}
sub set_fichier_fils {
 &get_nom_fichier_fils;
 &get_FCS_error;
}
sub get_FCS_error {
 open(FIC,">$file" );
 while($i < $cpt) {
  push(@oid_FCSerror,@FCS_index[$i]);
  @oid_FCS_ok = join('.',@oid_FCSerror);
  $FCSerror = snmpget ($IP,@oid_FCS_ok);
  pop(@oid_FCSerror);
  print FIC"<",scalar localtime,"> $IP  FCS_error=$FCSerror  FCS_index=@FCS_index[$i]\n";
  $i++;
 }
 close(FIC);
}
 
sub get_FCS_error_index {
 @FCS_index = map {/(\d+)/} snmpwalk ($IP,'1.3.6.1.2.1.10.7.2.1.1');
 $cpt = scalar @FCS_index;
}
 
sub get_nom_fichier_fils {
 ($seconde,$minute,$heure,$jour,$mois,$annee,$wday,$yday,$isdst) = localtime(time);
 $annee += 1900;
 $mois++;
 $file = "$jour-$mois-$annee";
 print"coucou ici filston =>file=$file\n";
}
sub get_nom_fichier_pere {
 ($seconde,$minute,$heure,$jour,$mois,$annee,$wday,$yday,$isdst) = localtime(time);
 $annee += 1900;
 $mois++;
 $jour = ($jour - 1);
 $file = "$jour-$mois-$annee";
 print"coucou ici papa => file=$file\n";
}
 
allez 500euroS de prime a celui qui trouve le bug!!! :bounce:


Message édité par mc40 le 29-04-2005 à 11:54:07
Reply

Marsh Posté le 29-04-2005 à 12:02:15    

déjà, est-ce normal que tu ne joues pas avec $jour dans get_nom_fichier_fils ?

Reply

Marsh Posté le 29-04-2005 à 12:08:35    

oui le fichiers fils est le fichier du jour et le fichier pere est le fichier d'hier je test donc si il y a un fichier fils car lorsque l'on change de jours le fichier fils devien père et donc il faut regénérer un fichier fils d'ou le jours -1 pour le père!!!

Reply

Marsh Posté le 29-04-2005 à 12:13:09    

Ok .. et donc, tu me répètes le problème ?
( et pas avec des "ça printe pas !" ) ...
Parts d'une situation initiale SANS fichiers .. tu lances ton truc et  
1) tu obtiens quoi ?
2) tu t'attendais à obtenir quoi ?
3) tu as quoi comme message à l'écran ?
 
( parce que là, je n'ai pas spécialement de problème .. il me génère bien les 2 fichiers ... )


Message édité par Mr Mala le 29-04-2005 à 12:14:25
Reply

Marsh Posté le 29-04-2005 à 14:21:10    

ok donc on part de 0: on a zero fichier, donc j'en crée deux arbitrairement, je suis donc dans la boucle:
 
 
else {
    print "Aucun fichier de sauvegarde!! Création du fichier père!.\n";
    &set_fichier_fils;
    &set_fichier_pere;
}
 
 
avec pour sub routine &set_fichier_pere et &set_fichier_fils qui me crée mes deux fichiers avec comme contenu le retour de &get_FCS_error donc:
j'indique le nom de fichier avec &get_nom_fichier_pere par exemple et je le rempli avec &get_FCS_error.
 
 
sub set_fichier_pere{
    &get_nom_fichier_pere;
    &get_FCS_error;
}
sub set_fichier_fils{          
    &get_nom_fichier_fils;
    &get_FCS_error;
}
 
 
A la fin de ces sub routine mes fichiers sont normalement crées et remplis!!
Donc je reprend ma boucle qui doit me créer mes fichiers:
 
else {
    print "Aucun fichier de sauvegarde!! Création du fichier père!.\n";
    &set_fichier_fils;
    &set_fichier_pere; # C'EST LA QUE CA MERDE" fichier vide!
}
 
écrite comme ça le résulta sera création des deux fichiers avec le fichier fils plein de donnée et un fichier pere vide!!!!!
si je l'écris avec le pere en premier et le fils en second;
 
 
else {
    print "Aucun fichier de sauvegarde!! Création du fichier père!.\n";
    &set_fichier_pere;    
    &set_fichier_fils; # C'EST LA QUE CA MERDE" au final le fichier est vide
}
 
 
écrite comme ça le résulta sera création des deux fichiers avec le fichier pere plein de donnée et un fichier fils vide!!!!!
La question est donc pourquoi la sub routine placée en seconde place ne marche pas alors qu'elle est bien executé j'ai tracer totu ça pour voir!!!!????
 
PS: la prime monte a 1000 euros! :ouch:


Message édité par mc40 le 29-04-2005 à 16:44:28
Reply

Marsh Posté le 29-04-2005 à 14:35:46    

j'ai viré ce message il etait trop nul la fatigue certainement!!


Message édité par mc40 le 29-04-2005 à 16:45:24
Reply

Marsh Posté le 29-04-2005 à 14:41:29    

Salut,
J'essai de comprendre ce qui se passe, mais pour le moment je n'ai pas de piste.
Toutefois, il y a quelque chose que je comprend pas c'est que $file a une valeur undefined au debut de par son initialisation et la premiere chose qui est faite est l'ouverture en ecriture de cette var undefined.
 
Peut etre que je dis des sottises, mais c'est pour me permettre de comprendre.
 
Manuxme

Reply

Marsh Posté le 29-04-2005 à 14:43:36    

Oupsss.... Pardon, je me suis trompe de sub ruotine lors de la  lecture du script....
Ne tient pas compte de mon poste precedent.
 
Manuxme

Reply

Marsh Posté le 29-04-2005 à 14:45:27    

Par contre pour ton probleme de syntax error, il semble que tu as oublie de ferme une "}"  au premier if.
 
Manuxme

Reply

Marsh Posté le 29-04-2005 à 15:20:49    

mc40 a écrit :


La question est donc pourquoi la sub routine placée en seconde place ne marche pas alors qu'elle est bien executé j'ai tracer totu ça pour voir!!!!????


 
bon mélange pas tout : soit elle marche -> elle s'exécute, soit elle marche pas -> elle s'exécute pas ou elle plante ...
Dans ton cas, elle s'éxécute ... donc elle marche ... c'est juste qu'elle n'a pas les effets que tu espérais ...
 
Bon de toute façon, tu n'es pas clair avec tes "sub routine en seconde place" ...
Mets des commentaires et note "# C'EST LA QUE CA MERDE" ... ça sera plus clair ...
Moi, ton programme, je l'ai lancé, il a tourné et m'a pondu 2 fichiers ... ( date du jour et hier )  
Pas d'erreur, pas de warning, rien ...  
Et je n'ai toujours pas mieux compris ce que tu espères comme comportement !
( "ça marche pas", c'est pas un comportement, c'est un avis personnel ! .. pour moi "ça marche" ... )
 

Reply

Marsh Posté le 29-04-2005 à 16:40:40    

Le truc pour faire simple c'est que le fichier qui est crée en deuxième est vide de chez vide pourquoi donc?

Reply

Marsh Posté le 29-04-2005 à 16:49:15    

'taiiiin c'est malin !!! :heink:
TU NE REINITIALISES PAS TON $i à 0 !!!!!!!!!
-> la boucle while() pour la création du père se termine directement !!!!!

Reply

Marsh Posté le 29-04-2005 à 17:07:24    

:pt1cable: Je t'aime!!!!!! putain je suis vraiment trop nullllllllllllllllllllll
je t'aime je t'aime!!!!!!!!!!
 
Merci encore  :bounce:  
 
certainement a tres bientot pour des erreur encore plus foles  :hello:

Reply

Marsh Posté le 29-04-2005 à 17:07:49    

Je vais passer un bon week-end!!

Reply

Marsh Posté le 02-05-2005 à 13:39:52    

y'a des fonctions pour rendre plus beau ton code tu sais
 

Code :
  1. sub get_nom_fichier_fils{ 
  2. print "coucou ici filston\n"; 
  3. ($seconde,$minute,$heure,$jour,$mois,$annee,$wday,$yday,$isdst) = localtime(time); 
  4. $annee += 1900; 
  5. $mois++; 
  6. $file = "$jour-$mois-$annee"; 
  7. print"file=$file\n"; 
  8. }


 

Code :
  1. use POSIX;
  2. my $file = strftime('%d-%m-%Y', localtime(time()));


Message édité par burgergold le 02-05-2005 à 13:40:03
Reply

Marsh Posté le 05-05-2005 à 16:36:29    

Oui c'est sur mais je découvre le perl et je trouve que les doc que l'on trouve sur le net sont pas trop expréssives enfin mais c'est sur que je suis preuneur si tu as d'autre truc!!!
Car moi a la base la prog pas trop!!!!
Haaa oui une autre question!! la je code tout ça sur un poste linux mais si j'install activePerl sur une machine XP tout mes scripts fonctioneront donc sous XP??
Question a laquelle la reponse doit etre oui je pense mais je la pose quand meme.
Donc si je pousse mon résonement MRTG qui est ecrit en perl peut tourner sur XP aux conditions de changer tout les #! /usr/bin/perl5 en #! c:\perl  au debut de chaque fichier!!
Si quelqu'un a une idée sur la question ??

Reply

Marsh Posté le 06-05-2005 à 10:40:28    

Code :
  1. #!/usr/bin/perl

Reply

Marsh Posté le 06-05-2005 à 18:21:07    

j'ai pas tout compris bioinfo_djib!!!!

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed