Trova tutti gli elementi dell'albero di visualizzazione<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />CIAO,
Vorrei utilizzare JSL per ottenere un elenco di tutti gli oggetti all'interno di un albero di visualizzazione per scopi di scripting.In particolare, vorrei ottenere un elenco di tutti i FrameBox all'interno di una finestra e quindi aggiungere uno script grafico a ciascuno.O meglio ancora, vorrei restituire all'utente un elenco di FrameBox disponibili e quindi fare in modo che l'utente selezioni quale script grafico aggiungere.
Come posso ottenere un elenco di tutti i FrameBox in una finestra?Vorrei ottenere un elenco in una forma adatta allo scripting e non solo visualizzare l'albero di visualizzazione.È possibile?
Grazie!
Ri: Trova tutti gli elementi dell'albero di visualizzazioneQuale versione di JMP stai usando?
Stai usando una macchina Windows o un Mac?
Potresti per favore cancellare il registro, eseguire nuovamente lo script e quindi includere l'intero output del registro nella tua prossima risposta?
Ri: Trova tutti gli elementi dell'albero di visualizzazioneSto cercando di eseguire questo script, ma ricevo il messaggio di errore:
Send Expects Scriptable Object{1} in accesso o valutazione di 'Send' , node << /*####*/className/*####*/
Qualche idea sul perché o cosa dovrei fare?
Grazie,
Tova
Ri: Trova tutti gli elementi dell'albero di visualizzazioneSto cercando di eseguire questo script, ma ricevo il messaggio di errore:
Send Expects Scriptable Object{1} in accesso o valutazione di 'Send' , node << /*####*/className/*####*/
Qualche idea sul perché o cosa dovrei fare?
Grazie
Ri: Trova tutti gli elementi dell'albero di visualizzazioneCiao MS,
Il problema sembra essere che "parent << getTitle" non produce un risultato per Graph Builder in JMP10.
Il mio team farà i conti senza questo per JMP10. Grazie per l'aiuto!
Ri: Trova tutti gli elementi dell'albero di visualizzazionePotrei non essere in grado di aiutarti poiché non ho una licenza JMP 10. Cosa va storto? Qualche messaggio nel registro?
Graph Builder si è evoluto molto per ogni nuova versione di JMP. Penso che anche il supporto per gli script di Graph Builder sia migliorato. Forse c'è uno speciale tipo di casella di visualizzazione nel report di Graph Builder v.10 che non è (ancora) "scriptabile", causando l'interruzione del ciclo while prima che la ricerca sia completata.
Potresti anche provare a usare Inserire() invece di Inserisci elemento().
Ri: Trova tutti gli elementi dell'albero di visualizzazioneCIAO SM ,
Grazie ancora per la tua sceneggiatura; funziona magnificamente per JMP12.Ora sto cercando di rendere lo script compatibile fino a JMP10 e ho problemi a eseguire il debug dello script per GraphBuilder.Sai come far funzionare la tua sceneggiatura GraphBuilder in JMP10?
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
// Lo script funzionerà per graph1.
grafico1 = dt << Modello adatto (
Y ( : altezza ) ,
Effetti ( : sesso ) ,
Personalità ( "Minimi quadrati standard" ) ,
Enfasi ( "Leva degli effetti" ) ,
Correre (
: altezza << { Mancanza di vestibilità ( 0 ) , Plot reale da previsto ( 1 ) ,
Trasformazione Box Cox Y ( 1 ) , Traccia residuo per previsto ( 1 ) ,
Leva effetto trama ( 1 )}
)
) ;
// Lo script andrà in crash per graph2.
/*
grafico2 = dt << Generatore di grafici(
Mostra pannello di controllo( 0 ),
Variabili( X( :altezza ), Y( :peso ), Avvolgi( :età ) ),
Elementi( Punti( X, Y, Legenda( 1 ) ) )
);
*/
Aspettare ( 1 ) ;
vincita = Finestra corrente () ;
// Array associativo che collega i numeri FrameBox visualizzati con i titoli
fbTitoli = [ => ] ;
io = 1 ;
Mentre ( È Scriptabile ( Tentativo ( genitore = vincita [ Cornice ( io )] << genitore ) ) ,
Mentre ( parentType = Car ( genitore << nome della classe ) != "Scatola Contorno" ,
genitore = genitore << genitore
) ;
fbTitoli << inserire elemento ( io , genitore << getTitle ) ;
io ++;
) ;
Spettacolo ( fbTitoli ) ;
// Seleziona le finestre.
vincita << Porta la finestra in primo piano ;
Per ( io = 1 , io <= N articoli ( fbTitoli ) , io ++,
vincita [ FrameBox ( io )] << Selezionare ;
Nuova finestra ( "Titolo FrameBox" , << Modale , Casella di testo ( Valutazione ( fbTitoli [ io ] ) ) ) ;
vincita [ FrameBox ( io )] << Deseleziona ;
) ;
Re: Trova tutti gli elementi dell'albero di visualizzazioneGrazie SM.
Se pubblichi la tua risposta nella discussione separata per questa domanda di follow-up, Trova FrameBox nascosti o visualizzati , lo contrassegnerò come corretto.
Molto impressionante.
Ri: Trova tutti gli elementi dell'albero di visualizzazioneQuesto ha funzionato per me se non hai bisogno di tutte le altre cose che Ian ha integrato.Non so perché restituisce elenchi di elenchi, ma seleziono solo il primo.
dt = aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
biv = (dt << Bivariato (Y( : altezza , : peso) , X( : età))) ;
frame_list = biv << percorso ( "//FrameBox" ) ;
Aspettare ( 2 ) ;
elenco_frame[ 1 ][ 1 ] <
Aspettare ( 2 ) ;
elenco_frame[ 2 ][ 1 ] <
Re: Trova tutti gli elementi dell'albero di visualizzazioneDiscussione interessante. Di seguito è riportato un esempio, preso in prestito pesantemente dagli esempi precedenti, in cui utilizzo un array associativo per collegare il file numeri attuali di riquadri visualizzati con i relativi titoli.
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
ogg = dt << Modello adatto (
Y ( : altezza ) ,
Effetti ( : sesso ) ,
Personalità ( "Minimi quadrati standard" ) ,
Enfasi ( "Leva degli effetti" ) ,
Correre (
: altezza << { Mancanza di vestibilità ( 0 ) , Plot reale da previsto ( 1 ) , Trasformazione Box Cox Y ( 1 ) , Traccia residuo per previsto ( 1 ) ,
Leva effetto trama ( 1 )}
)
) ;
rapporto = Rapporto ( ogg ) ;
// Array associativo che collega i numeri di frame visualizzati con i titoli
fbTitoli = [ => ] ;
io = 1 ;
Mentre ( È Scriptabile ( Tentativo ( genitore = Rapporto [ Cornice ( io )] << genitore )) ,
Mentre ( parentType = Car ( genitore << nome della classe ) != "Scatola Contorno" , genitore = genitore << genitore ) ;
fbTitoli << inserire elemento ( io , genitore << getTitolo ) ;
io ++;
) ;
Spettacolo ( fbTitoli ) ;
// Seleziona le finestre.
ogg << Porta la finestra in primo piano ;
Per ( io = 1 , io <= N articoli ( fbTitoli ) , io ++,
rapporto [ FrameBox ( io )] << Selezionare ;
vincita = Nuova finestra ( "Titolo FrameBox" , << Modale , Casella di testo ( Valutazione ( fbTitoli [ io ]))) ;
rapporto [ FrameBox ( io )] << Deseleziona ;
) ;
Re: Trova tutti gli elementi dell'albero di visualizzazioneVa bene.Grazie Ian.Uno sfortunato effetto collaterale dei FrameBox nascosti restituiti è che il titolo FrameBox potrebbe non corrispondere al numero FrameBox come mostrato di seguito.Potrei essere in grado di far funzionare il mio script utilizzando alcune altre varianti della funzione Try ().
I nomi predefiniti sono qui ( 1 ) ;
Pulisci il registro () ;
// Questa funzione attraversa in modo ricorsivo un albero di visualizzazione producendo
// un elenco di pre-ordine dei nomi delle caselle di visualizzazione che costituiscono
// l'albero. Cerca anche ogni FrameBox (visualizzato o meno),
// e ottiene il nome del genitore OutlineBox
ordine prestabilito = Funzione ( { nodo } ,
Locale ( { chnode } ,
// Ispeziona il nodo corrente
tipodinodo = Car ( nodo << nome della classe ) ;
Stampa ( "Nodo: " || tipodinodo ) ;
Se ( tipodinodo == "FrameBox" ,
// Trova il titolo del nodo del contorno padre di questo FrameBox
genitore = nodo << genitore ;
parentType = Car ( genitore << nome della classe ) ;
Mentre ( parentType != "Scatola Contorno" ,
genitore = genitore << genitore ;
parentType = Car ( genitore << nome della classe ) ;
) ;
Inserire ( fbTitoli , genitore << getTitolo ) ;
) ;
// Esegui la ricussione
chnode = nodo << bambino ;
Mentre ( È Scriptabile ( chnode ) ,
Ricorso ( chnode ) ;
chnode = chnode << sib ;
) ;
)
) ;
// Prova 'preordina' . . .
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
ogg = dt << Modello adatto (
Y ( : altezza ) ,
Effetti ( : sesso ) ,
Personalità ( "Minimi quadrati standard" ) ,
Enfasi ( "Leva degli effetti" ) ,
Correre (
: altezza << { Mancanza di vestibilità ( 0 ) , Plot reale da previsto ( 1 ) , Regressione della trama ( 0 ) , Traccia residuo per previsto ( 1 ) , Leva effetto trama ( 1 )
}
)
) ;
rapporto = Rapporto ( ogg ) ;
fbTitoli = {} ;
ordine prestabilito ( rapporto ) ;
Stampa ( "\!N" , fbTitoli ) ;
// Seleziona le finestre.
Aspettare ( 1 ) ;
ogg << Porta la finestra in primo piano ;
Per ( io = 1 , io <= N articoli ( fbTitoli ) , io ++,
Tentativo (
rapporto [ FrameBox ( io )] << Selezionare ;
vincita = Nuova finestra ( "Titolo FrameBox" , << Modale , Casella di testo ( Valutazione ( fbTitoli [ io ] ) ) ) ;
rapporto [ FrameBox ( io )] << Deseleziona ;
)
) ;
Re: Trova tutti gli elementi dell'albero di visualizzazioneIn realtà non rispondo direttamente alla tua domanda, ma potresti essere in grado di rendere benigno l'errore che menzioni utilizzando la funzione "Prova ()".
Re: Trova tutti gli elementi dell'albero di visualizzazioneCIAO Ian@JMP ,
Grazie ancora per il funzione di preordine.C'è un modo per la funzione di restituire solo FrameBox che vengono effettivamente visualizzati?Oppure c'è un modo per JMP di sapere quali FrameBox vengono visualizzati o meno?
Trovo che quando il mio script tenta di inviare un comando a un FrameBox che non viene visualizzato, causerà un errore.
Re: Trova tutti gli elementi dell'albero di visualizzazioneGrazie Ian.
Re: Trova tutti gli elementi dell'albero di visualizzazioneÈ perfettamente possibile. Il codice seguente utilizza l'attraversamento del preordine per percorrere l'albero di visualizzazione (ed è stato originariamente scritto da Joseph Morgan nella divisione JMP, credo). Dovresti essere in grado di ottenere ciò di cui hai bisogno con alcune modifiche (a seconda del resto del codice).
NamesDefaultToHere ( 1 ) ;
Pulisci il registro () ;
// Questa funzione attraversa in modo ricorsivo un albero di visualizzazione producendo
// un elenco di pre-ordine dei nomi delle caselle di visualizzazione che costituiscono
// l'albero. Cerca anche ogni FrameBox (visualizzato o meno),
// e ottiene il nome del genitore OutlineBox
ordine prestabilito = Funzione ({ nodo } ,
Locale ({ chnode } ,
// Ispeziona il nodo corrente
tipodinodo = Car ( nodo << nome della classe ) ;
Stampa ( "Nodo: " || tipodinodo ) ;
Se ( tipodinodo == "FrameBox" ,
// Trova il titolo del nodo del contorno principale di questo FrameBox
genitore = nodo << genitore ;
parentType = Car ( genitore << nome della classe ) ;
Mentre ( parentType != "Scatola Contorno" ,
genitore = genitore << genitore ;
parentType = Car ( genitore << nome della classe ) ;
) ;
Inserire ( fbTitoli , genitore << getTitle )
) ;
// Esegui la ricussione
chnode = nodo << bambino ;
Mentre ( È scriptabile ( chnode ) ,
Ricorso ( chnode ) ;
chnode = chnode << sib ;
) ;
) ;
) ;
// Prova 'preordina' . . .
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
ogg = dt << Modello adatto (
Y ( : altezza ) ,
Effetti ( : sesso ) ,
Personalità ( "Minimi quadrati standard" ) ,
Enfasi ( "Leva degli effetti" ) ,
Correre (
: altezza << { Mancanza di vestibilità ( 0 ) , Plot reale da previsto ( 1 ) ,
Regressione della trama ( 0 ) , Traccia residuo per previsto ( 1 ) ,
Leva effetto trama ( 1 )}
)
) ;
rapporto = rapporto ( ogg ) ;
fbTitoli = {} ;
ordine prestabilito ( rapporto ) ;
Stampa ( "\!N" , fbTitoli ) ;