Comment puis-je forcer l’exécution séquentielle de mon script ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Mon script JSL actuel fonctionne parfaitement lorsque je le parcoure, mais une fois exécuté, il peut générer des erreurs.Je peux gérer cela un peu en mettant la fonction wait() mais cela ne fonctionne pas toujours.Existe-t-il une fonction simple que je peux appeler en haut de mon script pour qu'il s'exécute de manière séquentielle ?
Re : Comment puis-je forcer l'exécution séquentielle de mon script ?Eh bien, apparemment, ce n'est pas aussi rose que je l'espérais. Certains codes ne s'exécutent pas correctement dans cette commande onclose().Un 'dt << sort(...)' ne fonctionnait pas correctement dans le onclose() interne mais cela fonctionnait bien si je commentais le onclose() interne.
Re : Comment puis-je forcer l'exécution séquentielle de mon script ?Merci pour la réponse. J'ai essayé de configurer en tant que fonctions et il n'a toujours pas attendu la saisie de l'utilisateur.Pour les questions de recodage et d'ordre des valeurs, je les connais, mais j'aurais dû mettre davantage l'accent sur leur exécution (ou sur toute fonction native en fait) comme modal que j'espérais pouvoir exécuter de manière à terminer la fonction avant de passer à la ligne de code suivante.
Je vois ce que vous dites concernant l'utilisation de jsl pour recoder cela directement, mais j'espérais un mélange de jsl + interface utilisateur native pour exécuter un tas de tâches courantes qui sont toujours les mêmes (les scripts codés en dur conviennent) avec d'autres tâches dont les entrées/sorties changent et se prêtent donc à l'interface utilisateur native, comme le classement des valeurs et le recodage. j'ai trouvé Message de Craige datant de mars où il a posté quelque chose qui peut faire cela, mais c'est un peu restrictif en raison du nom de colonne -> nom de la fenêtre de fonction. Dans mon cas, j'aurai les noms de colonnes dans les chaînes en haut, donc ça me convient. Ici, il est modifié pour 2 niveaux d'interactivité. Testé sur la norme JMP13.
dt = Open( "$sample_data/big class.jmp" );
dt << Go To( :sex ) << Recode; // First interactivity, as a test, change "F" to "Female"
Window( "Recode" ) << onclose(
dt << Go To( :sex );
main menu("column info"); // second interactivity, as a test, change value ordering properties.
Window( "sex" ) << onclose(
dt:Sex[ dt << Get Rows Where( :Sex == "M" )] = "Male";
);
);Re : Comment puis-je forcer l'exécution séquentielle de mon script ?Lorsque je code un script assez complexe, j'utilise généralement la structure suivante pour mon code :
Main = Expr(
returna = A(passing variables);
returnb = B(passing variables);
);
A = Function({Passed variables},
processing code
);
B = Function({Passed variables},
processing code
);
// Enter the script by executing the Main section
Main;
Concernant vos questions sur les éléments Recode et Col Info, les réponses sont Non et Oui. Il n'existe pas de fonction directe pour exécuter l'élément Recode à partir de JMP interactif. En effet, il est plus facile de répliquer les fonctionnalités dans un JSL ouvert.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt:Sex[ dt << Get Rows Where( :Sex == "F" )] = "Female";
dt:Sex[ dt << Get Rows Where( :Sex == "M" )] = "Male";
// or
For Each Row(
If( :Sex == "F", :Sex = "Female",
:Sex = "Male"
);
En ce qui concerne les éléments de la boîte de dialogue Col Info, le formatage, les propriétés de colonne telles que l'ordre des valeurs, les limites des spécifications, etc. sont tous disponibles dans JSL pour être modifiés selon ce qu'ils doivent être modifiés.
Tout cela est couvert dans le guide de script
Aide==>Livres==>Guide de script
et/ou dans l'index des scripts
Aide==>Index des scripts
Re : Comment puis-je forcer l'exécution séquentielle de mon script ?
@txnelson a écrit:
La méthode que j'utilise consiste à diviser le script en composants fonctionnels, puis à faire en sorte que la section de contrôle du script parcoure le script et à appeler les composants lorsque j'en ai besoin.Je place généralement le code dans les sections EXPR().Le code placé dans EXPR() ne sera exécuté que lorsqu'il sera appelé par la section de contrôle.
Lorsque vous dites que vous appelez les composants lorsque vous en avez besoin, voulez-vous dire que vous appelez les expressions dans la section de contrôle et que vous les exécutez directement, ou devez-vous les appeler manuellement et individuellement pour que la fonction précédente se termine ? Dans le premier cas, comment la section de contrôle est-elle structurée pour qu’elle attende réellement ?
Existe-t-il un moyen d'appeler des fonctions natives telles que le recodage et les informations sur les colonnes (pour modifier l'ordre des valeurs) en tant que fenêtres/fonctions modales ?
Merci,
Mike
Re : Comment puis-je forcer l'exécution séquentielle de mon script ?Il est recommandé de transmettre à la table de données un message indiquant la plate-forme à exécuter, plutôt que d'avoir à savoir quelle table est la table actuellement active.Alors plutôt que :
dt = Table de données( "table de données xxx" ) ;
dt << Effacer la sélection ;
dt<
Bivarié(X(.......
dt = Table de données( "table de données xxx" ) ;
dt << Bivarié(X(.........
garantit que la plate-forme bivariée fonctionnera sur la table de données référencée par "dt"
Re : Comment puis-je forcer l'exécution séquentielle de mon script ?J'ai eu plusieurs erreurs lors de l'exécution automatique des scripts, mais lorsque je les ai testés manuellement, tout allait bien.
pour ce type d'erreurs, cela m'arrive généralement lorsque j'essaie de faire un tracé basé sur une mauvaise table
maintenant j'ajoute ces lignes avant de faire des tracés/graphiques dans des scripts
dt = Table de données( "table de données xxx" ) ;
dt << Effacer la sélection ;
dt<Re : Comment puis-je forcer l'exécution séquentielle de mon script ?
Je suis désolé d'apprendre que vous rencontrez des problèmes ici.
Notre objectif est que vous n'ayez jamais besoin d'un Attendez() afin de faire exécuter votre script. Nous savons qu'il y a des moments où les différents éléments de l'interface utilisateur (fenêtres, plates-formes, etc.) ont besoin d'un moment pour s'instancier complètement avant de pouvoir répondre de manière appropriée au reste de votre JSL. Cependant, nous souhaitons résoudre ces situations en interne afin que vous n'ayez pas à vous en soucier dans votre JSL.
Ainsi, lorsque vous rencontrez des situations résolues en ajoutant un Attendez() dans votre code, veuillez les soumettre à Support technique , afin que nous puissions les suivre et les résoudre.
Merci!
-Jeff
Re : Comment puis-je forcer l'exécution séquentielle de mon script ?je mets attendre(0); instructions entre les sections de code que je souhaite exécuter séquentiellement.
Re : Comment puis-je forcer l'exécution séquentielle de mon script ?La méthode que j'utilise consiste à diviser le script en composants fonctionnels, puis à faire en sorte que la section de contrôle du script parcoure le script et à appeler les composants lorsque j'en ai besoin.Je place généralement le code dans les sections EXPR().Le code placé dans EXPR() ne sera exécuté que lorsqu'il sera appelé par la section de contrôle.