Elenco dinamico di pulsanti collegati agli script in una cartellaEhi squadra JMP!
Speravo di ottenere qualche indicazione su come avrei potuto avere una finestra dinamica con pulsanti che si collegassero a qualunque script si trovi in una cartella di riferimento. Quindi, se avessi due script nella cartella, avrei una finestra con due caselle di pulsanti. Se ne avessi 50, avrei 50 pulsantiere. Idealmente potrebbe esserci un modo per dire dinamicamente alla finestra in quante "colonne" disporre le caselle dei pulsanti.
Qualsiasi aiuto sarebbe apprezzato!
Steve
Automazione e scriptingRi: Elenco dinamico di pulsanti collegati agli script in una cartellaDi seguito è riportato un esempio che utilizza gli script installati come esempi per JMP. Se non si dispone di JMPPRO, è necessario modificare il riferimento alla directory da JMPPRO a JMP. Anche il numero di versione 18 deve essere cambiato con il numero di versione.
Names Default To Here( 1 );
dir = "C:\Program Files\JMP\JMPPRO\18\Samples\Scripts";
files = Files In Directory( dir );
For( i = N Items( files ), i >= 1, i--,
If( Word( -1, files[i], "." ) != "jsl",
Remove From( files, i, 1 )
)
);
theExpr = "";
For Each( {scr}, files,
theExpr = theExpr || ",ButtonBox(\!"" || Word( -2, scr, "./\" ) || "\!", include(\!""
|| dir || "\" || scr || "\!") )"
);
Eval(
Parse(
"nw = New Window( \!"Scripts\!",
Outline Box( \!"Select Script to Run\!",
Lineup Box( N Col( 4 )"
|| theExpr || " )
)
);"
)
);

Preferisco non utilizzare la metodologia Eval(Parse()), tuttavia si è rivelato troppo tardi per poter lavorare su una versione della sintassi più leggibile. Questo metodo fa il lavoro. Cerca altri membri della community per migliorare il mio codice.
Ri: Elenco dinamico di pulsanti collegati agli script in una cartella@txnelson Potresti non pensare che sia il codice più pulito ma funziona meravigliosamente! Grazie per l'aiuto e la rapida risposta!!
Steve
Ri: Elenco dinamico di pulsanti collegati agli script in una cartella
Ri: Elenco dinamico di pulsanti collegati agli script in una cartellaUna versione leggermente diversa del codice di Jim (Filter Each per ottenere l'elenco dei file .jsl, Eval(EvalExpr()) per aggiungere i pulsanti ai percorsi)
Names Default To Here(1);
dir = "$SAMPLE_SCRIPTS/";
dir = Convert File Path(dir, windows);
files = Files In Directory(dir);
jslfiles = Filter Each({filename}, files, Word(-1, filename, ".") == "jsl");
// Not sure how you would like to determine column count, but with Lineup box it is fairly easy
lub = Lineup Box(N Col(4));
For Each({filename}, jslfiles,
Eval(EvalExpr(
lub << Append(Button Box(filename,
nw = New Window(Expr(filename),
Script Box(Load Text File(Expr(dir || filename)), "JSL", 600, 600)
);
));
));
);
nw = New Window("Scripts in " || dir,
Outline Box("Click to Open a Script",
lub
);
);
A seconda di ciò che stai facendo, potresti anche considerare di avere una funzione/espressione richiamata da ciascuno dei pulsanti. Farlo in modo efficace richiede però un po’ di lavoro extra, quindi sapere come creare queste soluzioni più semplici è sempre una buona idea.
Ri: Elenco dinamico di pulsanti collegati agli script in una cartella@jthi e @txnelson Se potessi farti capire ancora una volta su questo:
Se volessi aggiungere una casella di modifica del numero che abbia il valore per la casella Allinea e poi una casella di pulsante da premere che applicherebbe il valore nella casella di modifica del numero per cambiare l'orientamento dei pulsanti di script nella finestra, come sarebbe Aspetto?
Quindi qualcosa del genere

Ri: Elenco dinamico di pulsanti collegati agli script in una cartellaQuesto potrebbe dare un'idea di come puoi farlo
Names Default To Here(1);
init_cols = 4;
dir = "$SAMPLE_SCRIPTS/";
dir = Convert File Path(dir, windows);
files = Files In Directory(dir);
jslfiles = Filter Each({filename}, files, Word(-1, filename, ".") == "jsl");
// Not sure how you would like to determine column count, but with Lineup box it is fairly easy
lub = Lineup Box(N Col(init_cols));
For Each({filename}, jslfiles,
Eval(EvalExpr(
lub << Append(Button Box(filename,
nw = New Window(Expr(filename),
Script Box(Load Text File(Expr(dir || filename)), "JSL", 600, 600)
);
));
));
);
nw = New Window("Scripts in " || dir,
Outline Box("Click to Open a Script",
V List Box(
Lineup Box(N Col(2),
Button Box("Press to update Col count", << Set Function(function({this},
lub << N Col((this << sib) << get)
))),
Number Edit Box(init_cols)
),
lub
)
);
);
La casella di modifica numero può anche attivarsi al momento del commit (<< Set Function()) / change (<< Set Number Changed()) quindi non è necessariamente necessario un pulsante