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 :

Paramètres de position


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut Paramètres de position
    bonjour à tous,


    Dans un script je fais une boucle sur les paramètres de position :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i 
    do 
               if
               then
               else
               fi
    done
    Mon problème est que je ne sais pas "manipuler" les paramètres de position.

    J'essaie de préciser:
    La boucle if execute des tests sur les valeurs de mes paramètres de position. Lorsque l'un des tests est OK, je souhaite savoir quel est le numéro du paramètre de position concerné (et accessoirement récupérer les valeurs du paramètre précédent et du paramètre suivant).

    Je sais ça peut paraitre bête de ne pas savoir la position d'un paramètre de position mais j'y arrive paaaaaaaaaas ! : ((


    Je précise que je suis sous Windows (environnement Cygwin)

    Par avance merci pour votre aide, mon boss et moi-même vous serions reconnaissant ... ; )

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 362
    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 362
    Par défaut
    Bonjour,

    Peux tu donner un exemple avec des paramêtres de position tels que tu le conçois (même s'il ne fonctionne pas), et donner le résultat voulu ?
    Plus clairement, un exemple de donnée d'entrées avec le résultat escompté.

    Cordialement.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut
    bonjour disedorgue et merci

    Je vais essayer de résumer au mieux.

    Mon objectif final est de récupérer deux valeurs pour chaque ligne d'un fichier texte. Chaque ligne est presque similaire et du type :
    les valeurs intéressantes sont "Valeur1" et "Valeur2" .

    Voici mon script actuel:

    1-je lis mon fichier ligne par ligne avec :
    2-J'affecte à chaque mot un paramètre de position avec la commande:
    3-Je cherche quel paramètre de position est égal à la chaine de caractère "et" car les valeurs numériques sont toujours avant et après le "et".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i ; do
    if [[ $i== et ]]
    then .....
    else....
    fi
    lorsque l'un des paramètres est bien égal à "et" je ne sais pas comment identifier le numéro du paramètre.
    J imagine un "echo quelquechose" mais le "quelquechose" m'est inconnu :p

    merci encore,

    Au cas ou ce n 'est pas assez clair, je reste à ta dispo.

    Merci encore

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut
    J'en profite pour vous poser une autre question qui m 'a deja posé problème une fois (je suis débutant :p ) et qui me permettrai d'utiliser un compteur

    Admetons :

    set argument1 argument2
    et a=2

    comment avoir la valeur du deuxième paramètre de position sans faire
    echo $2

    mais
    echo $ {$a}

    Ca m'aiderai beaucoup, merci !

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Ladoll Voir le message
    J'en profite pour vous poser une autre question qui m 'a deja posé problème une fois (je suis débutant :p ) et qui me permettrai d'utiliser un compteur

    Admetons :

    set argument1 argument2
    et a=2

    comment avoir la valeur du deuxième paramètre de position sans faire
    echo $2

    mais
    echo $ {$a}

    Ca m'aiderai beaucoup, merci !
    Salut
    ... (si N_Bah voit ça il va encore me tuer... mais j'aime tant le faire bisquer )
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    tu m'étonnes !

    surtout pour un algo, qui, àmha, va dans le mur.

    s'il faut récupérer les élément qui sont de part et d'autre d'un motif (ici et)
    j'enlèverais tout ce qui est avant un espace avant le mot précédent, et après un espace après le mot qui suit.

    mais la présentation du problème est très orientée, et mène ... dans le mur.

    quel doit être l'aspect de la sortie attendue ?
    peut-on avoir un échantillon du fichier à parser ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Merci de tes précisions!
    L'affectation aux paramètres de position n'est pas forcément la "meilleure" solution!
    Surtout que connaître l'indice d'un argument de position ne va pas t'aider car les arguments de position ne forment pas un tableau (tu ne peux pas faire facilement argv[i] (comme en C)).

    Il vaudrait probablement mieux parser la ligne plutôt que la découper en mots.
    Peux-tu nous donner un exemple de quelques lignes types et de ce que tu aimerais obtenir à partir de ces lignes?

    Merci d'utiliser la balise code pour le code et les données en cliquant sur le signe # dans la barre d'outils.

    Si tu insistes vraiment pour continuer dans cette voie, tu peux t'inspirer de ce code (qui utilise un compteur et un tableau):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ ./count.ksh x y 
    1: x
    2: y
    argv[1] : x
    argv[2] : y
    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
    $ cat ./count.ksh
    #!/bin/ksh
    num_arg=0
    for arg ; do
        ((num_arg += 1))
        argv[${num_arg}]=${arg}
        echo "${num_arg}: ${arg}"
    done
     
    nb_arg=${num_arg}
    num_arg=1
    while [[ ${num_arg} -le ${nb_arg} ]] ; do
        echo "argv[${num_arg}] : ${argv[${num_arg}]}"
        ((num_arg += 1))
    done

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Il suffit de les compter!
    Et quoi de mieux, pour les compter, qu'un compteur!

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    posParam=1
    for valParam 
    do 
      if # condition sur $valParam        
      then
        echo "'${valParam}' à la position ${posParam} vérifie la condition"
      else
        echo "'${valParam}' à la position ${posParam} ne respecte pas la condition"
      fi
      (( posParam ++ ))
    done
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  10. #10
    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
    Citation Envoyé par Ladoll
    Mon objectif final est de récupérer deux valeurs pour chaque ligne d'un fichier texte. Chaque ligne est presque similaire et du type :
    les valeurs intéressantes sont "Valeur1" et "Valeur2" .
    Utilise la commande sed ! C'est sa raison d'être. Tu es en train de réinventer la roue.

    Exemple:initial.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Les valeurs importantes sont 1 et 2
    Les parents importants sont papa et maman
    Les outils textuels importants sont sed et awk
    J'arrête les exemples et fadaises
    Commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/.* \(.*\) et \(.*\)/\1 \2/g' initial.txt
    Résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1 2
    papa maman
    sed awk
    exemples fadaises

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/.* \(.*\) et \(.*\)/\1 \2/g' initial.txt
    +1

    Pour le plaisir, on va aussi offrir la solution awk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{for (i=2; i < NF; i++) if ($i == "et") printf("%s %s\n", $(i-1), $(i+1))}'
    Toutefois, je préciserai que awk étant bien plus lourd et gourmand que sed, c'est cette solution que je préfère
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut
    Avec du retard, mais un grand merci à tous pour vos conseils, débats, désaccords, et réprimandes : P

    Je met cette conversation en résolu.

    Encore merci !
    A la prochaine...

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

Discussions similaires

  1. Paramètres extrinsèques et position de la caméra
    Par Milmilmil dans le forum OpenCV
    Réponses: 3
    Dernier message: 06/03/2009, 11h37
  2. Réponses: 3
    Dernier message: 29/05/2008, 11h59
  3. Détection de la position du curseur SANS le paramêtre "
    Par FMaz dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/03/2006, 11h02
  4. Réponses: 2
    Dernier message: 17/05/2002, 20h37
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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