Fermez toutes les tables de données sauf une liste de noms de variablesAujourd'hui, j'essaie de fermer toutes les tables de données, sauf un certain nombre, car une procédure répétitive est exécutée à l'aide des variables Data Table Name.J'ai trois tables.Celui où les résultats sont collectés, celui où les résultats non valides de la première table sont collectés et celui que l'utilisateur ouvre pour que le script sache quelles valeurs d'ID utiliser pour comparer.J'ai trouvé une discussion dans laquelle les tables peuvent être fermées (elle a été incluse dans mon script ici), mais elle utilise du texte cité dans une liste pour les noms de tables.Étant donné que mes utilisateurs choisiront une table de données différente pour chaque itération de la troisième table, comment puis-je utiliser une variable de nom de table de données pour l'inclure dans la liste et la laisser ouverte à la fin du traitement ?
DontClose = {CompareTable, CollectionTable, IDTable}; // Example names of tables you want to leave open
//CompareTable = "Validation Table"
//Collection Table = "Unmatched Values"
//IDTable = could be anything but I want to leave this open once the processing loop is completed
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i > 0, i--,
print( Data Table(i) << Get Name ) ;
If( Contains( DontClose, Data Table( i ) << get name ),
Continue(),
Close( Data Table( i ), "No Save" )
)
);Re : Fermer toutes les tables de données sauf une liste de noms de variablesCela pourrait fonctionner, mais c'est presque la génération d'une instruction Close() pour chaque table une fois son utilisation terminée. J'essayais d'utiliser quelque chose d'un peu plus élégant qui utilise moins de lignes. L'autre option similaire que j'ai essayée est de mettre tous les noms de tables dans une liste et d'avoir une liste de conservation à comparer, le problème est que l'une des trois tables qui doivent rester ouvertes est sélectionnée par l'utilisateur, donc change d'une utilisation à l'autre. C'est la seule raison pour laquelle j'utilise des noms de table d'alias. Cela et dès que je partage cela avec quelqu'un, il changera le nom de la table où réside le script, donc je préférerais ne pas coder en dur les noms de tables de données là où je n'en ai pas besoin. C'est tout un casse-tête ! Merci pour votre réponse!Re : Fermer toutes les tables de données sauf une liste de noms de variablesJe ne peux pas publier l'intégralité du script. Il accède à des serveurs propriétaires et il me faudrait beaucoup de temps pour créer une version anonyme. Mais vous m'avez fait penser que je n'en tenais pas compte et c'est pourquoi ça se bloque. Je vais tester ma théorie et je ferai un rapport !
MERCI!Re : Fermer toutes les tables de données sauf une liste de noms de variablesPuisque vous générez toutes les tables de données à détruire, pourquoi ne pas insérer chaque référence de table dans une liste au fur et à mesure de sa création ? Vous pouvez ensuite parcourir la liste lorsqu'il est temps de les fermer.
Re : Fermer toutes les tables de données sauf une liste de noms de variablesPouvez-vous poster votre script ?
La fermeture des tables ayant des tables récapitulatives liées fermera automatiquement la table récapitulative.
Re : Fermer toutes les tables de données sauf une liste de noms de variablesOh mon! J'ai parlé trop tôt. J'ai testé l'ouverture et la fermeture de tables à l'aide de ce script.
Mon script ouvre deux tables qu'il doit laisser ouvertes pour l'exécution complète du script. L'un est la cible des comparaisons qui ne sont pas égales et l'autre héberge une liste d'ID (qu'un utilisateur sélectionne). Ensuite, il extrait les données des serveurs, exécute une multitude de résumés, de transpositions et d'autres manipulations de données, copie les résultats dans la table où réside le script et les différences dans la table cible (les deux doivent rester ouvertes), puis ferme tout le résumé. tables et tables générées à partir des serveurs avant de passer à l'ID suivant.
Je reçois toujours une erreur comme celle-ci :
Impossible de localiser la table de données{28} lors de l'accès ou de l'évaluation de 'Data Table', Data Table/*###*/(i)
parce que le numéro de table est perdu ?Re : Fermer toutes les tables de données sauf une liste de noms de variables@Wendy_Murphrey C'est le billet !Fonctionne exactement comme j'en ai besoin.Puisque ce script peut ouvrir ou produire des centaines de tables, il répond parfaitement à mes besoins.
Merci merci merci!J'apprends quelque chose de nouveau chaque jour en JSL !
Re : Fermer toutes les tables de données sauf une liste de noms de variables@guillaumebugnon Je vois que TOUTES les tables auraient besoin de cet ensemble de variables.Le script que j'écris s'ouvre et génère une multitude de tableaux, ce qui ajouterait une étape qu'il me semble préférable de laisser à des fins moins intenses.Ce que je souhaite en fin de compte, c'est avoir une liste d'identifiants (peut-être plus de 200) et demander au script d'exécuter un processus pour produire au moins 75 résumés pour chaque identifiant.Bien que cela fonctionne, il semble que la solution de Wendy Murphrey soit parfaitement adaptée à mon application.
Merci d'avoir pris le temps de m'aider à résoudre mon dilemme !
Re : Fermer toutes les tables de données sauf une liste de noms de variablesVoici une approche qui vous permet d'utiliser les références de table de données :
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = Open( "$SAMPLE_DATA/Fitness.jmp" );
dt3 = Open( Pick File( "Select File", "$DOCUMENTS" ) );
dontClose = Eval List( {dt, dt2, dt3} );
Show( dontClose );
// 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 ) ),
Continue(),
Close( Data Table( i ), "No Save" )
)
);
J'espère que cela pourra aider!
Re : Fermer toutes les tables de données sauf une liste de noms de variablesBonjour,
Vous pouvez également définir une variable de table sur chaque datatable jmp :
dt << Set Table Variable("ToClose","N");Ensuite, vous pouvez boucler et vérifier la valeur :
For( i = N Table(), i > 0, i--,
vtoclose = Data Table(i) << Get Table Variable ("ToClose") ;
If ( Contains(vtoclose,"Y") >=1 ,
Close(Data Table(i),NoSave),
print("ToClose is not set to Y : do not close")
);
);