IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

récupérations infos fichiers


Sujet :

Programmation et administration système Perl

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Points : 69
    Points
    69
    Par défaut
    ceci est mon code complet, mais on m'a rajouté une exigence supplémentaire au niveau de la récupération du nom d'un des fichiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #!/SOFT/perl5/bin/perl
    #*****************************************************************
    #* Script Indicateurs de conventions                             *
    #*****************************************************************
    #* Auteur: ROUSSEL Arnaud                                        *
    #* Date de creation: 03/08/2008                                  *
    #* Version: 1.0                                                  *
    #*****************************************************************
    use 5.008005;
    use strict;
    use warnings;
    use lib "$ENV{STKROOT}/batch/";
    use Infra;
    use POSIX qw(strftime);
    use DB;
     
    #Déclaration des variables et tableaux
    my %mapping;
    my %reverse_mapping;
    my $chemin;
    my $fichier;
    my @fichiers;
    my $dossier;
    my $nomfichier;
    my $nomcaisse;
    my $caisse;
    my @time_stats;
    my $mtime;
    my $datep;
    my $heurep;
    my $save = "$ENV{SUMMITSPOOLDIR}/indicateur_convention.txt"; # sauvegarde dans un fichier csv
    my $tmp;
     
    printf "Lecture et chargement du fichier des caisses...";
    open IN, "<$ENV{STKROOT}/batch/rep_mapping_caisse.ini";
    while (<IN>) {
      if (m/^([a-z]+):(.*):(.*)$/) {
        $mapping{$1}=$2;
        $reverse_mapping{$2}=$1;
      }
    #  %reverse_mapping = reverse %mapping;
    }
    close IN;
    printf "OK\n";
     
    open (FH, ">>$save") || die $!;
    foreach $caisse (values %reverse_mapping) {
    #Récupération PLUPD SUMMIT
    #Récupération CHOPE_G & CHOPE_5J INFOCENTRE
      @fichiers = (
        "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/SUMMIT/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/"
          ."$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}"."_SUMMIT"."_$mapping{$caisse}"."_PLUPD"
        ."_3112".($ENV{PAR_J_YY}-1<10?'0':'').($ENV{PAR_J_YY}-1)."_$ENV{PAR_JM1_DD}$ENV{PAR_JM1_MM}$ENV{PAR_JM1_YY}".".txt",
       "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/CHOPE_5J.xls",
        "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/CHOPE_G.xls"
      );
     
      foreach $fichier (@fichiers){
        if (-e $fichier){ #si le fichier existe récupération des infos du fichier
          $tmp=$fichier;
          $tmp =~ m#([^/]+)/Commun/.*?SUMMIT/([0-9]{8,8})/(.*)$#;
          $dossier=$2;
          $nomcaisse=$1;
          $nomfichier=$3;
          @time_stats = stat($fichier); #On récupère date et heure
          $mtime = $time_stats[9];
          $datep = strftime( "%d/%m/%Y" ,localtime($mtime)); #date JJ/MM/YYYY
          $heurep = strftime( "%H:%M:%S",localtime($mtime)); #heure HH:MM:SS
          printf FH "%s;%s;%s;%s;%s;\n",$dossier, $nomcaisse, $nomfichier, $datep, $heurep;
        }
      }
    }
    close (FH);
     
    #Récupération des infos du fichier plat pour intégration en BDD
    END {
      exit filter ;
    }
    # vim:set ai fcl=all nu ai et sts=2 sw=2 tw=0 fdm=indent foldlevel=0 nofen hls:

    le fichiers txt on cette appellation 20080813_CEAN_SUMMIT_PLUPD_20071231_20080812.txt
    et on me demande juste de récupérer PLUPD
    liste des fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @fichiers = (
        "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/SUMMIT/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/"  ."$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}"."_SUMMIT"."_$mapping{$caisse}"."_PLUPD"
        ."_3112".($ENV{PAR_J_YY}-1<10?'0':'').($ENV{PAR_J_YY}-1)."_$ENV{PAR_JM1_DD}$ENV{PAR_JM1_MM}$ENV{PAR_JM1_YY}".".txt",
       "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/CHOPE_5J.xls",
        "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/CHOPE_G.xls"
      );
    En gras c'est comme cela qu'est trouvé le fichier txt
    je veux donc "fausser" son appelation mais je ne veux pas que ça m'empêche de faire mes recherches sur les 2 autres fichiers xls

    j'étais tenté de faire une expression régulière comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
      foreach $fichier (@fichiers){
        if (-e $fichier){ #si le fichier existe récupération des infos du fichier
          $tmp=$fichier;
          $tmp =~ m#([^/]+)/Commun/.*?SUMMIT/([0-9]{8,8})/(.*)$#;
          $dossier=$2;
          $nomcaisse=$1;
          if ($3 eq "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/SUMMIT/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/"  ."$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}"."_SUMMIT"."_$mapping{$caisse}"."_PLUPD"
        ."_3112".($ENV{PAR_J_YY}-1<10?'0':'').($ENV{PAR_J_YY}-1)."_$ENV{PAR_JM1_DD}$ENV{PAR_JM1_MM}$ENV{PAR_JM1_YY}".".txt") 
             {
             $3=~/\d+_[A-Z]+_[A-Z]+_([A-Z])_\d+_\d+\.txt/;
             $nomfichier=$3;
             }
         else{
             $nomfichier=$3;
             }
    ...
    mais j'ai peur de mal cerner le besoin et en fait de passer à la trappe les fichiers xls

    j'avais aussi eu dans l'idée de faire un

    if ($3 eq "nomdufichiercommedéfinidanslaliste"){
    $3="PLUPD";
    $nomfichier=$3;
    }
    else
    $nomfichier=$3;


    QUID de la meilleure solution

  2. #22
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while (<IN>) {
      if (m/^([a-z]+):(.*):(.*)$/) {
        $mapping{$1}=$2;
        $reverse_mapping{$2}=$1;
      }
    #  %reverse_mapping = reverse %mapping;
    }
    close IN;
    Je t'avais dit
    Je pense que tu n'as pas compris la fonction reverse sur un hash. Elle prend ce tableau (après qu'il ait été entièrement rempli) et inverse ses clés et valeurs.

    Que penses-tu qu'il se passera à chaque passage dans ta boucle? ... ton tableau sera détruit et recréé à chaque fois et au final tu n'auras même pas la dernière valeur étant donné que tu le déclares en local à cette boucle.

    1) crée le tableau %mapping dans la boucle
    2) crée le tableau %reverse_mapping après la boucle
    while est une boucle
    if est une condition


    Soit tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (<IN>) {
      if (m/^([a-z]+):(.*):(.*)$/) {
        $mapping{$1}=$2;
        $reverse_mapping{$2}=$1;
      }
    }
    close IN;
    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while (<IN>) {
      if (m/^([a-z]+):(.*):(.*)$/) {
        $mapping{$1}=$2;
      }
    }
    close IN;
     
    %reverse_mapping = reverse %mapping;

    Tu as toujours 3 couples de parenthèses pour ne récupérer que $1, $2 supprime celui de trop.


    Pour le reste ... ça parait confus comme explications, je n'ai rien compris, et je n'ai pas envie de me prendre la tête ce soir à essayer de comprendre.
    -- Jasmine --

  3. #23
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Points : 69
    Points
    69
    Par défaut
    voila j'ai fait comme tu as dit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (<IN>) {
      if (m/^([a-z]+):(.*)$/) {
        $mapping{$1}=$2;
      }
    }
    close IN;
    %reverse_mapping = reverse %mapping;
    ensuite ce que je veux faire dans la boucle foreach suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    @fichiers = (
        "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/SUMMIT/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/"
          ."$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}"."_SUMMIT"."_$mapping{$caisse}"."_PLUPD"
        ."_3112".($ENV{PAR_J_YY}-1<10?'0':'').($ENV{PAR_J_YY}-1)."_$ENV{PAR_JM1_DD}$ENV{PAR_JM1_MM}$ENV{PAR_JM1_YY}".".txt",
       "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/CHOPE_5J.xls",
        "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/CHOPE_G.xls"
      );
     
      foreach $fichier (@fichiers){
        if (-e $fichier){ #si le fichier existe récupération des infos du fichier
          $tmp=$fichier;
          $tmp =~ m#([^/]+)/Commun/.*?SUMMIT/([0-9]{8,8})/(.*)$#;
          $dossier=$2;
          $nomcaisse=$1;
          $nomfichier=$3;
          @time_stats = stat($fichier); #On récupère date et heure
          $mtime = $time_stats[9];
          $datep = strftime( "%d/%m/%Y" ,localtime($mtime)); #date JJ/MM/YYYY
          $heurep = strftime( "%H:%M:%S",localtime($mtime)); #heure HH:MM:SS
          printf FH "%s;%s;%s;%s;%s;\n",$dossier, $nomcaisse, $nomfichier, $datep, $heurep;
        }
      }
    }
    close (FH);
    c'est de faire une expression régulière qui me permette de récupérer le nom d'un des fichiers ainsi:
    format original: 2000813_SUMMIT_CEAN_PLUPD_3112007_13082008.txt
    format de sortie: PLUPD
    sans que mon expression régulière ne m'empêche de récupérer les infos des fichier CHOPE_5J.xls et CHOPE_G.xls

    j'avais eu donc l'idée de tenter ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
      foreach $fichier (@fichiers){
        if (-e $fichier){ #si le fichier existe récupération des infos du fichier
          $tmp=$fichier;
          $tmp =~ m#([^/]+)/Commun/.*?SUMMIT/([0-9]{8,8})/(.*)$#;
          $dossier=$2;
          $nomcaisse=$1;
          if ($3 eq "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/SUMMIT/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/"  ."$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}"."_SUMMIT"."_$mapping{$caisse}"."_PLUPD"
        ."_3112".($ENV{PAR_J_YY}-1<10?'0':'').($ENV{PAR_J_YY}-1)."_$ENV{PAR_JM1_DD}$ENV{PAR_JM1_MM}$ENV{PAR_JM1_YY}".".txt") 
             {
             $3= $fichier;
             $3=~/\d+_[A-Z]+_[A-Z]+_([A-Z])_\d+_\d+\.txt/;
             $nomfichier=$3;
             }
         else{
             $nomfichier=$3;
             }
    @time_stats = stat($fichier); #On récupère date et heure
          $mtime = $time_stats[9];
          $datep = strftime( "%d/%m/%Y" ,localtime($mtime)); #date JJ/MM/YYYY
          $heurep = strftime( "%H:%M:%S",localtime($mtime)); #heure HH:MM:SS
          printf FH "%s;%s;%s;%s;%s;\n",$dossier, $nomcaisse, $nomfichier, $datep, $heurep;
        }
      }
    }
    close (FH);
    mais je crois que ça ne marchera pas

  4. #24
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Points : 69
    Points
    69
    Par défaut enfin
    Après tous vos conseils et moults péripéties voici enfin le code finalisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #!/SOFT/perl5/bin/perl
    use 5.008005;
    use strict;
    use warnings;
    use lib "$ENV{STKROOT}/batch/";
    use Infra;
    use POSIX qw(strftime);
    use DB;
     
    #Déclaration des variables et tableaux
    my %mapping;
    my %reverse_mapping;
    my $chemin;
    my $fichier;
    my @fichiers;
    my $dossier;
    my $nomfichier;
    my $nomcaisse;
    my $caisse;
    my @time_stats;
    my $mtime;
    my $datep;
    my $heurep;
    my $save = "$ENV{SUMMITSPOOLDIR}/indicateur_convention.txt"; # sauvegarde dans un fichier csv
    my $tmp;
    my $year;
    my $month;
    my $day;
     
    printf "Lecture et chargement du fichier des caisses...";
    open IN, "<$ENV{STKROOT}/batch/rep_mapping_caisse.ini";
    while (<IN>) {
      if (m/^([a-z]+):(.*)$/) {
        $mapping{$1}=$2;
      }
    }
    close IN;
    %reverse_mapping = reverse %mapping;
    printf "OK\n";
     
    open (FH, ">$save") || die $!;
    foreach $caisse (values %reverse_mapping) {
    #Récupération PLUPD SUMMIT & CHOPE_G & CHOPE_5J INFOCENTRE
      @fichiers = (
       "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/SUMMIT/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/"
          ."$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}"."_SUMMIT"."_$mapping{$caisse}"."_PLUPD"
        ."_3112".($ENV{PAR_J_YY}-1<10?'0':'').($ENV{PAR_J_YY}-1)."_$ENV{BAT_JM1_DD}$ENV{BAT_JM1_MM}$ENV{BAT_JM1_YY}".".txt",
       "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/CHOPE_5J.XLS",
       "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/CHOPE_G.XLS"
      );
     
      foreach $fichier (@fichiers){
        $tmp=$fichier;
        print "$tmp\n";
        if (-e $fichier){ #si le fichier existe récupération des infos du fichier
    #      if ($tmp =~ m#([^/]+)/Commun/REPORTING/SUMMIT/([0-9]{8,8})/(.*)$#){
          if ($tmp =~ m#([^/]+)/Commun/REPORTING/SUMMIT/([0-9]{8,8})/[0-9]{8,8}_SUMMIT_[A-Z]+_(PLUPD)_[0-9_]+.txt$#){
          }
          elsif ($tmp =~ m#([^/]+)/Commun/REPORTING/INFOCENTRE/([0-9]{8,8})/(CHOPE_5J).XLS$#){
          }
          elsif ($tmp =~ m#([^/]+)/Commun/REPORTING/INFOCENTRE/([0-9]{8,8})/(CHOPE_G).XLS$#){
          }
          else {
            print "aucun fichier trouvé: anomalie!";
            exit ;
          }
          $year=substr($2, 0,4);
          $month=substr($2, 4,2);
          $day=substr($2, 6,2);
          $dossier= $day.$month.$year;
          print "$dossier\n";
          $nomcaisse= $mapping{$1};
          print " $nomcaisse\n";
          $nomfichier=$3;
          print " $nomfichier\n";
          @time_stats = stat($fichier); #On récupère date et heure
          $mtime = $time_stats[9];
          $datep = strftime( "%d/%m/%Y" ,localtime($mtime)); #date JJ/MM/YYYY
          $heurep = strftime( "%H:%M:%S",localtime($mtime)); #heure HH:MM:SS
          printf FH "%s;%s;%s;%s;%s;\n",$dossier, $nomcaisse, $nomfichier, $datep, $heurep
        }
      }
    }
    close (FH);
    END {
      exit filter ;
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. récupération infos fichier ws depuis AS/400
    Par waste dans le forum AS/400
    Réponses: 2
    Dernier message: 27/06/2012, 19h30
  2. récupérations infos fichier plat vers BDD
    Par Baldric de Dol dans le forum SGBD
    Réponses: 3
    Dernier message: 08/08/2008, 23h16
  3. récupérations info fichier 2 (Baldric de Dol)
    Par Jasmine80 dans le forum Programmation et administration système
    Réponses: 5
    Dernier message: 05/08/2008, 16h26
  4. Récupération de fichiers par Access 2003
    Par JEAN MICHEL BOYER dans le forum Access
    Réponses: 3
    Dernier message: 02/09/2005, 19h18
  5. [ SWT ] Récupération info d'un Browse
    Par geegee dans le forum SWT/JFace
    Réponses: 11
    Dernier message: 08/06/2004, 17h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo