fermer toutes les tables de données mais en laisser une ouverte pour une analyse plus approfondieSalut tout le monde
C'est la suite du post :
https://community.jmp.com/t5/Discussions/JSL-How-to-close-data-tables-after-analysis/mp/36739
Cependant, j'ai rencontré une erreur sur mon script lors de l'exécution de JSL Debgger.
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 0, i--,
If( Contains( DontClose, Data Table( i ) << get name ),
Continue(),
Close( Data Table( i ), "No Save" )
)
);Le script fonctionne correctement car ferme toutes les tables sauf dt4 mais j'obtiens une erreur comme indiqué sur le fichier joint sous l'instruction If. Est-ce que quelqu'un a une idée de ce à quoi cela fait référence?
Le script s'exécute correctement et ferme toutes les tables sauf dt4, cependant, j'ai des problèmes lors de l'extension du script après ce point. J'ai un script de création de graphes à lancer après ce point pour la table dt4 mais il ne fait rien. DONC, je me demande si cette erreur ici arrête le script pour passer aux étapes suivantes.
Re : fermer tous les tableaux de données mais en laisser un ouvert pour une analyse plus approfondiec'est parce que tu es >= 0.Il n'y a pas de table de données 0
faites-le >= 1 ou >0
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 1, i--,
If( Contains( DontClose, Data Table( i ) << get name ),
Continue(),
Close( Data Table( i ), "No Save" )
)
);Re : fermer toutes les tables de données mais en laisser une ouverte pour une analyse plus approfondieMerci pour le conseil. J'ai changé l'approche et maintenant je ferme les tables de données plus tôt sur le script. Le script est en fait plus rapide maintenant. Merci
Re : fermer tous les tableaux de données mais en laisser un ouvert pour une analyse plus approfondiePhil, je pensais la même chose.Il est important de noter que les noms de table ne peuvent pas être des doublons, donc si vous essayez de créer un nouveau nom de table "dt4" et qu'il existe déjà une table "dt4", JMP la nommera "dt4 2".Les noms de table ne correspondent probablement pas à ce que vous attendez, ce qui est une autre raison pour laquelle je pense que le code ci-dessus est un mauvais moyen de résoudre le problème actuel.
Je viens de regarder le post en lien dans le post d'origine.Le code d'Uday est beaucoup plus prêt pour la production.Malheureusement, l'OP utilise la simplification de txnelson, qui n'est qu'une simplification et c'est là qu'il a tous ses problèmes.
Re : fermer tous les tableaux de données mais en laisser un ouvert pour une analyse plus approfondieEst-ce que "dt4" est le nom réel de votre table ?Il semble plus probable que ce soit le nom de la variable que vous avez défini pour la table dans votre script ? Je pense que votre script recherche le nom de la table, c'est-à-dire ce que vous voyez en haut de la table JMP, par exemple "Big Class":
Voici un exemple simple (tiré de l'index de script) de la fonction Get Name() utilisée dans votre script :
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Name();
Show( n );
BTW, je peux me tromper sur le fait que cela soit la cause de votre problème !
Re : fermer tous les tableaux de données mais en laisser un ouvert pour une analyse plus approfondieVos tables pourraient être des tables liées. Voir l'exemple ci-dessous.C'est ou il y a une erreur avec votre script et votre référencement de la mauvaise table par accident.C'est probablement parce que vous recherchez des tables par nom.
Names Default To Here( 1 );
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = dt1 << Summary(
Group( :height ),
Freq( "None" ),
Weight( "None" )
);
close(dt1, "nosave"); //closes both dt1 and dt2 since dt2 is dependant on dt1
Quoi qu'il en soit, le code ci-dessus est une mauvaise façon de gérer la fermeture des tables.Tout d'abord, vous fermerez des tables non liées à votre script, ce qui pourrait rendre les utilisateurs fous que vous ayez fermé les autres éléments sur lesquels ils travaillaient.Deuxièmement, laisser les tables dont vous n'avez pas besoin jusqu'à la fin pour les fermer est une utilisation inefficace de la mémoire.Il serait préférable de fermer les tables juste après utilisation au lieu d'attendre la fin du script.Si les tables sont nécessaires pour l'ensemble du script, je vous recommande de garder une trace des tables dans une liste afin de ne fermer que celles liées à votre script.
Re : fermer tous les tableaux de données mais en laisser un ouvert pour une analyse plus approfondieSalut Uday,
J'ai changé cela mais j'obtiens toujours la même erreur sous JSL Debugger.
Re : fermer tous les tableaux de données mais en laisser un ouvert pour une analyse plus approfondie@ivomdb ,
L'erreur qui s'affiche se produit généralement si vous faites référence à une table de données dont JMP ne connaît pas l'existence ou qui n'a aucune référence pour accéder à la table. Cela se produit principalement lorsque la référence de la table de données est perdue ou a été fermée avant d'être référencée.
Une façon de résoudre ce problème est de procéder comme suit.
Vous devriez également essayer de vous assurer que la table n'est pas fermée prématurément.
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 0, i--,
Current Data Table(Data Table(i)); // This should make the data table you are working with active and current
If( Contains( DontClose, Data Table( i ) << get name ),
Continue();
,
// else
Close( Data Table( i ), "No Save" );
)
);<BR />