Le Plein de bouts de scripts a réutiliser

attention tres vieille page code obsoléte

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

Je vais mettre dans cette page des exemples de script qui font des tâches qui reviennent souvent. Bien évidement je débute et il y a sûrement moyen de faire mieux, plus rapide, plus léger, plus sûr. Mais tous les bouts de codes ci-dessous fonctionnes.  Je ne regarde pas assez le news-groupes en ce moment (pour ne pas me simplifier la tâche ni me faire influencer).
Je le ferai quand le moment sera venu, pour passer un cap, monter d'un cran, car la meilleur de façon d'apprendre Perl est justement de suivre les NGs et surtout fr.
alain Adelmar                                                     aadelmar@free.fr


Sortir d'un nom complet de fichier, le chemin, le nom_du_fichier, l'extension


Ci dessous une manière de sortir le PATH, le nom de fichier et l'extension du fichier d'un nom de fichier demander. Ceci est une autre façon de faire qu'avec split.

#!perl -w
# remd: test pour: s/MOTIF/REMPLACEMENT/egimosx  aadelmar@wanadoo.fr
$x="x" x 30;

LABEL_TOP:print "Entrez le nom complet du fichier à traiter:\n";
chomp($file = <STDIN>);

# sortir le path du filename avec s///:
$road66 = $filename = $file;
$road66 =~ s/()\\\w+\.\w{2,4}$/$1/i;
print "road66 = $road66\n";
$filename =~ s/^.+\\\b()/$1/;
print "filename = $filename\n";

# ($road66, $filename)= split(/\\$/, $file); ou ($rootname, $ext) = split(/\./, $filename)
print "\n$x\n";
print "$road66 plus $filename = $file\n";
print "\n$filename\n";

END;


Avec le module File::stat

use File::stat;

print "$x\n maintenant avec le module File::stat\n";
$st = stat($filename);
printf "Le fichier: %s, taille: %s, permission: %04o, mtime: %s\n",
$filename, $st -> size, $st -> mode & 07777,
scalar localtime $st -> mtime;

#__________synthése
=> Lefichierpipo.txt, taille:454, permisson:0774, mtime:Fri2001.01.0311:23:56"
# ou approchant (format date)
#(n: l'utilisation du module permet simplement l'utilisation de $st et des méthode ->mtime,
->size etc... pour tout les champ de stat...)voir ECctime.pl

Tester si le module Tk est présent pour pouvoir dévellopper les deux possibilités (graphique ou mode texte)

En effet, je ne dois pas être le seul à rendre mes scripts accécible graphiquement, alors au debut du script mettre un contrôle pour que quelle que soit la réponse on puisse continuer:

our $module_present= 0;

foreach (@INC) {
   "$_" . '/' . "Tk.pm";
   if (-e "$_/Tk.pm") {
     use Tk;
     $module_present++;
     MainWindow->new->Label(-text => "Tk present sur cette machine")->pack;
     MainLoop;
       }
 }
if ($module_present== 0) {
  print STDERR "l'interface graphique n'est pas disponible: installez perltk avant\navec fedora: yum install perltk\n";
  print "Mais ce n'est pas grave nous continuerons en mode texte.\n";
}


Ce faire un cartouche pour marquer les log, fichier, pages html issus de votre script:

En effet, ça ne sert pas qu'à satisfaire son égo, c'est très utile quand on ne se rappelle plus quel script à donné cette sortie, et quand...
donc 4 ou 5 lignes pour avoir, en début ou fin de log, un petit cartouche du style:

sur un log:
script:          coucou_maman.pl
écris par     Igor De La Mothe Fifré (tralala@la_pie_qui_chante.fr)
                     le 31 Decembre 1999
executer le : 29 Fevr 2009 23:12:46

à la console:
*****************************************************
script: cartouche.pl
écris par Hubert Casse-Peigne (tralala@la_pie_qui_chante.fr)
le 12 Decembre 2001
executer le : 21 Sept 2009 23:12:46
*****************************************************

ou sur un fichier .html en guise de commentaire:
<!-- script : ci-dessous.pl
       écris par: Toto l'aristo le 14 Juil 1789
       executé le: 14 Juillet 1789 10:01:01  -->

use DateFrench;
our $format_affichage = 21;
our $opt_date_file = 2;
our $fr_date_now = maintenant("$format_affichage");
#------------------------------cartouche --------------
my $lx = ("*" x 25) x 2;
my $file = $0;
our $fr_date_file = datefichier($format_affichage, $opt_date_file, $file);
my $moi = " Votre_nom (adresse_e_mail)";
# cartouche pour les fichier .log
my $head_lbl= "script $0\nécris par $moi\nle $fr_date_file\nexecuter le $fr_date_now\n";
# cartouche pour la sortie console
my $head_lbl_console = "$lx\nscript:      $0\nécris par:  $moi\nle:          $fr_date_file\nexecuter le: $fr_date_now\n$lx\n";
# cartouche en commentaire pour les fichier .html
my $head_lbl_comment = '<!--- update pour migration de PUB' . "\nscript: $0\n&eacute;cris par: $moi\nle: $fr_date_file\nexecuter le: $fr_date_now\n ---" . '>';

#--------------------------------------------
print "$head_lbl\n";
print "\n\n\n";
print "$head_lbl_console\n";

copie numéroté auto-incrémenté mode d'emploi

# fait une copie pour pouvoir travailler sans faire de dégâts (la copie doit avoir un nom propre et/ou un numéro particulier)

$copieID = "copie_" . "$file" . "_$id" . "\.html";
($copie, $ext) = split(/\./, $copieID);
($lbl, $id) = split(/_/, $copie);

while (-e donne_un_nom($copieID)) {
        $id++;
        donne_un_nom($copieID);
        }

# avec sa routine placé en fin de programme:
sub donne_un_nom($copieID) {
        my ($copieID) = @_;

        $copieID = "copie_" . "$file" . "_$id" . "\.log";
        ($copie, $ext) = split(/\./, $copieID);
        ($lbl, $id) = split(/_/, $copie);
        return $copieID;
}
 

# pensez qu'a la place de $id on peut placer $t_now = (localtime($file));



(note:  J'ai 20 pages de bout de code réutilisable mais il faut que je mette de l'ordre dedans. )