Besoin d'un coup de main (fonction strftime)
Ghost Line
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
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 :)).
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 !
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 :)).
#!/usr/bin/env perl
use warnings;
use strict;
use Sys::Hostname;
use POSIX;
#print strftime("MAG_%Y%M%d_nbcli_%H00.%a", localtime());
#Prefix CodeSoc f1 f2 f3 ...
my $hmin=0;
my $hmax=2400;
my $pivot=0;
while(1) {
if($ARGV[0] eq "-hmin" || $ARGV[0] eq "hmin" ) {
shift;
$hmin=$ARGV[0];
} elsif($ARGV[0] eq "-hmax" || $ARGV[0] eq "hmax" ) {
shift;
$hmax=$ARGV[0];
} elsif($ARGV[0] eq "-pivot" || $ARGV[0] eq "pivot" ) {
shift;
$pivot=$ARGV[0];
} else {
last;
}
shift;
}
if($#ARGV<2) {
print "$0 Prefix CodeSoc F1 [F2 [F3 ... ]]\n";
exit(3);
}
my $magnum="999";
my $name=hostname();
#$name="SRVSC0150";
if ($name =~ /^POS([0-9]{3})([0-9]{3})/ ) {
$magnum=$1;
} elsif ($name =~ /^SRVSC[0-9]([0-9]{3})/) {
$magnum=$1;
}
my $prefix=$ARGV[0];
my $codesoc="$ARGV[1]";
my $msg="Prefix: $prefix, codesoc=$codesoc, ";
my $res=0;
my $now=time();
my @today=localtime($now);
my @fileday;
if($today[2]*100+$today[1]<$pivot) {
@fileday=localtime($now-3600*24);
} else {
@fileday=@today;
}
if(!(($today[2]*100+$today[1])>=$hmin && ($today[2]*100+$today[1])<$hmax)) {
print "En dehors des heures d'export ($hmin-$hmax)\n";
exit(0);
}
for(my $f=2; $f<=$#ARGV; $f++) {
my $fn=$ARGV[$f];
$fn =~ s/%cs/$codesoc/g;
$fn =~ s/%mg/$magnum/g;
$fn=strftime($fn, @fileday);
$msg=$msg.$fn." ";
if(-f $prefix."/".$fn) {
$msg.="OK.";
} else {
$msg.="KO";
$res=2;
}
$msg.=" ";
}
print $msg."\n";
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 !
A voir également:
- Besoin d'un coup de main (fonction strftime)
- Fonction si et - Guide
- Comment télécharger toutes les photos de google photos d'un coup ? - Guide
- Comment supprimer toutes les publications sur facebook d'un coup - Guide
- Virginie organise un rallye avec 30 équipes. elle veut créer un code pour désigner chaque équipe. elle a commencé à la main, mais elle voudrait le faire calculer à l'aide d'une formule. proposez une formule comportant une seule fonction et à recopier vers le bas dans la colonne a du fichier à télécharger. quelle formule sera en a9 ? ✓ - Forum Excel
- Fonction miroir - Guide
1 réponse
Salut,
Si tu n'as pas la possibilité de changer la locale du système par défaut, il peut, en revanche, être possible que la locale française soit installée, bien que non activée par défaut.
Pour voir si c'est le cas, en ligne de commande tape
Si tu as une locale française installée, tu peux l'utiliser pour tes dates dans le cadre de l'environnement d'exécution de ton script Perl en utilisant
Cela modifiera la locale pour le process de ton script Perl (pas pour le système).
Sinon, tu peux simplement faire un tableau associatif, qui va te permettre de faire correspondre les Mon, Tue, Wed, Thu, Fri, Sat, Sun en lun, mar, mer, jeu, ven, sam, dim. Un truc comme cela :
donne :
J'ai importé locale_h de POSIX et locale pour mon test, afin de forcer la locale à un format de date US avec setlocale(), pour la démo (sur ma Debian, la locale est fr_FR.utf8 par défaut).
Tu n'as pas à le faire, vu que ta locale est déjà en date US.
A la réflexion, cela peut avoir du sens de le faire, si ton script doit fonctionner dans des environnements hétérogènes, avec des locales éventuellement exotiques, de forcer la locale en C, qui sera toujours présente, pour avoir un résultat toujours cohérent.
Dal
Si tu n'as pas la possibilité de changer la locale du système par défaut, il peut, en revanche, être possible que la locale française soit installée, bien que non activée par défaut.
Pour voir si c'est le cas, en ligne de commande tape
locale -aet vois ce qui sort.
Si tu as une locale française installée, tu peux l'utiliser pour tes dates dans le cadre de l'environnement d'exécution de ton script Perl en utilisant
setlocale(), par exemple si la locale s'appelle fr_FR :
use locale; use POSIX qw(locale_h); # Imports setlocale() and the LC_ constants. setlocale(LC_TIME, "fr_FR") or die "Pardon";
Cela modifiera la locale pour le process de ton script Perl (pas pour le système).
Sinon, tu peux simplement faire un tableau associatif, qui va te permettre de faire correspondre les Mon, Tue, Wed, Thu, Fri, Sat, Sun en lun, mar, mer, jeu, ven, sam, dim. Un truc comme cela :
#!/usr/bin/perl use warnings; use strict; use POSIX qw(strftime locale_h); use locale; my %hash = ('Mon' => 'lun', 'Tue' => 'mar', 'Wed' => 'mer', 'Thu' => 'jeu', 'Fri' => 'ven', 'Sat' => 'sam', 'Sun' => 'dim' ); setlocale(LC_TIME, "C"); my $fr_dayname = $hash{strftime("%a", localtime())}; print strftime("MAG_%Y%M%d_nbcli_%H00.", localtime()) . $fr_dayname;
donne :
MAG_20170307_nbcli_1300.mar
J'ai importé locale_h de POSIX et locale pour mon test, afin de forcer la locale à un format de date US avec setlocale(), pour la démo (sur ma Debian, la locale est fr_FR.utf8 par défaut).
Tu n'as pas à le faire, vu que ta locale est déjà en date US.
A la réflexion, cela peut avoir du sens de le faire, si ton script doit fonctionner dans des environnements hétérogènes, avec des locales éventuellement exotiques, de forcer la locale en C, qui sera toujours présente, pour avoir un résultat toujours cohérent.
Dal