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

Langage Perl Discussion :

Fichier de conf variable


Sujet :

Langage Perl

  1. #1
    tyx
    tyx est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Points : 54
    Points
    54
    Par défaut Fichier de conf variable
    Bien le bonjour,

    A titre exceptionnel, j'ai remis les mains dans ce bon vieux perl que je n'avais que survolé à chaque utilisation.
    Et me voilà confronté à un souci d'organisation qui m'embête.

    Mon script a un paramètre country et doit inclure un fichier de conf différent selon la valeur de ce dernier. (ahh la mondialisation)

    j'ai fait quelques recherches sur ces forums, et à chaque question sur le require pour un fichier de conf, on parle de package.
    Le souci c'est qu'un package c'est loin d'être "facile" d'utilisation pour le commun des mortels et les fichiers de conf seront modifiés par des personnes lambas, habitué à des fichiers classiques
    N'est-il donc pas possible de déclarer des variables dans des fichiers externes et demander à notre fichier principale de les utilisers comme tels?
    Etant en environnement de production, il va de soi que l'ajout de module n'est pas pensable, je me tourne donc vers vous pour une solution peut-être pas propre mais qui fonctionne.

    Merci.

  2. #2
    Membre actif Avatar de scaleo
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 327
    Points : 219
    Points
    219
    Par défaut
    Heu tes user il entre la valeur eux-meme ?

    si tu connais les valeurs bah pas de soucie;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my %conf = (
        valeur => fichier,
        ....
           );
    vue que c'est un fichier de configuration je te conseille d'utiliser XML

    ont peut faire :

    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
    #!/usr/bin/perl -w
    use strict;
    use diagnostics;
    use XML::Simple;
     
    my $valeur = $ARGV[0];
     
    my %conf = (
        1 => '1.xml',
        2 => '2.xml'
    );
     
    my $country = undef; # le undef sert a rien c'est juste pour le fun 8-) 
     
    if ( exists $conf{$valeur} )
    {
       my $p = new XML::Simple;
       $country = $p->XMLin($conf{$valeur});
    }
     else
    {
       print "Erreur\n";
    }

    ou avec require :
    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
     
    #!/usr/bin/perl -w
    use strict;
    use diagnostics;
    use XML::Simple;
     
    my $valeur = $ARGV[0];
     
    my %conf = (
        1 => 'module::toto',
        2 => 'module::toto1'
    );
     
    my $country = undef;
     
    if ( exists $conf{$valeur} )
    {
       require $conf{$valeur};
       $country = new $conf{$valeur}; # par exemple
    }
     else
    {
       print "Erreur\n";
    }
    J'ai testé aucun des deux codes c'est juste des idées

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par tyx
    N'est-il donc pas possible de déclarer des variables dans des fichiers externes et demander à notre fichier principale de les utilisers comme tels?
    Etant en environnement de production, il va de soi que l'ajout de module n'est pas pensable, je me tourne donc vers vous pour une solution peut-être pas propre mais qui fonctionne.

    Merci.
    Je trouve qu'interdire l'ajout de modules du CPAN en environnement de production n'est pas super, mais selon tes besoins, tu peux te contenter d'un truc ultra-simple style "identifiant = valeur" et mettre ça dans un hash

    --
    Jedaï

  4. #4
    tyx
    tyx est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    merci de vos réponses.

    Est-ce que le module XML::Simple est un module de série?

    Car si ce n'est pas le cas, comme je l'ai je n'ai pas la possibilité de le rajouter. Ce n'est pas moi qui pose le véto mais bien les hautes instances, et je n'ai pas le temps de me battre pour ça. Que se soit une décision contestable, je le conçois mais ainsi va la vie ^^

    Je testerais ça quand même demain.

    Pour Jedai, ton idée me semble bien, mais la question de la récupération se passerait comment?
    Un fichier de conf, que j'ouvrirais et traiterais comme n'importe quel fichier pour y récupérer ce que je veux?

  5. #5
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par tyx
    Pour Jedai, ton idée me semble bien, mais la question de la récupération se passerait comment?
    Un fichier de conf, que j'ouvrirais et traiterais comme n'importe quel fichier pour y récupérer ce que je veux?
    Exactement !

    un fichier du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    propriete1=valeur1
    propriete2=valeur2
    Et le code pour le lire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    my $propertyfile = 'appli.properties';
    my %hash = ();
     
    open(my $input, '<', $propertyfile) || die("impossible d'ouvrir $propertyfile en lecture\n");
    while (<$input>)
    {
        my ($name, $value) = split(/=/);
        $hash{$name} = $value;
    }
    close($input);

  6. #6
    tyx
    tyx est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    Merci à vous 2, le module XML n'étant pas installé, je vais opter pour la solution de Jedai qui me convient parfaitement.

    edit: au cas où, a noter qu'il vaut mieux chomp le flux avant de l'insérer dans le hash histoire de pas avoir les retours à la ligne dans les valeurs ^^

  7. #7
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Certes, le chomp est sympathique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    my $propertyfile = 'appli.properties';
    my %hash = ();
     
    open(my $input, '<', $propertyfile) || die("impossible d'ouvrir $propertyfile en lecture\n");
    while (<$input>)
    {
        chomp();
        my ($name, $value) = split(/=/);
        $hash{$name} = $value;
    }
    close($input);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer des variables dans un fichier de conf
    Par Takka dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2014, 16h14
  2. Réponses: 2
    Dernier message: 16/04/2012, 17h30
  3. Réponses: 2
    Dernier message: 27/05/2008, 21h02
  4. Réponses: 4
    Dernier message: 19/03/2004, 11h48
  5. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09

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