DateFrench

Module Perl de francisation de la date et l'heure

alain Adelmar
aadelmar@numericable.fr beuuh c est quoi ca

  1. Ce qu'il fait
  2. Comment ça marche
  3. Comment je peut le modifier
  4. En général les modules Perl
  5. Déscription du module (pod)

Ce qu'il fait

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 ça marche:

Et bien c'est un module Perl, alors la première des chose pour s'en servir, c'est de le mettre dans le répértoire ou il sera pris en compte, c'est à dire:
Si vous étes sur Windows il faudra le copier dans le sous répertoire \lib de Perl, pour avoir.\Perl\lib\DateFrench.pm
Si vous êtes sur Linux ce sera pareil mais dans /usr/lib/perlx.x/lib pour avoir /usr/lib/perlx.x/lib/DateFrench.pm

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


Me faire mes propres formats

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
puis a la 4eme ligne bien sur on formera le format avec $aa de année, $mm de mois, $jj de jour (car en hexa je veux que ca ce trie tous seul)
puis l'heure minute seconde qu'on ne touche pas ... fastoche non?
    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 En General

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.


NOM

DateFrench - donne l'heure et la date en français dans tout les formats, et ce pour I ou pour les date de dernier Accés, Modification ou Création.

SYNTAXE

  	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 Iong Iois Iong 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....

DESCRIPTION

    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 dire
tr/(\w{2})\s(\w{8})\s(\w{2})\s(\w{5})/$1e$4$3$2/;

AUTEUR

  
    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