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. #1
    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 récupérations infos fichiers
    bonjour

    je dois réaliser un script qui dois récupérer des infos sur des fichiers et les intégrer dans un fichier plat qui ira alimenter une table dans une BDD

    en fait j'ai 28 utilisateurs qui publient quotidiennement 3 fichiers
    toto.xls
    tata.xls
    titi.txt
    ces 3 fichiers sont publiés dans un répertoire portant la date du jour
    --> repertoirecommun\users1\appli\YYYYMMDD\

    je dois récupérer les infos suivantes: DATE_NOW, USER, NOMFICHIER, DATE_FICHIER, HEURE_FICHIER
    si un fichier manque, une ligne doit tout de même être créer dans le fichier plat et donnera par exemple: 20080731, USER1, X , X, X

    d'avance merci

  2. #2
    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
    Pour ce qui est de récupérer les données des fichiers excel, tu peux utiliser le module Win32::OLE.
    http://search.cpan.org/~jdb/Win32-OL...b/Win32/OLE.pm

    Pour manipuler la base de données, tu peux utiliser le module DBI.
    http://search.cpan.org/~timb/DBI-1.607/DBI.pm
    http://perl.developpez.com/faq/?page...36#sectionC36a

    Pour ce qui est d'écrire les données dans un fichier plat, tu peux utiliser les fonctions basiques de perl sur les fichiers. http://perl.developpez.com/faq/?page=sectionC1
    -- Jasmine --

  3. #3
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    j'ajouterais que pour lister les fichier d'une zone précise :
    http://perl.developpez.com/faq/index.php?page=sectionC1
    est bien utile, sans oublier :
    http://perl.developpez.com/faq/index.php?page=sectionD3
    pour les dates

    allez bonne lecture et bon courage
    CKL
    N°°b forever
    --
    may the be with you

  4. #4
    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 infos
    mon script ne dois pas récupérer les infos dans chaque fichiers mais les infos suivantes

    nom du fichier
    le user qui l'a généré
    la date et l'heure du dépot du ficher

    exemple

    dans le répertoire
    commun\users1\dossier1 on trouve toto.xls et tata.xls créés tout deux à 20h30 le 12/07/2008

    je veux pouvoir envoyer dans la BDD les infos comme ceci

    Date du jour | user | nomfichier |date de création du fichier |heure de création du fichier

    (ce que toto et tata contiennent ne me sont pas destiné)

    donc pour résumer encore plus mon script va sur le serveur dans une arborescence précise, regarde s'il y a les fichiers que je cherche et qui ne prend que les infos du fichier, et qui aussi me renvoie une ligne d'info si le fichier toto.xls ou tata.xls est manquant


  5. #5
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    dans ce cas la lien lien que j'avais poster :
    http://perl.developpez.com/faq/index...onC1#sectionC1
    était tout à fait pertinant, surtout à cette section ci
    anisi que les deux section qui la suivent (celle la et celle ci)
    POWA
    CKL
    N°°b forever
    --
    may the be with you

  6. #6
    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 cool
    merci ça m'avance bcp

    j'ai une autre question

    comment faire une boucle ou je fais comprendre à mon script qu'il doit se référer à une liste de nom de dossier contenant mes fameux fichiers

    je m'explique

    le programme démarre, il se rend dans le répertoire "commun" qui contient les sous dossiers Users et là il va aller voir uniquement dans les sous dossiers que j'aurai précisé dans un fichier ini (j'ai 60 users mais seulement 28 qui génère le fichiers dont je veux les infos)

    merci

  7. #7
    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
    Je sais qu'il existe le module File::Find permettant de manipuler des fichiers, mais je ne l'ai jamais utilisé.

    Ce que je ferais à ta place :

    répertoire "commun" qui contient les sous dossiers Users et là il va aller voir uniquement dans les sous dossiers que j'aurai précisé dans un fichier ini (j'ai 60 users mais seulement 28 qui génère le fichiers dont je veux les infos)
    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
     
    my $path = 'C:..../Repertoire_commun/';
     
    # récupération des noms de dossiers à traiter dans le fichier ini 
    open(INI, chemin/ini) or die;
    my @a_rep;
    my $line;
    while ($line = <INI>){
        # cf expressions régulières en perl
        if ($line =~ /blabla(nom_dossier)blabla/){
            push(@a_rep, $1);
        }
    }
     
    # traitement des dossiers contenus dans cette liste
    foreach my $rep(@a_rep){
     
           if (-d $path.$rep){
                  .... traitement
           }
           else{
                  print "erreur, le dossier $path.$rep n'existe pas\n";
           }
    }

    Pour ce qui est de la récupération des informations du fichier ini, il faut voir sa structure afin d'écrire la bonne expression régulière.

    ... sinon, il n'existe des modules permettant de manipuler les fichiers ini, tu peux toujours regarder sur le CPAN
    http://search.cpan.org/search?query=ini+file&mode=all

    Prima::IniFile
    support of Windows-like initialization files
    Prima-1.26**** (1 Reviews) - 28 Apr 2008 - Dmitry Karasik

    PTools::SDF::INI
    Implements a Simple Data File in "Windows INI" format
    PTools-SDF-0.01 - 26 Mar 2007 - Chris Cobb

    Config::Format::Ini::Grammar
    P:RD grammar for ini file format
    Config-Format-Ini-0.07 - 24 Jul 2008 - Ioannis Tambouras

    EB::Config::IniFiles
    A module for reading .ini-style configuration files.
    EekBoek-1.03.13 - 13 Apr 2008 - Johan Vromans

    Config::IniFiles
    A module for reading .ini-style configuration files.
    Config-IniFiles-2.38**** (5 Reviews) - 13 May 2003 - Jeremy Wadsack
    -- Jasmine --

  8. #8
    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 merci
    donc si je récapitule

    avec les infos que vous m'avez donné je peux traiter ceci

    contenu du fichier ini
    test.ini
    #Fichier qui permet d'effectuer le mapping entre le nom de l'utilisateur et son code défini sur le serveur unix
    #Nom sur le serveur : nom users : libellé
    user1 : Jean : blabla1
    user2 : Bertrand : blabla2

    script en perl que je vais implémenté sur le serveur unix

    1. déplacement dans l'arborescence vers le dossier communs

    /dossiercommunatous/

    2. mapping entre le nom users et nom sur le serveur pour avoir le bon chemin complet

    3. /dossiercommunatous/user1/partage/infos/rep1
    contenant plusieurs dossiers

    20080729
    20080728
    20080727
    ...

    => on ne verifie que les fichiers 20080729_toto et 20080729_tata dans le dossier le plus récent à date J ou J-1 (ici 20080729)
    et on intègre dans le fichier plat DateNow | NomUser | Nomfichier | datedufichier | heurefichier


    4. /dossiercommunatous/user1/partage/infos/rep2
    contenant plusieurs dossiers

    20080729
    20080728
    20080727
    ...

    => on ne verifie que le fichier 20080729_titi.txt dans le dossier le plus récent à date J ou J-1 (ici 20080729)
    et on intègre dans le fichier plat DateNow | NomUser | Nomfichier | datedufichier | heurefichier

    ensuite on fait un DBLink vers la base et la table et on injecte via une commande SQL

  9. #9
    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
    Si tes lignes sont du style
    user1 : Jean : blabla1
    user2 : Bertrand : blabla2
    Tu peux utiliser l'expression régulière suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # récupération des noms de dossiers à traiter dans le fichier ini 
    open(INI, chemin/ini) or die;
    my @a_rep;
    my $line;
    while ($line = <INI>){
        # cf expressions régulières en perl
        if ($line =~ /user\d+ : (\w+) : \w+/){
            push(@a_rep, $1);
        }
    }
    \w : valeurs alphanumériques + underscore (à modifier si tu peux avoir d'autres caractères sur la ligne)
    \d : nombre
    + : un à plusieurs
    () : les parenthèses encadrent ce que tu récupères dans $1
    maintenant, au sujet des espaces, si tu n'es pas certain que c'est bien un seul espace à chaque fois, tu peux utiliser \s+
    -- Jasmine --

  10. #10
    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 plus de précisions
    histoire de ne pas me perdre dans les nommages je donne des précisions en plus

    chemin:
    /Toutes_Les_Caisses/celca/Commun/REPORTING/INFOCENTRE/20080729/
    /Toutes_Les_Caisses/{user}/Commun/REPORTING/INFOCENTRE/{Date J}/
    /Toutes_Les_Caisses/$user/Commun/REPORTING/INFOCENTRE/$DateNow/
    fichiers:
    CHOPE_5J.XLS
    CHOPE_G.XLS

    chemin
    /Toutes_Les_Caisses/celca/Commun/REPORTING/SUMMIT/20080729/
    /Toutes_Les_Caisses/{user}/Commun/REPORTING/SUMMIT/{Date J}/
    /Toutes_Les_Caisses/$user/Commun/REPORTING/SUMMIT/$DateNow/
    fichier:
    20080729_SUMMIT_CELCA_PLUPD_311207_280708.txt

    parfois j'ai des exceptions (3 fichiers qui on presque le même nom à la différence près des dates à la fin
    le seul fichier à traiter est celui où la date du dernier jour de l'année précédente précède la date du jour J-1
    (fichier publier le 20080703, date courant du 311207 à 020708)

    /Toutes_Les_Caisses/celca/Commun/REPORTING/SUMMIT/20080703/
    fichiers:
    20080703_SUMMIT_CELCA_PLUPD_311207_020708.txt <- fichier à traiter
    20080703_SUMMIT_CELCA_PLUPD_311208_311208.txt
    20080703_SUMMIT_CELCA_PLUPD_311209_311209.txt



    pour les 3 fichiers je dois récupérer
    date du jour
    user
    nomfichier
    datefichier
    heurefichier

    nom des users définis dans un fichier ini
    différence entre le nom user et le nommage du user sous unix --> mapping entre nom users et nommage du user sous unix

    #Nom sur le serveur : nom users : libellé
    user1 : Jean : blabla1
    user2 : Bertrand : blabla2


  11. #11
    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 script soumission
    votre aide à tous m'a été précieuse et j'ai réussi à faire un script qui me semble pas trop mal foutu je vous le montre ici

    je rappelle que le script parcoure une arborescence pour aller trouver un fichier txt d'un côté et 2 fichiers xls dans un autre. il récupère les infos suivantes: Dossier, Caisse, NomFichier, Datepublication, Heurepublication et les insère dans un fichier csv
    ensuite je récupère ses infos via un autre script pour les charger en BDD



    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
    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
     
    #!/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);
     
    my %mapping;
    my %reverse_mapping;
    my $chemin;
    my $fichier;
    my $nomfichier;
     
    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;
      }
    }
    close IN;
    printf "OK\n";
     
    foreach $caisse (%reverse_mapping) {
     
    #Récupération PLUPD SUMMIT
      $chemin = "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/SUMMIT/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/";
      $fichier = "$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).".txt";
     
      if (-e ($fichier)){
      #récupération des infos fichier
        foreach ($fichier){
           $dossier = $ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}; #On récupère le nom du dossier contenant le fichier
           $nomcaisse = $caisse; #On récupère le nom de la caisse
           $nomfichier = $fichier ; #On récupère le nom du fichier
           @file_stat = localtime($fichier); #On récupère date et heure
           $datep = strftime( "%d/%m/%y" ,@time_stats); #date JJ/MM/YYYY
           $heurep = strftime( "%T", @time_stats); #heure
     
           my $implementation = fichier_plat(); #Copie dans le fichier csv
          }
       }
      else{
         foreach ($fichier){
           $dossier = $ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}; #On récupère le nom du dossier contenant le fichier
           $nomcaisse = $caisse; #On récupère le nom de la caisse
           $nomfichier = "";
     
           my $implementation = fichier_plat(); #Copie dans le fichier csv
          }
       }
     
    #Récupération CHOPE_G & CHOPE_5J INFOCENTRE
      $chemin = "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/";
      $fichier = "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/"
      ."CHOPE_*.xls";
     
      if (-e ($fichier)){
    #récupération des infos fichier CHOPE_5J.xls
         foreach ($fichier){
           $dossier = $ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}; #On récupère le nom du dossier contenant le fichier
           $nomcaisse = $caisse; #On récupère le nom de la caisse
           $nomfichier = $fichier ; #On récupère le nom du fichier
           @file_stat = localtime($fichier); #On récupère date et heure
           $datep = strftime( "%d/%m/%y" ,@time_stats); #date JJ/MM/YYYY
           $heurep = strftime( "%T", @time_stats); #heure
     
           my $implementation = fichier_plat(); #Copie dans le fichier csv
          }
       }
      else{
        foreach ($fichier){
          $dossier = $ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}; #On récupère le nom du dossier contenant le fichier
          $nomcaisse = $caisse; #On récupère le nom de la caisse
          $nomfichier = "";
     
          my $implementation = fichier_plat(); #Copie dans le fichier csv
          }
       }
    }
     
     
    #******************************************************
    #Insertion des informations contenues dans les
    #variables vers le fichier indicateur_convention.txt
    #******************************************************
    sub fichier_plat
      {
      my @fichier = ($dossier $caisse $nomfichier $datep $heurep);
      my $save = "./indicateur_convention.csv"; # sauvegarde dans un fichier csv
     
      open (FH, ">>$save") || die $!;
    #Dossier;Caisse;Nom fichier;Datefichier;Heurefichier|
      foreach (@fichier){
          print FH $_.";";
        }
      print FH "\n";
      close (FH)
    }
     
     
    END {
      exit filter ;
    }

  12. #12
    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
    Il y a un morceau de code que je ne comprends pas.

    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
    foreach $caisse (%reverse_mapping) {
     
    #Récupération PLUPD SUMMIT
      $chemin = "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/SUMMIT/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/";
      $fichier = "$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).".txt";
     
      if (-e ($fichier)){
      #récupération des infos fichier
        foreach ($fichier){
           $dossier = $ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}; #On récupère le nom du dossier contenant le fichier
           $nomcaisse = $caisse; #On récupère le nom de la caisse
           $nomfichier = $fichier ; #On récupère le nom du fichier
           @file_stat = localtime($fichier); #On récupère date et heure
           $datep = strftime( "%d/%m/%y" ,@time_stats); #date JJ/MM/YYYY
           $heurep = strftime( "%T", @time_stats); #heure
     
           my $implementation = fichier_plat(); #Copie dans le fichier csv
          }
       }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach my $caisse (%reverse_mapping)
    Tu devrais ajouter un my vu que tu utilises le pragma strict.
    Tu ne précises pas $caisse est la clé ou la valeur du tableau, tu récupères donc les deux. Est-ce vraiment ce dont tu as besoin?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      if (-e ($fichier)){
      #récupération des infos fichier
        foreach ($fichier){
    Dans if (-e ($fichier)) les parenthèses encadrant $fichier sont accessoires.
    Donc tu vérifie si le fichier existe ... mais que cherches tu à faire avec le foreach($fichier), il semble inutile et superflu.
    -- Jasmine --

  13. #13
    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 j'ai corrigé le script hier
    coucou Jasmine tu vas pouvoir me direr si mes corrections ont du sens

    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
    89
    90
    91
    92
    93
    94
    95
    96
     
    #!/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);
     
    my %mapping;
    my %reverse_mapping;
    my $chemin;
    my $fichier;
    my $nomfichier;
    my $caisse;
     
    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;
      }
    }
    close IN;
    printf "OK\n";
     
    foreach $caisse (%reverse_mapping) {
     
    #Récupération PLUPD SUMMIT
      $chemin = "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/SUMMIT/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/";
      $fichier = "$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).".txt";
     
      if (-e ($fichier)){
           my $dossier = $ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}; #On récupère le nom du dossier contenant le fichier
           my $nomcaisse = $caisse; #On récupère le nom de la caisse
           my $nomfichier = $fichier ; #On récupère le nom du fichier
           my @time_stats = localtime($fichier); #On récupère date et heure
           my $datep = strftime( "%d/%m/%Y" ,@time_stats); #date JJ/MM/YYYY
           my $heurep = strftime( "%T", @time_stats); #heure
     
           my $implementation = fichier_plat(); #Copie dans le fichier csv
       }
     
    #Récupération CHOPE_G & CHOPE_5J INFOCENTRE
      $chemin = "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/";
      $fichier = "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/"
      ."CHOPE_*.xls";
     
      if (-e ($fichier)){ #récupération des infos les fichiers CHOPE_*J.xls
         foreach ($fichier){ # pour chaque fichiers
           $dossier = $ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}; #On récupère le nom du dossier contenant le fichier
           $nomcaisse = $caisse; #On récupère le nom de la caisse
           $nomfichier = $fichier ; #On récupère le nom du fichier
           @time_stats = localtime($fichier); #On récupère date et heure
           $datep = strftime( "%d/%m/%y" ,@time_stats); #date JJ/MM/YYYY
           $heurep = strftime( "%T", @time_stats); #heure
     
           my $implementation = fichier_plat(); #Copie dans le fichier csv
          }
       }
    }
     
    #Insertion des informations contenues dans les variables vers le fichier indicateur_convention.txt
    sub fichier_plat
      {
      my @fichier = ($dossier $caisse $nomfichier $datep $heurep);
      my $save = "./indicateur_convention.csv"; # sauvegarde dans un fichier csv
     
      open (FH, ">>$save") || die $!;
    #Dossier;Caisse;Nom fichier;Datefichier;Heurefichier
      foreach (@fichier){
          print FH $_.";";
        }
      print FH "\n";
      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:
    un des foreach($fichier) n'est pas valable je pense puisqu'il n'y a qu'un fichier txt
    pour l'autre foreach le $fichier est fixé ainsi $fichier= chope_*.xls
    car il y a chope_5j.xls et et chope_g.xls dans le même répertoir donc pour moi le * a valeur d'un joker et me permet de récupérer les infos des deux fichiers, ça m'évite de faire le même bout de code pour les 2 fichiers

    les foreach on pour moi "l'utilité suivante": pour chaque fichier trouver dans le dossier qu'ils soient 2,3 ou 25 fichiers, prends les infos et rapatrie les

    mais je pense après que toi tu peux me dire si mon code est mal foutu

  14. #14
    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
    il y a chope_5j.xls et et chope_g.xls dans le même répertoir donc pour moi le * a valeur d'un joker et me permet de récupérer les infos des deux fichiers, ça m'évite de faire le même bout de code pour les 2 fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      $fichier = "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/"
      ."CHOPE_*.xls";
     
      if (-e ($fichier)){ #récupération des infos les fichiers CHOPE_*J.xls
         foreach ($fichier){ # pour chaque fichiers
    foreach c'est pour quand tu as un tableau contenant plusieurs valeurs à parcourir. Or, ici tu utilises un foreach sur un scalaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach my $fichier ("chemin/chope_5j.xls", "chemin/chope_g.xls" ){
          if(-e $fichier){
          }
    }
    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
    my %mapping;
    my %reverse_mapping;
    my $chemin;
    my $fichier;
    my $nomfichier;
    my $caisse;
     
    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;
      }
    }
    close IN;
    Juste une remarque pour créer ton tableau %reverse_mapping tu aurais pu faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my %reverse_mapping = reverse %mapping;
    Qui échange les clés et les valeurs

    Perldoc : reverse
    This operator is also handy for inverting a hash, although there are some caveats. If a value is duplicated in the original hash, only one of those can be represented as a key in the inverted hash. Also, this has to unwind one hash and build a whole new one, which may take some time on a large hash, such as from a DBM file.

    %by_name = reverse %by_address; # Invert the hash

    mais je pense après que toi tu peux me dire si mon code est mal foutu
    Je peux te donner quelques conseils, mais il y a des gens bien plus expérimentés que moi sur ce forum pour corriger ce code.
    -- Jasmine --

  15. #15
    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 code upgrade
    voila ce que ça donne maintenant
    je l'ai pas encore tester mais je vois ça cet aprèm

    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    #!/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 $nomfichier;
    my $caisse;
    my @time_stats;
    my $mtime;
    my $datep;
    my $heurep;
    my $implementation;
     
    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;
        #my %reverse_mapping = reverse %mapping;
      }
    }
    close IN;
    printf "OK\n";
     
    foreach $caisse (%reverse_mapping) {
     
    #Récupération PLUPD SUMMIT
      $chemin = "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/SUMMIT/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/";
      $fichier = "$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).".txt";
     
      if (-e $fichier){ #si le fichier existe récupération des infos du fichier
           $dossier = $ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}; #On récupère le nom du dossier contenant le fichier
           $nomcaisse = $caisse; #On récupère le nom de la caisse
           $nomfichier = $fichier ; #On récupère le nom du fichier
           @time_stats = stat($fichier); #On récupère date et heure
           $mtime = $file_stat[9];
           $datep = strftime( "%d/%m/%Y" ,localtime($mtime)); #date JJ/MM/YYYY
           $heurep = strftime( "%H:%M:%S",localtime($mtime)); #heure HH:MM:SS
     
           my $implementation = fichier_plat(); #Copie dans le fichier csv
       }
     
    #Récupération CHOPE_G & CHOPE_5J INFOCENTRE
      $chemin = "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/";
      #$fichier = "$ENV{INTRANET_BASEDIR}/$caisse/Commun/REPORTING/INFOCENTRE/$ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}/"."CHOPE_*.xls";
     
       foreach $fichier ("$chemin/CHOPE_5J.xls", "$chemin/CHOPE_G.xls"){ #récupération des infos les fichiers CHOPE_*.xls
         if (-e $fichier) { # pour chaque fichiers
           $dossier = $ENV{PAR_J_YYYY}$ENV{PAR_J_MM}$ENV{PAR_J_DD}; #On récupère le nom du dossier contenant le fichier
           $nomcaisse = $caisse; #On récupère le nom de la caisse
           $nomfichier = $fichier ; #On récupère le nom du fichier
           @time_stats = stat($fichier); #On récupère date et heure
           $mtime = $file_stat[9];
           $datep = strftime( "%d/%m/%y" ,localtime($mtime)); #date JJ/MM/YYYY
           $heurep = strftime( "%H:%M:%S",localtime($mtime)); #heure HH:MM:SS
     
           $implementation = fichier_plat(); #Copie dans le fichier csv
          }
       }
    }
     
    #Insertion des informations contenues dans les variables vers le fichier indicateur_convention.txt
    sub fichier_plat
      {
      my @fichier = ($dossier $caisse $nomfichier $datep $heurep);
      my $save = "./indicateur_convention.csv"; # sauvegarde dans un fichier csv
     
      open (FH, ">>$save") || die $!;
    #Dossier;Caisse;Nom fichier;Datefichier;Heurefichier
      foreach (@fichier){
          print FH $_.";";
        }
      print FH "\n"; #une fois les 5 infos inscrites on passe à la ligne suivante
      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:

  16. #16
    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
    9
    open IN, "<$ENV{STKROOT}/batch/rep_mapping_caisse.ini";
    while (<IN>) {
      if (m/^([a-z]+):(.*):(.*)$/) {
        $mapping{$1}=$2;
        $reverse_mapping{$2}=$1;
        #my %reverse_mapping = reverse %mapping;
      }
    }
    close IN;
    c'est pas exactement là que j'aurais placé le reverse %mapping ... réfléchis un peu

    Pourquoi places-tu 3 couples de parenthèses et ne récupères-tu que $1 et $2?




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $implementation = fichier_plat(); #Copie dans le fichier csv
    A quoi te sert cette nouvelle variable $implementation?

    Pourquoi pas simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier_plat($dossier, $caisse, $nomfichier, $datep, $heurep);
    ... sans oublier les arguments à passer




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub fichier_plat
      {
      my @fichier = @_;
    Les arguments passés au sous-programme sont stockés dans la variable @_ tu accèdes aux valeurs individuelles par $_[0], $_[1] ... ou via la fonction shift.

    Enfin, dans ce cas tu as déclaré toutes tes variables en début de script et le sous-programme y a donc accès. Tu peux donc te passer de noter les arguments à envoyer. C'est plus simple, mais je n'aime pas cette méthode.



    C'est un peu se compliquer la vie que de créer un sous-programme dont le but est d'écrire dans un fichier. A ta place, j'aurais ouvert le fichier en début de script, écris directement dans le programme principal et fermé à la fin du script ... mais je ne sais pas ce qui est préférable.



    A ta place je testerais petits morceaux par petits morceau. Rajoute le my dont je t'ai parlé plus haut, cela fera une erreur de moins.
    -- Jasmine --

  17. #17
    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
    c'est pas exactement là que j'aurais placé le reverse %mapping ... réfléchis un peu

    Pourquoi places-tu 3 couples de parenthèses et ne récupères-tu que $1 et $2?
    mon fichier rep_mapping.ini est foutu ainsi

    cealsace:CEALSACE:ALSACE
    cean:CEAN:AQUITAINENORD
    ...
    cedidf:CEIDF:ILEDEFRANCE

    j'ai besoin de récupérer les "keys" et les "values" et pas le descriptif après (enfin c'est comme ça qu'on m'a présenté le fichier et que j'ai compris les choses)

    la variable $implementation ne sert à rien je m'en suis rendu compte et j'ai corrigé cette absurdité

    et autant pour la sous fonction que j'avais créer pour l'appliquer aux différents fichiers sans avoir à retaper à chaque fois le même code.

    Je suis en train de tester le code, j'en ai pour une bonne heure
    si le script est OK, je le publie et ainsi on pourra voir s'il y a encore des améliorations possibles

    en tout cas de 200 lignes de codes au début je suis descendu à 60 lignes par l'optimisation

  18. #18
    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
    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.

    Tu veux créer deux tableau dont l'un est l'inverse de l'autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while (<IN>) {
      if (m/^([a-z]+):(.*):(.*)$/) {
        $mapping{$1}=$2;
        $reverse_mapping{$2}=$1;
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while (<IN>) {
      if (m/^([a-z]+):(.*):(.*)$/) {
        $mapping{$1}=$2;
        my %reverse_mapping = reverse %mapping;
      }
    }
    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




    Pourquoi places-tu 3 couples de parenthèses et ne récupères-tu que $1 et $2?
    cealsace:CEALSACE:ALSACE
    cean:CEAN:AQUITAINENORD
    ...
    cedidf:CEIDF:ILEDEFRANCE

    j'ai besoin de récupérer les "keys" et les "values" et pas le descriptif après (enfin c'est comme ça qu'on m'a présenté le fichier et que j'ai compris les choses)
    Qu'est-ce qui est la clé ($1) et la valeurs ($2)?
    Supprime le couple de parenthèses en trop vu que tu n'as pas de $3.

    cealsace:CEALSACE:ALSACE

    si tu veux les deux derniers morceaux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (m/^[a-z]+:([A-Z]+):([A-Z]+)$/)
    $1 et $2
    -- Jasmine --

  19. #19
    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
    ok c noté

    une autre question comment fait on une expression régulière pour
    extraire une partie d'un nom dans une variable

    ex:

    $nomfichier = "20080813_toto_titi_PLUPD_20071231_20080812.txt"
    et obtenir juste PLUP?

  20. #20
    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
    20080813_toto_titi_PLUPD_20071231_20080812.txt
    chiffres_lettresEnMinuscules_lettresEnMinuscules_(MajusculesArécupérer)_chiffres_chiffres.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =~/\d+_[a-z]+_[a-z]+_([A-Z])_\d+_\d+\.txt/;
    A adapter en fonction de tes besoins, tout en sachant que //i rend la recherche insensible à la casse et que \w équivaut à des lettres, chiffres et/ou underscore.
    \. pour reconnaître le caractère point
    -- Jasmine --

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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, 18h30
  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, 22h16
  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, 15h26
  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, 18h18
  5. [ SWT ] Récupération info d'un Browse
    Par geegee dans le forum SWT/JFace
    Réponses: 11
    Dernier message: 08/06/2004, 16h23

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