Comment nommer CORRECTEMENT une table ?Tous,
Je sais comment donner un nom à une table. Mais parfois, si ce nom existe déjà (par hasard ou depuis la gauche après les exécutions précédentes du script), le nom au lieu de définir "Ma table" serait "Ma table 2". Comment puis-je le régler correctement exactement sur ce que je souhaite ?
Je recherche un extrait de code qui fait cela - vérifie si la table portant ce nom existe, si oui, ferme ou renomme l'ancienne, puis nomme celle-ci avec le nom exact que j'ai demandé.
J'ai essayé la fonction Try() mais je ne comprends probablement pas entièrement comment cela fonctionne. J'ai essayé des instructions if() complexes qui obtiennent la liste de toutes les tables et parcourent les noms, etc. C'est trop long et sur un grand nombre de tables, cela ralentit considérablement.
Alors, je me demandais quelle est la manière CORRECTE et conventionnelle de nommer une table afin que vous soyez sûr que la table est nommée exactement comme ça ?
Re : Comment nommer CORRECTEMENT une table ?Le seul problème que je vois avec cette approche est que... eh bien, en gros, vous essayez de rendre Set Name plus sûr à utiliser en écrivant une nouvelle fonction à la place. Mais dans cette fonction, vous utilisez à nouveau Set Name, ce qui est sujet aux mêmes problèmes que vous essayez de résoudre...
Mais cela ne devrait pas avoir d'importance pour votre table immédiate et donc pour le script lui-même, donc tout va bien ici.
À ce stade, je fermerais probablement les anciennes tables sans les sauvegarder.Re : Comment nommer CORRECTEMENT une table ?Oui, c'est comme ça que j'ai essayé de l'aborder. Je ne comprends probablement pas complètement comment fonctionne Try(). Laissez-moi essayer votre chemin.Re : Comment nommer CORRECTEMENT une table ?Comme je l'ai mentionné, j'aimerais éviter de tirer la liste de toutes les tables ouvertes. La production de centaines de tableaux récapitulatifs en une seule exécution de script prend beaucoup de temps.Re : Comment nommer CORRECTEMENT une table ?Je suis sûr que les différents membres de la communauté peuvent avoir différentes manières d'aborder ce problème.En voici une qui semble être une approche assez simple.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
xt = dt << subset( selected rows( 0 ), selected columns( 0 ) );
setName = Function( {tdt, Name},
{tdt, Name},
Try( Data Table( Name ) << set name( Name || "_Old" ) );
tdt << set name( name );
);
setName( xt, "big class" );Re : Comment nommer CORRECTEMENT une table ?Je ne connais pas de méthode conventionnelle (autre que d'éviter les noms déjà utilisés). Je conviens qu'il peut être difficile, après une disponibilité prolongée, de suivre toutes les fenêtres ouvertes.
Voici une idée JSL pour faire ce que vous décrivez (testée dans JMP 14). Cela semble être assez efficace. Pour être toujours disponible globalement, la fonction peut être ajoutée en tant que fonction personnalisée () par un script de démarrage qui s'exécute automatiquement à chaque lancement de JMP.
// Function for renaming data table if desired name is used by another open table
rename_if_exists = Function({s},
open_tables = Get Window List(Type("data tables")) << Get Window Title();
exists = Loc(open_tables, s)[1];
If(exists,
Data Table(open_tables[exists]) << set name(open_tables[exists] || "_old")
);
s;
);
// Apply...
dt = New Table(rename_if_exists("untitled 28972"), add rows(10));