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 :

appconfig methodes file() et args()


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut appconfig methodes file() et args()
    Bonjours,

    je souhaite utiliser le module appconfig pour :
    - lire dans un premier depuis la ligne de commande le nom d'un fichier de configuration que l'utilisateur y aura précisé
    - et donc ensuite lire des parametres depuis ce fichier de configuration
    - et enfin relire les parametres depuis la ligne de commande si l'utilisateur souhaitait y redéfinir (plus aisément que par le fichier) des parametres.

    Un petit bout de code de coutume :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    my $config = AppConfig->new("conf_file=s", "mydb=s", "ensembl_database=s", "ensembl_host=s", "refseq_db_file=s", "tigr_db_file=s", "chicken_db_dir=s", "transfac_site_table=s", "identif_file=s", "blat_file=s", "aln_length=s", "minimum_overlap=s", "promoter_upstream=s", "promoter_downstream=s", "set1=s", "set2=s", "min=s", "max=s", "help");
    $config->args();
    $config->file($config->conf_file);
    $config->args();
    Le problème : le deuxième appel de args() ne remet pas à jour les parametres. Il n'y a que lorsque j'en lève le premier appel à args() que le deuxième permet d'ecraser les anciens parametres du fichier.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    my $config = AppConfig->new("conf_file=s", "mydb=s", "ensembl_database=s", "ensembl_host=s", "refseq_db_file=s", "tigr_db_file=s", "chicken_db_dir=s", "transfac_site_table=s", "identif_file=s", "blat_file=s", "aln_length=s", "minimum_overlap=s", "promoter_upstream=s", "promoter_downstream=s", "set1=s", "set2=s", "min=s", "max=s", "help");
    #########$config->args();
    $config->file($config->conf_file);
    $config->args();
    Ca marche mais de cette facon je ne peux pas obtenir le nom du fichier de configuration de l'utilisateur voudrait pouvoir préciser.

    J'espère avoir été compréhensible et vous souhaite bon appetit!

    Yan

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut
    En fait j'ai trouvé une solution mais qui parait pas très propre :
    faire que le premier argument en ligne soit celui donnant le nom du fichier de configuration, donc en lisant avec un simple shift puis ensuite faire ce "classqiue"
    $config->file();
    $config->args();

    Demo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    my $config = AppConfig->new("mydb=s", "ensembl_database=s", "ensembl_host=s", "refseq_db_file=s", "tigr_db_file=s", "chicken_db_dir=s", "transfac_site_table=s", "identif_file=s", "blat_file=s", "aln_length=s", "minimum_overlap=s", "promoter_upstream=s", "promoter_downstream=s", "set1=s", "set2=s", "min=s", "max=s", "help");
    # $config->args();
    $config->file(shift);
    $config->args();
    Mais voilà du coup l'utilisateur doit absolument mettre en premier argument le nom du fichier de conf (source de soucis) et c'est pas homogène avec les autres facon de définir les arguments.
    Beurk

    Si quelqu'un à mieux...

    Yan

  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
    Fais une copie @copy_argv de @ARGV avant d'utiliser args() et file() puis réutilise cette copie dans args(@copy_argv) .

    --
    Jedaï

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut
    Quelle astuce de Jedai! Aller ça méritera plus un "Résolu" que ma bidouille!

    Merci

    Yan

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

Discussions similaires

  1. Methode public static void main (String [] args)
    Par jeremypd dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 09/01/2017, 10h53
  2. Réponses: 0
    Dernier message: 11/07/2014, 18h03
  3. Réponses: 2
    Dernier message: 18/03/2010, 07h07
  4. Réponses: 4
    Dernier message: 15/01/2008, 17h31
  5. Réponses: 6
    Dernier message: 08/03/2007, 14h55

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