DateFrench.pm est un module Perl de francsisation
de date et heure à utiliser dans les programmes Perl.
Je l'ai écris pour avoir le format adéquat de la date
du dernier accès à ce fichier, la date et l'heure de la dernière
modification ou celle de l'instant présent. Ce module donne la date
et l'heure sous plus de 24 formats différents, tel que:
# comme ceci par défaut
- Lundi 06 Avril 2004 14:44:37
# ou des variantes avec, sans maj, abrégé ou pas,
heure sans minutes ni sec, etc...
- lun 6 Avr 2004 14h
# en ascii (indiquant l'an, m, jr, h, mi, sec sur 1 caractère)
respecte les contraintes du tri
# peu être incorporer dans filename: $filename = "$rootname_$frd\.$ext";
- htlyvw
# ou des variantes pour que ce soit humainement lisible mais court
dans l'heure
- 06042004-hdy
# ou codé hexa, ascii pour ne pas être déchiffré
- xÊ8TÔ
Enfin il y a plus de 24 possibilités, mais on peut en ajouter
autant que l'on veut, en créant une ligne de plus, en fin de script,
dans la fonction convert_time. voir comment ça marche.
Comment m'en servir:
Il faut le déclarer par la ligne :
use DateFrench;
en debut de script de façon à pouvoir s'en servir dessuite.
On a toujours besoin de dater et de l'heure, ne serai-ce que pour les logs,
et c'est plus sympa en français, non?
Ensuite, il faudra lui assigner les paramètres, il y a un seul
paramètre pour l'heure actuelle et trois pour dater un fichier.
Pour avoir l'heure actuelle (now) il faudra assigner le paramètre
$mod_affichage (qui est le mode d'affichage).
Il peut valoir pour l'instant de 0 à 23 (voir l'aide sur DateFrench
pour plus de précision). En gros:
$mod_affichage = 0; #donnera la date et l'heure par defaut
=> exemple: Lundi 06 Avril 2004 17:45:25
$mod_affichage = 3; #donnera "
"
=> 20040406174525
$mod_affichage = 6; #donnera "
"
=> GTHmtk comme au dessus mais en ascii (triable) c'est à dire que
si vous incorporez la date et l'heure dans le nom de fichier, premièrement
ca ne prendra pas de place (6caractères) et si dans un même
répertoire vous avez un autre fichier de même nom créé
et sauvé 1 seconde aprés. Il n'écrasera pas le fichier
avant lui car la date aura changé. exemple:
différence entre ./fichier-GTHmtk.log et ./fichier-GTHmtl.log
= une seconde, et si vous trié même alphabétiquement
fichier-GTHmtk.log sera avant fichier-GTHmtl.log
astucieux n'est il pas
Bon je reprend.., essayez pour voir l'éventail de format de
date en faisant un petit script style:
#!/usr/bin/perl -w
use DateFrench;
for $i(0..22) {
$mod_affichage = $i;
$fd = maintenant($mod_affichage);
print "maintenant c\'est $fd\n";
}
qui donne à l'instant :
maintenant c'est mardi 06/04/2004 20:25:48
maintenant c'est Mardi 06 Avril 2004
maintenant c'est mardi 06 Avril 2004
maintenant c'est 1040406202548
maintenant c'est 20040406UZr
maintenant c'est e-0406-UZr
maintenant c'est e46-UZr
maintenant c'est e46bw
maintenant c'est |8O°)
maintenant c'est mardi 06 Avril 2004 20:25:49
maintenant c'est Mar 06 Avr 20h25:49
maintenant c'est Mar 06 Avr
maintenant c'est mar 06/04/04 20:25:49
maintenant c'est Mardi 06 avril 2009 20:25:49
maintenant c'est Mar 06.04/09 20:25
maintenant c'est Mardi 06 Avril 2009 20h25
maintenant c'est 06/04/09 20:25:49
maintenant c'est 20090406-20h25
maintenant c'est le mardi 06 Avril 09 à 20:25:49
maintenant c'est 6avr09-20h
maintenant c'est Mardi 06 Avril 2009 20:25:49
et bien d'autres ... voir DateFrench.pod ou plus bas à synthaxe
L'appel depuis le script doit ce faire comme suit:
use DateFrench;
# pour la date et l'heure actuelle:
$fd = maintenant($mod_affichage);
#pour la date et l'heure (des dernier accès,
modif et change) d'un fichier
$frd = datefichier($mod_affichage, $opd, $file);
Il suffit de faire un copier coller sur une des 24 boucles du dernier sous process et de changer le format. Exemple:
elsif ($format_affichage eq "6") { if ($now == 1) { #--------------------------------------------- 6 pour -- mardi 03 Mars 2004 à 15:38:45 $fd = "$sjour_sm $jj $smois $aa à $hh:$mm:$ss"; return $fd; }si on veut mettre la date en hexa et l'heure en normal on prend la boucle ci-dessus en copier puis on la colle à l'avant derniere boucle c'est à dire à la 26 eme boucle (en suivant) puis on la modifie en écrirvant ceci à la place: on change juste le 6 en 26 a la premiere ligne
elsif ($format_affichage eq "26") { if ($now == 1) { #------------------------------------------------ 26 pour -- HMJ|15:35:45 $fd = "$haa" . "$hmm" . "$hjj" . '|' . "$hh:$mm:$ss"; return $fd; }
Les modules Perl, et dieux sait qu'il y en a, font pleins de choses mais je n'arrive pas encore à vraiement penser dans ce sens, une fois que l'on à
saisie comment ca fonctionne, on peut ce servir de tout cet arsenal. Mais j'ai encore des réticences à m'en servir, j'ai peur de passer
le pas. Souvent on me dit que de faire ces propres modules c'est comme de réinventer la roue. Mais j'ai peur que ca fasse comme dans d'autres
langage, et de prendre de mauvaises habitudes. Et par la suite ne faire que ca. C'est comme presque toutes les choses attirantes de ce monde, c'est
toxique. On réfléchi qu'un minimum et charge un maximum de choses que l'on ne controle pas vraiement. Je me trompe peut être, je me trompe
surement .... Mais comme je programme pour le pied...
J'y viendrai surement ... tout le monde y va, mais tant que je peut faire de la résistance.
use DateFrench; $french_date_now = maintenant($format_affichage); print "Salut nous sommes le $french_date_now\n"; # donne la date et l'heure du moment sous le format par defaut >Salut nous sommes le Samedi 15 Novembre 2008 15:05 $file = '/usr/lib/perl5/5.8.8/DateFrench.pm'; $fr_date_file = datefile($format_affichage, $opt_date_file, $file); print "Ce module a été conçu le $fr_date_file\n"; >Ce module a été conçu le 10 Novembre 2008 à 23:15 # idem suivant $opt_date_file(accés,modif,change). 0 = dernier accés (defaut) 1 = derniere modifications 2 dernier changement 3 = les trois, c'est a dire 3 dates exemple: $fr_date_file = datefichier(1, 1, "mon_fichier.log"); ou $fr_date_file = datefichier("DlMl_no-h", "1", "mon_fichier.log"); print "$fr_date_file\n"; donnera : Samedi 6 Aout 2005 Dans l'exemple au dessus DlMl_no-h signifie (Iay I ong I ois I ong I<_no-h> pour no hours) # donne la date du fichier $file suivant ($opt_date_file: dernier access, modif, chang) # au format défini par $format_affichage: # Résultat -------- $format_affichage format fixe # Mardi 09 Janvier 2004 15:09:28 -------- I
# Mardi 03 Mars 2004 -------- "1" ou "DlMl_no-h" # Mardi 03 Mars 2004 15:09:28 -------- "2" ou "DlMl" # jeu 09 Oct -------- "3" ou "dcMc_no-h" oui (10c) # jeu 09 Oct 18h24:11 -------- "4" ou "dcMc" oui (19c) # mardi 03 Mars 2004 -------- "5" ou "dlMl_no-h" # mardi 03 Mars 2004 à 15:38:45 -------- "6" ou "dlMl" # 040309152532 -------- "7" ou "chiffre" oui (12c) # 20040309-XHU -------- "8" ou "chiffre-hexa" oui (12c) # G-0309-HTY -------- "9" ou "hexa-char" oui (10c) # HTMXHU -------- "10" ou "alpha" oui ( 6c) # Jeudi 18/03/05 -------- "11" ou "Dl_no-h" # Lundi 09/10/05 18:24:11 -------- "12" ou "Dl" # lun 09 Oct -------- "13" ou "dcMc_no-a" oui (10c) # Octobre 2005 -------- "14" ou "Ml_no-d" # Avr/2002 -------- "15" ou "Mc_no-d" oui (8c) # mardi 09 Jan 04 -------- "16" ou "dlmc_no-h" # mardi 09 Jan 04 15:36:45 -------- "17" ou "dlmc" # mardi 09 janvier 2008 /15:36:45 -------- "18" # |_ mardi 09 Janvier 2008 _|_15:36:45_| -- "19" # lun 09 Oct 05 |15:59:45 -------- "20" oui (23c) # mar 03 Mar 2002-18:38:45 -------- "21" oui (24c) # 09Oct2005 15:59 -------- "22" oui (15c) # Mardi 09 Mars 2004 15:09 -------- (defaut) Mercredi 11/12/2003 18:45 ou 20031211 ou 1031211184503 ou M-1211-UHX ou Mer 09 Oct 12h45:28, etc....
La variable scalaire retourné par le module sera une date en français formater selon votre besoin pour: la date du fichier avec la ligne: $fr_date_file = maintenant($format_affichage, $opt_date_file, $file) ou $format_affichage est le numéro (0-17) qui représente le format choisi mais vous pouvez aussi créer votre propre format, si si c'est facile. $opt_date_file est un chiffre de 0 a 2 representant: 0 date de dernier acces 1 date de dernière modification 2 date du dernier changement d inode $file est le nom du fichier vous pouvez aussi appelé le libellé Acces, Modif ou Création qui ce trouve dans $lbl, exemple: print "date du fichier $file " . $fr_date_file=datefichier(0,2,$file) . " du dernier $lbl\n"; $format_affichage est un chiffre de 0 a 16 representant les formats d'affichage style: # mardi 09/03/2004 15:09:28 (Defaut) # mardi 03 Mars 2004 (1) # 1040309152528 (7) # HMJU7X (10) # lun 18 Oct (13) # Octobre 2005 (14) # mardi 09/03/04 15:09:28 (17) # etc.... pour 0 la date comme: Mercredi 11/12/2003 18:45 (par defaut) pour 1 la date comme: Mercredi 11 Decembre 2003 (pour la Secla) pour 7 la date comme: 20031211184503 (pour liste et filename) pour 10 la date comme: AMJhms (en caractères acsii triable) pour 13 la date comme: lun 24 Jui etc ... voir les tableaux au dessus expl: si je veux la date du dernier acces en format liste je demanderai: $file = $foo; $opt_date_file = 0; $format_affichage =2; $fr_date_file = datefichier($format_affichage, $opt_date_file, $file); ou $fr_date_file = datefichier(2, 0, "$foo"); # a savoir que $lbl stocke le label d'option "Acces, Creation, Modif" pour savoir la date et l'heure du moment present: $french_date_now = maintenant($format_affichage);
PS: Il est possible de recupérer la date et l'heure sur les anciens script fait du temps de DateFr
en appellant simplement :
$fd = maintenant();
Sur ce ...
un pullover ca moule
et l'on peut diretr/(\w{2})\s(\w{8})\s(\w{2})\s(\w{5})/$1e$4$3$2/;
Ce script à été écrit par Alain Adelmar aadelmar@free.fr publié sur http://aadelmar.free.fr/DateFrench.html adresse : 6 rue de Tunis 33600 Pessac France