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 :

Assigner a une variable une valeur lue dans un fichier texte


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Novembre 2009
    Messages : 19
    Par défaut Assigner a une variable une valeur lue dans un fichier texte
    Bonjour,

    j ai un fichier texte StartEnd.txt contenant 2 lignes, chaque lignes ayant 3 nombres.
    Par exemple:
    211 205 199
    291 180 59

    Je souhaiterais pouvoir recuperer ces 6 valeurs afin de les assigner a des variables (x1,y1,z1,x2,y2,z2) dans mon fichier shell.

    Mon probleme est que je ne sais pas comment aller lire et recuperer ces valeurs
    Une idee???

    Merci d avance!

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 654
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    Bonjour mapotam,

    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/bash
     
    set -- $(<StartEnd.txt)
    echo "le 4ème paramètre positionnel vaut $4"
    for line in 1 2
     do
       for item in x y z
        do
          posParm=$((++n))
          eval ${item}$line=\${$posParm}
       done
    done
    echo "\$x2 vaut $x2"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    le 4ème paramètre positionnel vaut 291
    $x2 vaut 291
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Novembre 2009
    Messages : 19
    Par défaut
    Merci!
    exactement ce dont j avais besoin

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Bonsoir à tous.

    J'ai un problème similaire et j'ai voulu reprendre la solution mais je n'y arrive pas.

    J'ai un fichier "kptrlen1" qui contient 3 chiffres:
    3
    5
    6
    et j'ai un autre fichier "etotal" qui contient également 3 autres chiffres:
    6
    3
    2

    et j'aimerais avoir un fichier final avec:
    3 6
    5 3
    6 2

    Comme je n'ai pas trouvé de moyen pour concaténer 2 colonnes ensemble j'ai pensé à assigné chaque chiffre à un x1, x2 etc comme proposé dans cette solution et j'ai fais le code suivant:

    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
    set -- $(<kptrlen1)
    for line in 1 2 3
     do
       for item in x
        do
          posParm=$((++n))
         eval ${item}$line=\${$posParm}
       done
    done
    set -- $(<etotal1)
    for line in 1 2 3
     do
       for item in y
        do
          posParm=$((++n))
          eval ${item}$line=\${$posParm}
       done
    done
    echo " $x1 $y1 " > result
    echo " $x2 $y2 " >> result
    echo " $x3 $y3 " >> result
    Mon code de marche pas car visiblement il ne tiens pas compte de la deuxième boucle for.

    D'avance merci pour votre réponse.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 654
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    Bonjour Tanakaa,

    Tu me sembles compliquer l'histoire...

    Si tu es certain que les deux fichiers font le même nombre de lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tab1=( $(<fichier1) )
    tab2=( $(<fichier2) )
    for (( x=0 ; x < ${#tab1[@]} ; x++ )); do
      echo "${tab1[x]} ${tab2[x]}"
    done
    Tu peux aussi passer par des descripteurs de fichiers, comme dans le dernier message de cette discussion
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Merci beaucoup N_BaH, ça marche nickel =)

    Par contre serait-il possible d'avoir une petite explication de la condition : " x < ${#col1[@]}"

    Je suppose que ça signifie lorsque x < le nombre de max de ligne de la première colonne mais pourrais-je avoir une explication de ce que fait "#" et "@" ?

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 654
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    pour une variable var, ${#var} donne le nombre de caractères de la variable
    pour un tableau tab, ${#tab[@]} donne le nombre d'éléments du tableau
    pour un élément d'index n du tableau tab, ${#tab[n]} donne le nombre de caractères de l'élément indexé n

    voir ici.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Ok merci bien

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/12/2009, 13h33
  2. [MySQL] Comparer le contenu d'une variable aux valeurs contenues dans une table
    Par mmlio dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/10/2009, 17h20
  3. Assigner le resultat d'une requète à une variable
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/08/2009, 11h26
  4. Attribution des valeurs lues dans un fichier texte
    Par law56100 dans le forum WinDev
    Réponses: 1
    Dernier message: 29/05/2008, 16h07
  5. Récupérer une variable pour l'afficher dans un Edit Text
    Par maiza_med dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 30/04/2008, 10h14

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