Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1374 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Ouverture d'un fichier selon une partie de son nom

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ouverture d'un fichier selon une partie de son nom

n°2064542
little28
Chown of the Dead
Posté le 18-03-2011 à 10:18:55  profilanswer
 

Salut,

 

Pour commencer, je précise que je suis totalement débutant en PERL  :D

 

Pour le boulot, on m'a demandé d'écrire un petit script qui :

 

-> se connecte à un serveur et ouvre 2 fichiers selon la date du jour (fichiers de log créés chaque jour)
-> selon la taille du fichier, envoi d'un mail si c'est ok ou s'il y a des erreurs.

 

Les 2 fichiers que je dois analyser chaque jour se nomment par exemple :
- BatchPorterExport_error_11-03-18_244845.log
- BatchPorterExport_error_11-03-18_243214.log

 

J'ai déjà réussi à récupérer la date du jour + le mois + l'année de façon à ouvrir les logs mais je souhaite virer les 6 derniers chiffres qui correspondent à l'heure exacte du log.

 

Je bloque actuellement à l'ouverture du fichier. Pour le moment je souhaite juste ouvrir le fichier et écrire dedans pour voir si mon ouverture se passe bien :

 
Citation :

#!/usr/bin/perl

 

use strict;
use warnings;

 

my $filesize = -s "test.txt";
print "Size: $filesize\n";
if ($filesize > 136) {print "ATTENTION ERREURS DANS LE FICHIER TEST\n";}
else {print "PAS D'ERREUR\n";}

 

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

 

$year = $year - 100;
$mon = sprintf("%02d",$mon+1);
$mday = sprintf("%02d",$mday);

 

print "Nous sommes le : ".$mday." du mois ".$mon." de l'annee ".$year."\n";

 

open (FILE1, '>>',"BatchPorterExport_error_".$year."-".$mon."-".$mday."_*.log" ) || die("Probleme d'ouverture FILE1\n" );
print FILE1 ("Nous sommes le : ".$mday." du mois ".$mon." de l'ann←e ".$year."\n" );

 


Voilà ça bloque au niveau du ."_*.log". L'étoile doit servir à remplacer l'heure dans le nom de fichier pour ouvrir n'importe lequel de mes 2 fichiers de logs (je ferais une boucle pour cela) mais je ne vois pas comment m'y prendre......

 


Merci d'avance pour votre aide

 

A++


Message édité par little28 le 18-03-2011 à 10:20:04
mood
Publicité
Posté le 18-03-2011 à 10:18:55  profilanswer
 

n°2064550
gilou
Modérateur
Modzilla
Posté le 18-03-2011 à 11:03:27  profilanswer
 

Bon, en virant ton test initial pour prendre moins de place. Ce qui te manquait, c'est de connaitre l'usage de glob()

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. my ($mday, $month, $year) = (localtime(time))[3..5];
  6. $month++;
  7. $year += 1900; # autant garder les bonne valeurs dans les variables
  8.  
  9. printf("Nous sommes le : %02d du mois %02d de l'annee %02d\n", $mday, $month, $year%1000);
  10.  
  11. my $dateformated = sprintf("%02d-%02d-%02d", $year%1000, $month, $mday); #date formatee, peut resservir
  12. my $logpattern = "BatchPorterExport_error_${dateformated}_*.log"; #pattern des fichiers a chercher
  13. my @loglist = glob($logpattern); # on en recupere le liste
  14.  
  15. foreach (@loglist) { on boucle sur la liste pour processer fichier a fichier
  16.  open(my $file1, '>>', $_) or die ("Probleme d'ouverture $_\n" );
  17.  sprintf($file1, "Nous sommes le : %02d du mois %02d de l'annee %02d\n", $mday, $month, $year%1000);
  18.  close($file1);
  19. }


 
On peut aussi l'écrire de manière plus compacte:

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. my ($mday, $month, $year) = (localtime(time))[3..5];
  6. $month++;
  7. $year += 1900; # autant garder les bonne valeurs dans les variables
  8.  
  9. printf("Nous sommes le : %02d du mois %02d de l'annee %02d\n", $mday, $month, $year%1000);
  10. my $dateformated = sprintf("%02d-%02d-%02d", $year%1000, $month, $mday);
  11.  
  12. foreach (glob("BatchPorterExport_error_${dateformated}_*.log" )) {
  13.  open(my $file1, '>>', $_) or die ("Probleme d'ouverture $_\n" );
  14.  sprintf($file1, "Nous sommes le : %02d du mois %02d de l'annee %02d\n", $mday, $month, $year%1000);
  15.  close($file1);
  16. }


 
Notes que glob() donne la liste des fichiers correspondant à un pattern dans le repertoire courant.
Il faut donc éventuellement faire un  
cd "le bon répertoire";
avant d'appeler glob(), selon l'endroit ou tu executes le script.
A+,


Message édité par gilou le 18-03-2011 à 14:50:25

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2068128
little28
Chown of the Dead
Posté le 05-04-2011 à 13:03:39  profilanswer
 

Je n'avais pas vu ta réponse :o
 
Merci pour ton aide, je teste ça cette après midi au boulot  [:sqel]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Ouverture d'un fichier selon une partie de son nom

 

Sujets relatifs
Nommer Vignettes fichier pdf par macro ExcelMacro Excel2000 découpage d'un fichier en plusieurs onglets
enregistrement fichier excel 2007 en pdfCréation d'un lien HTML vers un fichier local
Help ! AJAX - POST et PHP pour fichier CSVCode pour changer l'orde d'un nom de fichier
[bash] Extraire et concaténer 2 strings depuis un fichierImporter fichier de site a site
Comment Signer une portion d'un fichier XML?Coder en assembleur deux fichier .bin help
Plus de sujets relatifs à : Ouverture d'un fichier selon une partie de son nom


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR