Comment renvoyer une data_table depuis une FUNCTION ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />scénario
Salut,
Je suis un utilisateur relativement nouveau du langage de script JMP/SAS, et habitué uniquement à d'autres langages "standard" comme C, VBA, PASCAL, etc... alors peut-être que ma question est évidente...
Je n'arrive pas à comprendre comment renvoyer proprement le résultat TABLE d'une fonction.
Si je n'utilise pas l'option DEFAULT LOCAL, bien sûr, la table revient si j'utilise le nom de la table dans la FONCTION, mais quand j'essaie de faire quelque chose comme
d_result= MaFonction(Entrée1,Entrée2;Entrée3); la variable d_result est "."
Je voudrais utiliser l'option {Default LOCAL} afin de programmer proprement et d'éviter les problèmes avec les variables LOCAL/GLOBAL, c'est pourquoi je voudrais afficher le tableau.
En général, je ne comprends pas comment spécifier les résultats renvoyés par une FONCTION.
J'ai essayé avec RETURN() dans les paramètres d'entrée, mais cela semble fonctionner uniquement avec un simple paramètre (numéro ou chaîne), pas une table (voir page 212 de la référence sur la syntaxe JSL) :
Fonction({arguments}, <{variables locales}>, )>, script)
Merci beaucoup pour votre aide !!!
Cordialement.
Alex
Re : Comment renvoyer une data_table depuis une FUNCTION ?Salut PMRoz,
merci beaucoup pour les explications claires.
J'aurais aimé que cela soit expliqué clairement quelque part dans les manuels 
Cordialement,
Alex
Re : Comment renvoyer une data_table depuis une FUNCTION ?La table reste ouverte.
La variable dt , qui est utilisé à l'intérieur de la fonction, est local et n'a plus de valeur.
Dans mon exemple, le programme appelant utilise la variable un_dt pour obtenir les résultats de la fonction.Donc la variable un_dt est visible par le programme appelant.
Lorsque vous fournissez un argument à tableau de données actuel [c'est à dire table de données actuelle (dt) ], il définit la table de données actuelle sur tout ce qui pointe vers dt , et renvoie ".".
Re : Comment renvoyer une data_table depuis une FUNCTION ?Bonjour
PMroz,
merci d'avoir répondu si vite !
C'est effectivement un peu particulier, mais on s'habitue... 
J'ai essayé entre-temps et quand j'ai fait un résumé (toutes les lignes), ou une fonction "transparente" similaire, cela fonctionne aussi.
J'ai eu une erreur lorsque j'avais à la dernière ligne :
table de données actuelle (dt);
Maintenant, je comprends qu'en réalité ce qui est renvoyé est la "sortie" de la table de données actuelle, qui est probablement ".", donc c'était probablement mon erreur. Est-ce correct?
Que se passe-t-il avec l'ouverture de fichiers dans des fonctions locales après le retour au programme principal ? Apparemment la table reste ouverte, même si elle est "locale" ?
BR,
Alex
Re : Comment renvoyer une data_table depuis une FUNCTION ?Les fonctions JMP n'utilisent pas d'instruction return.La dernière expression évaluée est plutôt celle renvoyée.Voici un exemple simple :
//------------------------------------------------ -------------------------------
/*
Nom de la fonction : get_table
Description : renvoie un identifiant de table tel que sélectionné par l'utilisateur
Arguments:
(aucun)
*/
get_table = Fonction ( {} ,
{ Local par défaut } ,
dt = ouvrir () ;
dt ;
) ;
// teste-le
un_dt = get_table () ;
Techniquement, la ligne de la fonction avec juste "dt;" est redondant.Je l'ai laissé à titre d'exemple.