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

Unix Discussion :

Problème retour function


Sujet :

Unix

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Points : 14
    Points
    14
    Par défaut Problème retour function
    Bonjour !

    J'ai encore un problème de débutant

    J'utilises CyGwin et mon problème est el suivant :
    j'ai une fonction que j'appelles et étrangement je ne réussis jamais à récupérer la valeur retournée.
    Pour tester j'ai rendu la fonction super simple au strict minimum :

    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    getVariable()
    {		
    	resultat=4 
    	echo "####### new fonction : Valeur de retour de la fonction !!"
    	echo $resultat
    	return $resultat
    }
     
    ...
    ...
    getVariable $pays $departement
    echo '############ julio affichage valeur retour'
    echo $?
    Et bizarrement ça m'affiche la valeur 0.

    C'est bizarre , j'ai regardé des tutoriaux et ça me semblait aussi simple que ça ?

    Si jamais quelqu'un a un élément de réponse ,je sui preneur

  2. #2
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Ce n'est pas bizarre, c'est juste que tu affiches la valeur de retour de la commande "echo ####..." et pas celle de la commande getVariable.
    ɹǝsn *sıɹɐlos*

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Points : 14
    Points
    14
    Par défaut
    Merci pour la réponse , je n'ai jamais utilisé getVariable , je vais me renseigner dessus.

    Sinon pour plus de précisions , mon script est en gros le 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    ######## Declaration fonctions ############
    ...
    env = ""
    ...
    ...
    lectureEnv()
    {	
      # creation des instruction SQL
      echo "select env  from table_env where env.libelle=upper('$1') ;"  
      >>sql/REQ.sql
      echo "exit;" >> sql/REQ.sql
      valeurRetour=`sqlplus -s $user/$pwd@$host @sql/REQ.sql` >>  
      log/REQ_LOG.log
      env=`echo $valeurRetour | cut -c19-`
    }
     
     
    Fonction2(){
     echo "############ valeur paramètre 5 : "
     echo $5
    }
     
     
    ....
    ....
    ######### Debut traitements ########### 
     
    lectureEnv $paramRecherche
    echo '############ valeur de retour :'
    echo env
    ...
    Fonction2 $param1 $param2 $param3 $param4  $env
    ...
    -Mon problème est que la valeur récupérée lors de l'appel à la première fonction
    qui appelle une procédure SQL : me renvoie ce qu'il y a dans la table
    avec en plus de tirets par exmple : '12---'
    Si quelqu'un a une explication par hazard ?
    je fais un cut dessus.
    Donc je récupères bien 12 au final.

    - Par contre quand je passe ce paramètre à la deuxième fonction
    celle ci m'affiche que le 5° paramètre je lui ai passé est '---' et non 12 ???


    Si quelqu'un peut m'éclairer ?

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Je pense que tu devrais te pencher plus précisément sur certains points qui vont te permettre de mieux comprendre.

    J'ai ajouté des commentaire à ton script pour que tu comprrens mieux ce qu'il fait. A toi de regarder les man là où je l'ai indiqué.

    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
    ######## Declaration fonctions ############
    ...
    env = ""
    ...
    ...
    lectureEnv()
    {	
      # creation des instruction SQL
    ##GS## Tu ajoutes dans le fichier sql/REQ.sql la requête à exécuter. D'ailleurs, que se passe-t-il si j'appelle deux fois de suite cette fonction ? Est-ce que la requête se retrouve deux fois dans le fichier ? Est-ce ceu qui est voulu ?
      echo "select env  from table_env where env.libelle=upper('$1') ;"  
      >>sql/REQ.sql
    
    ##GS## On ajoute exit pour préciser que la requete est finie.
      echo "exit;" >> sql/REQ.sql
    
    ##GS## On appelle sqlplus avec le fichier que l'on vient de construire, et on redirige la sortie dans un fichier.
      valeurRetour=`sqlplus -s $user/$pwd@$host @sql/REQ.sql` >>  
      log/REQ_LOG.log
    
    ##GS##A toi de te renseigner sur ce que fait cut -c19, et de voir quelle sera la valeur de env en fonction de ce que retourne la requete SQL.
      env=`echo $valeurRetour | cut -c19-`
    }
    
    
    Fonction2(){
    ##GS## Affichage du paramètre n° 5
     echo "############ valeur paramètre 5 : "
     echo $5
    }
    
    
    ....
    ....
    ######### Debut traitements ########### 
    
    lectureEnv $paramRecherche
    echo '############ valeur de retour :'
    echo env
    ...
    ##GS## Si tu veux juste afficher env, pourquoi ne pas faire une focntion3 qui affiche le contenu du paramètre passé en argument ?
    Fonction2 $param1 $param2 $param3 $param4  $env
    ...
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Points : 14
    Points
    14
    Par défaut
    Merci ganSoleil pour les précisions

    Je crois avoir réussi , car en fait le problème était au niveau du résultat lu que je passais en paramètres de fonctions en fonctions.

    C'était que le résultat stocké dans la variables contenait des caractères non visibles bizarres (espaces ou autres ?? )
    et chaque fois je passais cette variable ne paramètres ça répondait bizarrement et me renvoyait des caractères bizarre.

    Pour le résoudre j'ai mis un algo qui ne me renvoie que les caractères je veux garder et qui les stocke dnas une variable de retour.

  6. #6
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Citation Envoyé par comboDev Voir le message
    Merci pour la réponse , je n'ai jamais utilisé getVariable , je vais me renseigner dessus.
    Visiblement, tu n'a pas compris ma réponse, getVariable n'a rien à voir la dedans. Si tu veux afficher le résultat d'une commande ou d'une fonction, il faut utiliser la variable $? juste après l'appel et donc ne pas faire un "echo xxx" ou toute autre commande entre les deux. La variable $? est transitoire. Elle est reinitialisée à chaque nouvelle commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    f()
    {
            return 2
    }
    f
    echo $? ## <- affiche bien 2, le code retour de l'appel à "f".
    echo $? ## <- affiche 0, le code retour de la commande de la ligne précédente.
    ɹǝsn *sıɹɐlos*

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

Discussions similaires

  1. Réponses: 22
    Dernier message: 06/04/2006, 14h45
  2. Problème retour à la ligne dans formulaire
    Par Mysti¢ dans le forum Langage
    Réponses: 1
    Dernier message: 03/04/2006, 13h34
  3. Problème retour chariot dans un fichier texte
    Par Redondo dans le forum Windows
    Réponses: 2
    Dernier message: 08/02/2006, 18h23
  4. [phpBB] Function avec le Template phpBB
    Par mangafan dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 27/09/2005, 16h32
  5. Nouvelle installation MySql4.0.2d - Problème retour chariot
    Par pit_bulle dans le forum Installation
    Réponses: 2
    Dernier message: 30/09/2004, 16h07

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