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 :

regexp - Recup d'un parametre dans un .ini


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut regexp - Recup d'un parametre dans un .ini
    Je souhaiterais récupérer la valeur d'un paramètre situé dans un fichier d'initialisation grace a une expression reguliere.

    Exemple, si mon fichier contient :
    nom=dupont
    prenom=jean
    age=12

    Je souhaiterais a l'aide d'une regexp recuperer par exemple la valeur du parametre nom soit dupont.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    Hello,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # fichier ini
    nom=dupont
    prenom=jean
    age=12
    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
    # le script qui lit et récupère TOUS les paramètres du fichier ini
    use strict;
    use warnings;
     
    my %Param;
     
    open(INI, "mon_fichier.ini") or die("pb lecture fichier ini : $!\n");
    while(<INI>)
    {
        chomp();
        $Param{$1} = $2 if (/(.+)\=(.+)/);
    }
    close(INI);
     
    foreach keys(%Param)
    {
        print "pour le paramètre $_ nous avons pour valeur $Param{$_}\n";
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Merci, par contre il doit y avoir une petite erreur dans le script car au lieu de m'afficher les differentes valeurs des parametres j'ai droit a un : "Missing $ on loop variable at readinifile.pl line 19"

    Pour info la ligne 19 correspond à : foreach keys(%Param)

    J'ai bien essayé de trouver l'erreur mais je me rend compte que le perl c'est quand meme pas mal different des autres langages... pas toujours facile a comprendre même avec des notions de développement, c'est un peu "exotique", cela dit ca a l'air hyper puissant.

    Promis, après ca je t'embête plus ^^

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Désolé pour le dérangement, en cherchant un peu j'ai finalement trouvé, c'est juste la ( qui doit être avant le mot cle keys et pas après.

    Ca marche impeccable, encore merci, maintenant il ne me reste plus qu'a tout comprendre...

  5. #5
    Expert confirmé
    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
    Par défaut
    Si ton fichier INI commence à se compliquer un peu (avec des blocks [Section], ou des commentaires, ou des listes), utilise plutôt l'un des modules de la famille Config::* . Evidemment si ton fichier reste toujours aussi simple, ce n'est pas la peine de te poser le problème.

    --
    Jedaï

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    quelque soit la simplicité de ton dichier .ini, je te conseil le module Cofig::Std.
    Il n' y pas plus simple pour l'utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    use Config::Std { def_sep => '=' };
    read_config("ton fichier.ini" => my %config);
    print $config{TA SECTION}{nom};
    print $config{TA SECTION}{prenom};
    print $config{TA SECTION}{age};
    Tres simple

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Mes fichiers .ini sont en général très simples et ne contiennent pas de sections. De plus étant donné que je débute en perl je préfère mettre un peu les mains dans le cambouis, ca me permet d'apprendre.

    Cela dit il y a une ligne que j'ai du mal a comprendre dans le script que Arioch m'a donné... c'est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $Param{$1} = $2 if (/(.+)\=(.+)/);
    Pourquoi un if sans accolades ? pourquoi pas de ; entre $2 et if ?

    PS:desole pour cette question qui peut paraitre idiote pour certains...

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    au fait tu as deux façons d'ecrire :
    1) 1er cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (/(.+)\=(.+)/) {
      $Param{$1} = $2;
    }
    ou
    2) 2eme cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Param{$1} = $2 if (/(.+)\=(.+)/);
    Il est generalement conseillé d'utiliser le 1er cas, car c'est beaucoup plus clair et maintenanble pour tout le monde. De plus, c'est plus commun par rapport à d'autre langage.

    Neanmoins, le deuxième cas est souvent préconisé lorsqu'on souhaite faire un next, last ou redo car niveau visibilité, ça permet de mettre en evidence tout de suite ce qu'on souhaite faire et c'est donc plus lisible et maintenable.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IP:
    foreach my $toto (@données_ip) {
     last IP if($toto == $autre_ip);
    }
    sera plus clair que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IP:
    foreach my $toto (@données_ip) {
      if($toto == $autre_ip) {
         last IP;
      }
    }
    Maintenant c'est juste des conseils, chacun fait comme il le souhaite.

Discussions similaires

  1. [Batch] Integrer les parametres du fichier ini dans le batch
    Par david-manu dans le forum Scripts/Batch
    Réponses: 13
    Dernier message: 17/05/2013, 10h32
  2. [2.x] Validations en utilisants les parametres dans parameters.ini
    Par Teudjy dans le forum Symfony
    Réponses: 4
    Dernier message: 25/05/2012, 14h08
  3. Parametre dans fichier ini pour base fractionnée
    Par sunvialley dans le forum Access
    Réponses: 5
    Dernier message: 28/07/2006, 14h38
  4. Réponses: 8
    Dernier message: 18/07/2005, 14h04
  5. Comment renseigner la variable autocommit dans my.ini
    Par Charroin dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 18/09/2003, 15h23

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