Perte de gestion de la fenêtre du générateur de graphiqueJ'utilise le script baseball.jmp pour illustrer un problème que je vois dans mon propre script. Ce qui suit fonctionne comme prévu. Une seule fenêtre de générateur de graphique est créée et se ferme au bout de deux secondes.
Clear Globals();
Names Default To Here( 1 );
dt = Open( "C:\Program Files\SAS\JMP\14\Samples\Data\Baseball.jmp" );
current data table(dt);
myGraph = Graph Builder(
Size( 531, 448 ),
Show Control Panel( 0 ),
Variables( X( :Player ), Y( :Batting ) ),
Elements( Points( X, Y, Legend( 2 ) ) ),
);
myRep = myGraph << report;
wait(2);
myGraph << close window;
Cependant, j'essaie de créer une expression de générateur de graphes dans une fonction pour la rendre plus flexible. Ainsi, dans l'exemple suivant, considérez myExpr comme l'expression construite. Notez que les délais de 2 secondes sont suffisants pour que je puisse déterminer quand les fenêtres sont créées.
Clear Globals();
Names Default To Here( 1 );
dt = Open( "C:\Program Files\SAS\JMP\14\Samples\Data\Baseball.jmp" );
current data table(dt);
myExpr = expr(Graph Builder(
Size( 531, 448 ),
Show Control Panel( 0 ),
Variables( X( :Player ), Y( :Batting ) ),
Elements( Points( X, Y, Legend( 2 ) ) ),
));
myExpr1 = expr(myGraph = eval expr(myExpr));
eval(myExpr1);
wait(2);
myRep = myGraph << report;
wait(2);
myGraph << close window;
Ce qui suit ne me semble pas avoir de sens:
- Une deuxième fenêtre de générateur de graphique identique s’ouvre lorsque la couche de rapport est créée.
- Le descripteur myGraph qui fonctionnait lors de la création de la couche de rapport ne fonctionne pas lors de l'exécution de myGraph << fermer la fenêtre. Cela laisse deux fenêtres de construction de graphes ouvertes.
Je suis en mesure de fermer la seconde fenêtre inattendue avec myRep << fermer la fenêtre, mais je ne parviens pas à fermer la fenêtre myGraph. Je suis capable de manipuler la couche de rapport comme d'habitude.
Donc mes questions sont:
- Pourquoi une deuxième fenêtre de création de graphique est-elle créée?
- Pourquoi est-ce que je perds le pseudonyme myGraph?
Merci,
Facture
Re: Perte de descripteur dans la fenêtre du générateur de graphiquesVos deux questions sont mieux répondues dans l'ordre inverse:
- Pourquoi une deuxième fenêtre de création de graphique est-elle créée?
- Pourquoi est-ce que je perds le pseudonyme myGraph?
2 Si vous regardez quelle est la valeur de myGraph après
eval(myExpr1);
vous verrez que la variable n'est pas définie pour pointer sur l'objet Générateur de graphes, mais plutôt simplement définie comme le JSL requis pour exécuter le Générateur de graphes
Graph Builder(Size(531, 448), Show Control Panel(0), Variables(X(:Player), Y(:Batting)), Elements(Points(X, Y, Legend(2))));
Ce que vous devez faire est de le déplacer vers l'expression myExpr. Ensuite, il pointe vers l’objet Générateur de graphes comme vous le souhaitez.
1. La raison pour laquelle vous obtenez deux fenêtres affichées, est que lorsque vous spécifiez
eval(myExpr1);
il exécute la valeur de myGraph, qui est une ligne de JSL qui crée une fenêtre avec la sortie, puis à nouveau, lorsque la variable myGraph est analysée
myRep = myGraph << report;
il exécutera à nouveau la JSL à partir de la variable myGraph
Ci-dessous ma retouche de votre code pour faire ce que je crois que vous voulez faire
Clear Globals();
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Baseball.jmp" );
current data table(dt);
myExpr = expr(myGraph = Graph Builder(
Size( 531, 448 ),
Show Control Panel( 0 ),
Variables( X( :Player ), Y( :Batting ) ),
Elements( Points( X, Y, Legend( 2 ) ) ),
));
myExpr1 = expr(eval expr(myExpr));
eval(myExpr1);
wait(2);
myRep = myGraph << report;
wait(2);
myGraph << close window;
Re: Perte de descripteur dans la fenêtre du générateur de graphiquesSalut Jim,
Merci pour l'explication. Juste au moment où je pensais commencer à comprendre les expressions JSL ...
Quoi qu'il en soit, la construction de l'expression: expr (constructeur de graphes (insérer mes éléments ici)) est plus facile que de construire l'expession: expr (myGraph = constructeur de graphes (insérer mes éléments ici))
C'est pourquoi j'ai choisi cette approche.
Merci encore,
Facture