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

  FORUM HardWare.fr
  Programmation
  Perl

  Besoin d'un coup de main (fonction strftime)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Besoin d'un coup de main (fonction strftime)

n°2297286
ghost line
Posté le 06-03-2017 à 11:19:44  profilanswer
 

Salut à tous !
 
J'ai besoin d'un coup de main ... je suis en galère sur un script en Perl, alors que je ne programme pas du tout dans ce langage (je "dev" en AutoIt, c'est dire :)).
 

Code :
  1. #!/usr/bin/env perl
  2. use warnings;
  3. use strict;
  4. use Sys::Hostname;
  5. use POSIX;
  6. #print strftime("MAG_%Y%M%d_nbcli_%H00.%a", localtime());
  7. #Prefix CodeSoc f1 f2 f3 ...
  8. my $hmin=0;
  9. my $hmax=2400;
  10. my $pivot=0;
  11. while(1) {
  12.   if($ARGV[0] eq "-hmin" || $ARGV[0] eq "hmin" ) {
  13.     shift;
  14.     $hmin=$ARGV[0];
  15.   } elsif($ARGV[0] eq "-hmax" || $ARGV[0] eq "hmax" ) {
  16.     shift;
  17.     $hmax=$ARGV[0];
  18.   } elsif($ARGV[0] eq "-pivot" || $ARGV[0] eq "pivot" ) {
  19.     shift;
  20.     $pivot=$ARGV[0];
  21.   } else {
  22.     last;
  23.   }
  24.   shift;
  25. }
  26. if($#ARGV<2) {
  27. print "$0 Prefix CodeSoc F1 [F2 [F3 ... ]]\n";
  28. exit(3);
  29. }
  30. my $magnum="999";
  31. my $name=hostname();
  32. #$name="SRVSC0150";
  33. if ($name =~ /^POS([0-9]{3})([0-9]{3})/ ) {
  34.   $magnum=$1;
  35. } elsif ($name =~ /^SRVSC[0-9]([0-9]{3})/) {
  36.   $magnum=$1;
  37. }
  38. my $prefix=$ARGV[0];
  39. my $codesoc="$ARGV[1]";
  40. my $msg="Prefix: $prefix, codesoc=$codesoc, ";
  41. my $res=0;
  42. my $now=time();
  43. my @today=localtime($now);
  44. my @fileday;
  45. if($today[2]*100+$today[1]<$pivot) {
  46.    @fileday=localtime($now-3600*24);
  47. } else {
  48.    @fileday=@today;
  49. }
  50. if(!(($today[2]*100+$today[1])>=$hmin && ($today[2]*100+$today[1])<$hmax)) {
  51.   print "En dehors des heures d'export ($hmin-$hmax)\n";
  52.   exit(0);
  53. }
  54. for(my $f=2; $f<=$#ARGV; $f++) {
  55.   my $fn=$ARGV[$f];
  56.   $fn =~ s/%cs/$codesoc/g;
  57.   $fn =~ s/%mg/$magnum/g;
  58.   $fn=strftime($fn, @fileday);
  59.   $msg=$msg.$fn." ";
  60.   $fn=~ s/\.Mon/.Lun/g;
  61.   $fn=~ s/\.Tue/.Mar/g;
  62.   $fn=~ s/\.Wed/.Mer/g;
  63.   $fn=~ s/\.Thu/.Jeu/g;
  64.   $fn=~ s/\.Fri/.Ven/g;
  65.   $fn=~ s/\.Sat/.Sam/g;
  66.   $fn=~ s/\.Sun/.Dim/g;
  67.   if(-f $prefix."/".$fn) {
  68.      $msg.="OK.";
  69.   } else {
  70.     $msg.="KO";
  71.     $res=2;
  72.   }
  73.   $msg.=" ";
  74.   $fn=~ s/\.Lun/.Mon/g;
  75.   $fn=~ s/\.Mar/.Tue/g;
  76.   $fn=~ s/\.Mer/.Wed/g;
  77.   $fn=~ s/\.Jeu/.Thu/g;
  78.   $fn=~ s/\.Ven/.Fri/g;
  79.   $fn=~ s/\.Sam/.Sat/g;
  80.   $fn=~ s/\.Dim/.Sun/g;
  81. }
  82. print $msg."\n";
  83. exit($res);


 
Mon problème est le suivant : ce script (destiné à fonctionner dans Nagios) est censé détecter la présence de fichiers ayant une extension .lun, .mar, .mer, etc. , fichier qui doit être généré côté client suivant le jour de la semaine.
 
Le truc, c'est que le script fait une contrôle sur des .mon, .sun, .wed, etc. car Nagios est hébergé sur une Debian localisée en anglais. Il va de soi que je n'ai pas les droits pour changer la localisation (ce serait trop facile).
 
Donc le coup de main dont j'ai besoin, ce serait d'avoir avant le contrôle du nom du fichier une petite table de correspondance qui modifie la valeur de la variable de telle façon que l'extension soit dans la bonne langue ...
 
Merci d'avance !

 
Edit : voilà qui est implémenté ! Merci gilou :)


Message édité par ghost line le 07-03-2017 à 16:16:59
mood
Publicité
Posté le 06-03-2017 à 11:19:44  profilanswer
 

n°2297309
gilou
Modérateur
Modzilla
Posté le 06-03-2017 à 17:12:34  profilanswer
 

Et si tu donnais des exemples de valeurs pour tes f1 f2...
qu'on aie une idée plus précise.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2297310
ghost line
Posté le 06-03-2017 à 17:31:23  profilanswer
 

Faut que je trouve d'où sort cette valeur ! Les joies de reprendre un truc mal branlé fait par quelqu'un d'autre ...
 
Edit : en fait, au vu des résultat, $codesoc contient un code magasin sur 3 caractères.
 
Voilà une valeur qui sort de ce script :  
 
187_20170306_nb_cli_1700.Mon  
 
(magasin 187, journée du 6/3/2017, fichier nb_cli, 17:00)
 
Le truc, c'est que j'ai besoin de 187_20170306_nb_cli_1700.Lun ...


Message édité par ghost line le 06-03-2017 à 17:35:10
n°2297311
gilou
Modérateur
Modzilla
Posté le 06-03-2017 à 17:56:35  profilanswer
 

Si c'est que ça, a priori, après le  
$msg=$msg.$fn." ";
tu fais un
$msg =~ s/\.Mon/.Lun/g;
$msg =~ s/\.Tue/.Mar/g;
...
$msg =~ s/\.Sun/.Dim/g;
et ça devrait coller
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

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

  Besoin d'un coup de main (fonction strftime)

 

Sujets relatifs
svp besoin d'aide pour les creation d'un serviceOuvrir tous les classeurs et selec les feuilles en fonction du nom
[REGLÉ] Fonction php avec variables : débutantBesoin daide
fonction achatFonction backspace et mode insert versus overwrite.
Matplotlib variable -> fonctionFonction Random
Utilisation de tableaux - programme débutant (besoin d'aide !)besoin d'un code java EE pour authentifier un login et un password
Plus de sujets relatifs à : Besoin d'un coup de main (fonction strftime)


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