Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
716 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1065373
mc40
Posté le 29-04-2005 à 09:59:58  profilanswer
 

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";

mood
Publicité
Posté le 29-04-2005 à 09:59:58  profilanswer
 

n°1065387
Mr Mala
Posté le 29-04-2005 à 10:18:05  profilanswer
 

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

n°1065392
mc40
Posté le 29-04-2005 à 10:21:13  profilanswer
 

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
n°1065397
Mr Mala
Posté le 29-04-2005 à 10:25:42  profilanswer
 

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
n°1065410
mc40
Posté le 29-04-2005 à 10:32:38  profilanswer
 

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 !!!

n°1065426
mc40
Posté le 29-04-2005 à 10:47:19  profilanswer
 

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

n°1065429
mc40
Posté le 29-04-2005 à 10:51:22  profilanswer
 

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

n°1065432
Mr Mala
Posté le 29-04-2005 à 10:53:10  profilanswer
 

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
n°1065443
mc40
Posté le 29-04-2005 à 11:02:00  profilanswer
 

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!!!

n°1065453
Mr Mala
Posté le 29-04-2005 à 11:07:51  profilanswer
 

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
mood
Publicité
Posté le 29-04-2005 à 11:07:51  profilanswer
 

n°1065456
mc40
Posté le 29-04-2005 à 11:11:20  profilanswer
 

bon je vais reprendre tout mon code je reviens!!

n°1065508
mc40
Posté le 29-04-2005 à 11:52:30  profilanswer
 

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
n°1065526
Mr Mala
Posté le 29-04-2005 à 12:02:15  profilanswer
 

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

n°1065542
mc40
Posté le 29-04-2005 à 12:08:35  profilanswer
 

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!!!

n°1065548
Mr Mala
Posté le 29-04-2005 à 12:13:09  profilanswer
 

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
n°1065722
mc40
Posté le 29-04-2005 à 14:21:10  profilanswer
 

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
n°1065759
mc40
Posté le 29-04-2005 à 14:35:46  profilanswer
 

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


Message édité par mc40 le 29-04-2005 à 16:45:24
n°1065768
Manuxme
Posté le 29-04-2005 à 14:41:29  profilanswer
 

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

n°1065775
Manuxme
Posté le 29-04-2005 à 14:43:36  profilanswer
 

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

n°1065779
Manuxme
Posté le 29-04-2005 à 14:45:27  profilanswer
 

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

n°1065825
Mr Mala
Posté le 29-04-2005 à 15:20:49  profilanswer
 

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" ... )
 

n°1065980
mc40
Posté le 29-04-2005 à 16:40:40  profilanswer
 

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

n°1065992
Mr Mala
Posté le 29-04-2005 à 16:49:15  profilanswer
 

'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 !!!!!

n°1066020
mc40
Posté le 29-04-2005 à 17:07:24  profilanswer
 

: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:

n°1066022
mc40
Posté le 29-04-2005 à 17:07:49  profilanswer
 

Je vais passer un bon week-end!!

n°1068696
burgergold
5$? va chez l'diable!
Posté le 02-05-2005 à 13:39:52  profilanswer
 

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
n°1072973
mc40
Posté le 05-05-2005 à 16:36:29  profilanswer
 

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 ??

n°1073619
bioinfo_dj​ib
Posté le 06-05-2005 à 10:40:28  profilanswer
 

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

n°1074263
mc40
Posté le 06-05-2005 à 18:21:07  profilanswer
 

j'ai pas tout compris bioinfo_djib!!!!

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

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

 

Sujets relatifs
[Perl] Optimisation?[PERL] lire fichier en paragraphe
certificats SSL + [ Coldfusion ou Perl ][Perl] Question toute bête?
[ Perl ] conversion HEXA => ASCIIPerl + html
[PERL]Est-ce possible de ne pas faire attention à la case?[perl] connaitre la classe d'un objet
obtenir mon adresse IP en PerlExtension PHP/PERL
Plus de sujets relatifs à : [Perl] debeuuugage de la mort qui tue!!!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR