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

Shell et commandes GNU Discussion :

Utiliser un fichier INI


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut Utiliser un fichier INI
    Bonjour,
    Je cherche le moyen (le plus simple) pour utiliser un fichier INI du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [personne]
    nom=toto
    age=23
     
    [personne]
    nom=titi
    age=29
    pour ensuite, dans mon script principal, boucler sur toutes les sections [personne] et récupérer leur clé/valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    ini=conf.ini
    nb=`grep -o '\[personne\]' $ini | wc -l`
    for((n=1;n<=$nb;n++))
    do
    	echo "section n°"$n
    	echo "nom:" # récupérer le nom de la section n ?
    	echo "age:" # récupérer l'âge de la section n ?
    done
    merci d'avance !

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    Vu ta description, il faut t'orienter vers les fichiers xml. Et l'outil xmllint.

    Ce n'est pas un vrai fichier ini puisque tes catégories ont les mêmes noms.

    Si le but est vraiment de faire une chose simple, il faut t'orienter vers les fichiers csv (et l'outil awk). Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    type;nom;age
    personne;toto;23
    personne;titi;29
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk -F';' '{print $2;}' fichier.csv
    nom
    toto
    titi

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 357
    Par défaut
    Bonjour,

    Flodelarab a raison, c'est loin d'être intuitif d'utiliser des formats tel que le tient, d'ailleurs quels sont les spécificités immuables de celui-ci ?

    Si on prend, le fichier en exemple que tu donnes, on peut le traiter tel que ci-dessous, mais cela ne fonctionnera que dans ce cas précis ou l'on considère certaines spécificités de ton fichiers exemple dont tu ne parles pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    ini=conf.ini
    n=1
    while read -r -d ' ' attribut nom age || [[ -n $nom ]]
    do
            echo "section n°$((n++))"
            echo "nom: ${nom/*=/}" # récupérer le nom de la section n ?
            echo "age: ${age/*=/}" # récupérer l'âge de la section n ?
    done <$ini
    PS: Pas la peine de me demander une description du code, celui-ci n'est qu'un brouillon (comme ta demande ) qu'il ne faut surtout pas utiliser tel quel.

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    merci pour votre aide...

    Le format du fichier INI n'est pas figé...
    Je pense avoir besoin d'une dizaine de section "personne" ayant toutes les même propriétés mais avec valeurs différentes
    J'ai essayé avec CSV et AWK :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nom;age
    toto;23
    titi;29
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    csv=conf.csv
     
    traitement(){
    	echo "nom:"$1
    	echo "age:"$2
    }
     
    awk -F';' '{parcours $1 $2}' $csv
    Je n'arrive pas à utiliser ma fonction traitement()...
    un dernier coup de palme ?

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 357
    Par défaut
    Voici un exemple en modifiant le script précédent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    ini=conf.ini
    n=1
    while IFS=";" read -r nom age || [[ -n "$nom" ]]
    do
            echo "section n°$((n++))"
            echo "nom: ${nom}" # récupérer le nom de la section n ?
            echo "age: ${age}" # récupérer l'âge de la section n ?
    done < <(sed '1d' $ini)
    ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat conf.ini
    nom;age
    toto;21
    titi;23
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ bash f.sh
    section n°1
    nom: toto
    age: 21
    section n°2
    nom: titi
    age: 23

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    ça semble marcher au poil...

    merci Flodelarab et disedorgue !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/03/2014, 11h05
  2. Utilisation TIniFiles (fichier ini)
    Par beni34 dans le forum Débuter
    Réponses: 11
    Dernier message: 14/04/2009, 18h23
  3. Utilisation de fichier ini
    Par nuFox dans le forum C
    Réponses: 32
    Dernier message: 04/03/2008, 14h48
  4. Pinguer plusieurs Ports en utilisant un fichier INI
    Par fthdz dans le forum Langage
    Réponses: 16
    Dernier message: 14/11/2007, 13h26
  5. Utiliser un fichier ini
    Par Sytchev3 dans le forum Langage
    Réponses: 3
    Dernier message: 14/08/2007, 17h48

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