Comment puis-je ajouter automatiquement toutes les colonnes au sélecteur de colonnes dans .jslJe suis vraiment un débutant avec JSL, j'apprends encore --
J'ai de nombreux fichiers que je dois examiner avec Graph Builder, et chacun a un nombre différent de colonnes. La seule constante est que je sais que je veux la colonne 1 comme superposition, la colonne 2 dans l'axe X, la colonne 3 dans l'axe Y et tout le reste des colonnes dans le sélecteur de colonne. J'aimerais avoir un script qui ouvrirait toutes les fenêtres de Graph Builder pour toutes les tables de données actuellement ouvertes avec ces paramètres, mais je ne sais pas comment faire. C'est le plus proche que j'ai obtenu:
Graph Builder(
Size( 1900, 1200 ),
Variables(
X( :Column(2) ),
Y( :Column(3) ),
Overlay( :Column(1) )
),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) ),
Column Switcher( :Column(3) ),
SendToReport(
Dispatch(
{},
"",
ScaleBox
)
)
);
Les deux choses pour lesquelles j'ai besoin d'aide : (1) comprendre comment configurer le sélecteur de colonnes pour qu'il charge automatiquement toutes les colonnes de la table de données sans me le demander, et (2) envelopper ce script dans une boucle qui itère sur tous les éléments ouverts tableaux de données.
Merci d'avance!
Personnalisation de masseRe : Comment ajouter automatiquement toutes les colonnes au sélecteur de colonnes dans .jslMerci à ceux qui m'ont aidé ici, j'ai l'impression que je n'ai pas ajouté grand-chose de moi-même ici. C'est essentiellement ce que j'ai fini avec:
L'objectif était d'avoir un script qui parcourrait un dossier plein de fichiers texte un par un, le chargerait et afficherait une fenêtre Graph Builder avec certains paramètres prédéfinis, puis lorsque Graph Builder est fermé, il ouvre automatiquement le le prochain.
L'approche que j'ai utilisée était de le gérer avec des variables globales : "regFlist" est la liste des fichiers restant à ouvrir, et "stopReg" est un drapeau qui, lorsqu'il est activé, interrompt le processus.
Il existe deux scripts : (1) reg_Next.jsl -- vérifie regFlist, et s'il est vide, il demande un dossier à utiliser ; sinon, il charge le fichier suivant de la liste regFlist (si regStop n'est pas défini), (2) reg_Stop.jsl -- vide simplement regFlist et définit la variable regStop ; utilisé pour arrêter le processus plus tôt.
Je suis un débutant total avec .jsl, donc je suis très ouvert à tout commentaire/critique constructif.
reg_Next.jsl
//!<BR /><BR />// use global variables (since hey, what could go wrong? ;)</img> )
Names Default To Here( 0 );
// get path to self
selfPath = get default directory() || "/reg_Next.jsl";
// check to see if user has requested a stop
If( stopReg == 1 ,
stopReg = 0;
regFlist = {};
Stop();
);
// initialize list of files to review if there aren't any in the list
If( Is Empty( regFlist ) | N Items( regFlist ) < 1,
jmpDir = Pick Directory( "Select the jmp directory." );
regFlist = Files In Directory( jmpDir );
);
// open data table and remove it from the regFlist
dt = Open( jmpDir || "/" || regFlist[1] );
regFlist = Remove( regFlist, 1 );
// set up for column switcher
colList = dt << get column names( string );
col1 = colList[1];
col2 = colList[2];
col3 = colList[3];
Remove From( colList, 1, 2 );
// open graph builder
gb = dt << Graph Builder(
size( 800, 600 ),
Variables( X( As Column( col2 ) ), Y( As Column( col3 ) ), Overlay( As Column( col1 ) ) ),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) )
);
cs = gb << Column Switcher( col3, colList );
// set up mechanism to re-run myself when graph builder is closed
If( N Items( regFlist ) == 0,
gb << on close( Close( dt, nosave ) ),
gb << on close(
Close( dt, nosave );
Open( selfPath, Run JSL( 1 ) );
)
);reg_Stop.jsl
//!
Names Default To Here( 0 );
regFlist = {};
stopReg = 1;Re : Comment ajouter automatiquement toutes les colonnes au sélecteur de colonnes dans .jsl@BHarris Ce serait bien si vous pouviez ajouter votre solution à cette discussion, afin qu'elle soit disponible pour l'ensemble de la communauté de discussion.
Re : Comment ajouter automatiquement toutes les colonnes au sélecteur de colonnes dans .jslJe l'ai compris. J'aimerais vraiment que JMP ait un terminal parfois...
Si quelqu'un d'autre se retrouve ici à la recherche de cette même solution, veuillez répondre et je partagerai ce avec quoi j'ai fini.
Re : Comment ajouter automatiquement toutes les colonnes au sélecteur de colonnes dans .jsl@txnelson - Je viens de passer environ 3 heures avec l'index de script et le guide de script à essayer de faire fonctionner cela, mais je n'ai pas compris comment faire en sorte que la fonction "on close()" ouvre le fichier suivant. Voici ce que je pensais * devrait * fonctionner, mais ce n'est pas le cas.
(Rappel, le but est de parcourir ces fichiers un par un, en ouvrant une fenêtre Graph Builder et en me laissant évaluer le fichier, puis lorsque je ferme la fenêtre Graph Builder, il devrait fermer la table de données et ouvrir le fichier suivant et tracez-le.)
Ce script s'appelle "jmp_reg_4.jsl" et se trouve sur mon bureau :
Names Default To Here( 0 ); // <-- trying to use globals so the file list will be maintained between invocations
/*
All of what you suggest is doable in JMP.
You can use "Files in Directory()" to get the file list, and then loop through them.
You can attach an "On Close()" function to the Graph Builder object, which will close the current data table, and then go get the next file from your list of files from the "Files in Directory()" list.
Examples and description are in the Scripting Index
Help==>Scripting Index
*/
If( Not( As Global( "flist" ) ),
jmpDir = Pick Directory( "Select the jmp directory." );
flist = Files In Directory( jmpDir );
);
dt = Open( jmpDir || "/" || flist[1] );
Remove( flist, 1 );
colList = dt << get column names( string );
col1 = colList[1];
col2 = colList[2];
col3 = colList[3];
Remove From( colList, 1, 2 );
gb = dt << Graph Builder(
size( 800, 600 ),
Variables( X( As Column( col2 ) ), Y( As Column( col3 ) ), Overlay( As Column( col1 ) ) ),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) )
);
cs = gb << Column Switcher( col3, colList );
gb << on close(
Close( dt, nosave );
run script( "/Users/bh/Desktop/jmp_reg_4.jsl" );
);Je pensais créer une liste globale de fichiers à examiner, puis à chaque invocation, si j'ai encore des éléments dans la variable "flist" (liste de fichiers), nous saisissons simplement le suivant, le chargeons et le traçons. Mais cela ne fonctionne pas comme prévu : lorsque je ferme la fenêtre du générateur de graphes, il ferme correctement la table de données, mais ne fait rien d'autre.
Re : Comment ajouter automatiquement toutes les colonnes au sélecteur de colonnes dans .jslJe ne trouve pas non plus de moyen, mais quelques pressions sur la touche de tabulation déplaceront le focus vers la liste des colonnes dans le sélecteur de colonnes.

