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 :

Eliminer les caractères 0


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 083
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 083
    Par défaut Eliminer les caractères 0
    Bonjour,

    Voici le script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    supprimer_les_zeros_du_debut () # Supprime les zéros éventuels au début
    {                     # à partir des arguments donnés.
      x=${1#0}
      return ${1#0}       # Le "1 correspond à "$1", argument donné.
                          # Le "0" correspond à ce qui doit être supprimé de "$1".
     
     
    }
    supprimer_les_zeros_du_debut 0012
    echo "return:$?"
    echo x:$x
    Le résultat de return et la valeur de x ne sont pas les mêmes à la sortie de fonction:

    Une explication?

    D'avance merci.

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

    Return retourne un entier et ensuite le shell le transcode en chaine de caractère au besoin (ici pour echo) tandis que la valeur de x est une chaine de caractère et non pas un entier.

  3. #3
    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

    Il ne faut pas confondre :
    • la sortie standard (canal 1)
    • la sortie d'erreur (canal 2)
    • la valeur de retour de la fonction (0: tout est bon; 1 ou +: erreur)


    Ici, ton return 12 veut dire que le code s'est arrêté avec l'erreur code 12 ... est-ce vraiment ce que tu veux ?
    Si tu veux juste un résultat, écris sur la sortie :
    Le code de sortie sera 0 (tout a fonctionné) et le résultat sera "012"

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 083
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 083
    Par défaut
    Bonjour,
    Merci pour vos réponses.
    Je fais un programme avec une fonction à l’intérieure qui traite une chaine de caractère (enlève les zéros):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    supprimer_les_zeros_du_debut () # Supprime les zéros éventuels au début
    {                     # à partir des arguments donnés.
      ....${1#0}
      .....
    ......
     
    }
    supprimer_les_zeros_du_debut 0012
    ....
    ....
    Comment je récupère le résultat ?
    D'avance merci.

  5. #5
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Par défaut
    Peut être comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    i=00000012
    maSuperFonction( )
    {
            echo ${1#0}
    }
    i=$(maSuperFonction $i)
    echo $i

  6. #6
    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
    À noter:
    • Les fonctions ont une sortie standard.
    • Les boucles for ont une sortie standard.
    • Les boucles while ont une sortie standard.
    • etc


    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ for ((i=1;i<10;i++));do echo "Voici le nombre $i"; done | while read mot1 mot2 mot3 nombre reste;do echo $nombre; done
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Il n'y aucun "Voici" dans la console !

    .

    Comment je récupère le résultat ?
    • Soit tu ne fais rien. Les fonctions ne sont pas des espaces protégés.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      $ toto=0
      $ mafonction() { toto=7; }
      $ mafonction
      $ echo $toto
      7
    • Soit tu l'écris sur la sortie standard de la fonction et tu utilises une substitution de commande $( )
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      $ toto=0
      $ mafonction() { echo 7; }
      $ mafonction
      7
      $ toto=$(mafonction)
      $ echo $toto
      7
    • Soit tu l'écris sur la sortie standard de la fonction et tu reprends cette sortie dans une conduite.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      $ mafonction() { echo -e "16548\n2684687\n3dfgf7\nfini !"; }
      $ mafonction
      16548
      2684687
      3dfgf7
      fini !
      $ mafonction | grep --color 7
      2684687
      3dfgf7
    • Soit tu l'écris sur la sortie standard de la fonction et tu rediriges vers un fichier pour stockage.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      $ toto=0
      $ mafonction() { echo 7; }
      $ mafonction
      7
      $ mafonction > monfichier.txt
      $ cat monfichier.txt
      7
    • Soit tu l'écris sur la sortie standard de la fonction et tu utilises une substitution de processus <( )
      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
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      $ echo -e "1\n1\n1\n1\n2\n2\n2\n3\n4\n5\n5\n6\n7"
      1
      1
      1
      1
      2
      2
      2
      3
      4
      5
      5
      6
      7
      $ echo -e "1\n2\n2\n3\n3\n4\n4\n4\n5\n6\n7\n8\n9"
      1
      2
      2
      3
      3
      4
      4
      4
      5
      6
      7
      8
      9
      $ comm <(echo -e "1\n1\n1\n1\n2\n2\n2\n3\n4\n5\n5\n6\n7") <(echo -e "1\n2\n2\n3\n3\n4\n4\n4\n5\n6\n7\n8\n9")
                      1
      1
      1
      1
                      2
                      2
      2
                      3
              3
                      4
              4
              4
                      5
      5
                      6
                      7
              8
              9
      Pour plus d'infos sur cette comparaison de fichiers:

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

Discussions similaires

  1. [AC-2007] Eliminer les caractères parasites dans une colonne NOM_Prénom
    Par ARFAOUI1953 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/04/2013, 19h33
  2. Eliminer les espaces d'une chaine de caractère
    Par Dine_Med dans le forum Langage
    Réponses: 3
    Dernier message: 14/10/2010, 13h12
  3. eliminer les espaces d'une chaine de caractères
    Par wassim_kh dans le forum Langage
    Réponses: 1
    Dernier message: 14/07/2006, 11h20
  4. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23
  5. [PostgreSQL] Les caractères accentués ?
    Par yacomor dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/02/2003, 16h30

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