1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
| #!C:perl/bin/perl -w
use strict;
use warnings;
# VARIABLES
my $PROGRAMME = "POUET.pl";
my $VERSION = "1.0.1";
my $AnneeMois = 0;
my $Annee = 0;
my $DateTraitement = 0;
my $Log = "";
my %Rep;
my $FicTOTO;
my $i = 0;
# initialisation
$DateTraitement = DonneDate();
if ($DateTraitement =~ /^([0-9]{4})([0-9]{2}).+$/)
{
$AnneeMois = "$1$2";
$Annee = $1;
$Log = "POUET$DateTraitement.log";
$Rep{IN} = "M:/Export/TOTO/$Annee";
$Rep{OUT} = "M:/Export/POUET/$AnneeMois";
}
else
{
print "Erreur de fonctionnement du programme lors du traitement de la date du jour !!!\n";
print "Appuyez sur ENTREE pour fermer cette fenetre\n";
<STDIN>;
exit();
}
# ouverture du log
open(STDERR, ">$Log") or die();
warn "$PROGRAMME v$VERSION\n";
warn "Traitement lancé le $DateTraitement à ", DonneHeure(), "\n";
warn "Répertoire d'entrée : $Rep{IN}\n";
warn "Répertoire de sortie : $Rep{OUT}\n";
warn "Période concernée : $AnneeMois\n";
warn "------------------------------------------------------------------------------------\n";
# création des fichiers de sortie pour les PDF à extraire (projets et normes) + fichier de sortie biblio
open (POUET, ">biblio.txt") or die("Création du fichier biblio.txt erreur : $!\n");
open (PDF_NORME, ">pdf_norme.txt") or die("Création du fichier pdf_norme.txt erreur : $!\n");
open (PDF_PROJET, ">pdf_projet.txt") or die("Création du fichier pdf_projet.txt erreur : $!\n");
warn "Fichiers biblio.txt, pdf_norme.txt et pdf_projet.txt créés dans $Rep{OUT}\n";
# recherche du dernier fichier TOTO
chdir($Rep{IN}) or die("Impossible d'accéder aux fichiers de données de TOTO dans $Rep{IN} : $!\n");
my @Temp = <*>;
foreach(@Temp)
{
push(@_, $_) if ($_ =~ /^TOTO_ACCENTS_GENIE.+/);
}
warn scalar(@_), " fichier(s) de données TOTO trouvé(s) dans $Rep{IN}\n\n";
$FicTOTO = $_[scalar(@_)-1];
warn "Le fichier qui est utilisé est $FicTOTO\n\n";
# lecture du fichier TOTO
warn DonneHeure(), ", début du traitement du fichier $FicTOTO\n";
< *** le script lancé par un poste XP se bloque ICI *** >
print "Lecture du fichier $FicTOTO en cours";
open(DATA, $FicTOTO) or die("Lecture du fichier $FicTOTO erreur : $!\n");
my $Numdos;
my $compteur = 0;
while(<DATA>){
foreach my $tuple (split(/\|/, $_))
{
# le temps de lecture du fichier étant assez long, on affiche qq chose à l'écran pour dire qu'il se
# passe quelque chose ;o)
++$compteur;
print "." if ($compteur == 1000);
$compteur = 0 if ($compteur == 1000);
# récup des données
if ($tuple =~ /^AC=FA/ && !($tuple =~ /\@IF=\d/) )
{
$i++;
print POUET "$tuple|";
if ($tuple =~ /\@UP=N/)
{
if ($tuple =~ /^AC=FA(\d\d\d\d\d\d)/)
{
$Numdos = "FA$1";
if($tuple =~ /\@TS=DC/)
{
print PDF_PROJET "$Numdos\n";
}
else
{
print PDF_NORME "$Numdos\n";
}
}
}
}
}
}
close(DATA);
close(POUET);
close(PDF_NORME);
close(PDF_PROJET);
warn "\t$i documents traités\n";
warn DonneHeure(), ", fin du traitement du fichier $FicTOTO\n\n";
# création des dossiers dans le répertoire de sortie s'ils n'existent pas
if (! -d $Rep{OUT})
{
mkdir($Rep{OUT}, 0777) or die("Création du dossier $Rep{OUT} erreur : $!\n");
}
if (! -d "$Rep{OUT}/PDF")
{
mkdir("$Rep{OUT}/PDF", 0777) or die("Création du dossier $Rep{OUT}/PDF erreur : $!\n");
}
# fin de traitement
warn DonneHeure(), ", FIN DU PROGRAMME\n\n\n\n";
=pod
FONCTION DonneDate()
RECOIT rien.
RENVOI une chaîne.
FAIT retourne la date du jour au format AAAAMMJJ.
=cut
sub DonneDate
{
my (undef,undef,undef,$Mjour,$Mois,$Annee,undef,undef,undef) = localtime(time);
$Annee += 1900;
$Mois += 1;
$Mois = 1 if ($Mois == 13);
$Mois = '0' . $Mois if ($Mois < 10);
$Mjour = '0' . $Mjour if ($Mjour < 10);
return "$Annee$Mois$Mjour";
}
=pod
FONCTION DonneHeure()
RECOIT rien.
RENVOI une chaîne.
FAIT retourne l'heure actuelle au format HH:MM:SS.
=cut
sub DonneHeure {
my ($Sec,$Min,$Heure,undef,undef,undef,undef,undef,undef) = localtime(time);
$Sec = '0' . $Sec if ($Sec < 10);
$Min = '0' . $Min if ($Min < 10);
$Heure = '0' . $Heure if ($Heure < 10);
return "$Heure:$Min:$Sec";
} |
Partager