Re : Comment ajouter automatiquement toutes les colonnes au sélecteur de colonnes dans .jslJe ne connais pas le moyen de faire la deuxième demande.Re : Comment ajouter automatiquement toutes les colonnes au sélecteur de colonnes dans .jslMerci!
Que diriez-vous de # 2 dans ma liste? (Je pense que je peux comprendre #3...)Re : Comment ajouter automatiquement toutes les colonnes au sélecteur de colonnes dans .jslTout ce que vous suggérez est faisable dans JMP.
Vous pouvez utiliser "Fichiers dans le répertoire ()" pour obtenir la liste des fichiers, puis les parcourir en boucle.
Vous pouvez attacher une fonction "On Close()" à l'objet Graph Builder, qui fermera la table de données actuelle, puis aller chercher le fichier suivant dans votre liste de fichiers à partir de la liste "Files in Directory()".
Les exemples et la description se trouvent dans l'index de script
Aide==>Index des scripts
Re : Comment ajouter automatiquement toutes les colonnes au sélecteur de colonnes dans .jslImpressionnant! J'ai continué à essayer d'utiliser "Column Switcher( :Column(3), :Column(all) )" et des variantes de cela
L'une de ces améliorations du script serait-elle possible ? (1) Donnez-lui à la place un dossier plein de fichiers txt, et faites-les ouvrir un à la fois dans Graph Builder, et lorsque je ferme Graph Builder, il ferme le fichier Data Table correspondant et ouvre le suivant, (2) automatiquement déplacez le focus sur le sélecteur de colonne afin que je puisse immédiatement commencer à parcourir les variables sans avoir à cliquer dans la case du sélecteur de colonne, (3) agrandissez la fenêtre du générateur de graphiques à l'écran lorsqu'elle s'ouvre.
JMP devient rapidement mon logiciel préféré.Re : Comment ajouter automatiquement toutes les colonnes au sélecteur de colonnes dans .jslLe script est très simple,
Names Default To Here( 1 );
// Loop across all data tables
For( i = 1, i <= N Table(), i++,
dt = Data Table( i );
// Find all of the column names
colList = dt << get column names( string );
// Get the first 3 columns for special processing
col1 = colList[1];
col2 = colList[2];
col3 = colList[3];
// Remove first 2 from column switcher columns from the overall list
Remove From( colList, 1, 2 );
// Run the Graph Builder
dt << Graph Builder(
Size( 570, 621 ),
Variables(
X( As Column( col2 ) ),
Y( As Column( col3 ) ),
Overlay( As Column( col1 ) )
),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) ),
Column Switcher( col3, colList )
);
);