Come posso forzare l'esecuzione del mio script in sequenza?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Il mio attuale script JSL funziona perfettamente quando lo eseguo, tuttavia, una volta eseguito, può generare alcuni errori.Posso gestirlo in qualche modo inserendo la funzione wait() ma non sempre funziona.Esiste una funzione semplice che posso richiamare nella parte superiore del mio script per eseguirlo in sequenza?
Re: Come posso forzare l'esecuzione sequenziale del mio script?Beh, a quanto pare la situazione non è così rosea come speravo. Parte del codice non viene eseguito correttamente nel comando onclose().Un 'dt << sort(...)' non funzionava correttamente nell'onclose() interno ma funzionava bene se commentavo l'onclose() interno.
Re: Come posso forzare l'esecuzione sequenziale del mio script?Grazie per la risposta. Ho provato a configurarlo come funzioni e ancora non attendeva l'input dell'utente.Per le domande sulla ricodifica e sull'ordinamento dei valori, mi sono familiari, ma avrei dovuto porre maggiore enfasi sulla loro esecuzione (o su qualsiasi funzione nativa in realtà) come modale che speravo potesse essere eseguito in modo tale da completare la funzione prima di passare alla riga di codice successiva.
Capisco cosa stai dicendo riguardo all'uso di jsl per ricodificare direttamente questo, ma speravo in un mix di jsl + interfaccia utente nativa per eseguire una serie di attività comuni che sono sempre le stesse (lo scripting hardcoded va bene) con altre attività i cui input/output cambiano e quindi si prestano all'interfaccia utente nativa, come l'ordinamento dei valori e la ricodifica. ho trovato Il post di Craige di marzo dove ha pubblicato qualcosa che può farlo, ma è un po' restrittivo a causa del nome della colonna -> denominazione della finestra della funzione. Nel mio caso avrò i nomi delle colonne in stringhe in alto, quindi per me va bene. Qui è modificato per 2 livelli di interattività. Testato sullo standard JMP13.
dt = Open( "$sample_data/big class.jmp" );
dt << Go To( :sex ) << Recode; // First interactivity, as a test, change "F" to "Female"
Window( "Recode" ) << onclose(
dt << Go To( :sex );
main menu("column info"); // second interactivity, as a test, change value ordering properties.
Window( "sex" ) << onclose(
dt:Sex[ dt << Get Rows Where( :Sex == "M" )] = "Male";
);
);Re: Come posso forzare l'esecuzione sequenziale del mio script?Quando codifico uno script abbastanza complesso, in genere utilizzo la seguente struttura per il mio codice:
Main = Expr(
returna = A(passing variables);
returnb = B(passing variables);
);
A = Function({Passed variables},
processing code
);
B = Function({Passed variables},
processing code
);
// Enter the script by executing the Main section
Main;
Per quanto riguarda le tue domande sugli elementi Recode e Col Info, le risposte sono No e Sì. Non esiste una funzione diretta per eseguire l'elemento Recode da JMP interattivo. Questo perché è più semplice replicare la funzionalità in JSL aperto.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt:Sex[ dt << Get Rows Where( :Sex == "F" )] = "Female";
dt:Sex[ dt << Get Rows Where( :Sex == "M" )] = "Male";
// or
For Each Row(
If( :Sex == "F", :Sex = "Female",
:Sex = "Male"
);
Per quanto riguarda gli elementi nella finestra di dialogo Informazioni colonna, Formattazione, Proprietà colonna come Ordinamento valori, Limiti specifiche, ecc. sono tutti disponibili in JSL per essere modificati in base a ciò in cui devono essere modificati.
Tutto questo è trattato nella Guida allo scripting
Aiuto==>Libri==>Guida allo scripting
e/o nell'indice degli script
Aiuto==>Indice degli script
Re: Come posso forzare l'esecuzione sequenziale del mio script?
@txnelson ha scritto:
Il metodo che utilizzo consiste nel suddividere lo script in componenti funzionali, quindi nel disporre la sezione di controllo dell'istruzione di script attraverso lo script e nel richiamare i componenti quando ne ho bisogno.In genere inserisco il codice nelle sezioni EXPR(().Il codice inserito in EXPR() non verrà eseguito finché non verrà chiamato dalla sezione di controllo.
Quando dici di chiamare i componenti quando ne hai bisogno, intendi che chiami le espressioni all'interno della sezione di controllo e le esegui direttamente, o devi chiamarle manualmente e individualmente in modo che la funzione precedente termini? Nel primo caso, come è strutturata la sezione di controllo in modo che aspetti davvero?
Esiste un modo per chiamare funzioni native come ricodifica e informazioni sulle colonne (per modificare l'ordinamento dei valori) come finestre/funzioni modali?
Grazie,
Mike
Re: Come posso forzare l'esecuzione sequenziale del mio script?È consigliabile passare alla tabella dati un messaggio relativo alla piattaforma da eseguire, anziché dover tenere traccia di quale tabella è la tabella attiva corrente.Quindi piuttosto che:
dt = Tabella dati ("tabella dati xxx");
dt << Cancella Seleziona;
dt<
Bivariata(X(.......
dt = Tabella dati ("tabella dati xxx");
dt << Bivariata(X(.........
assicura che la piattaforma bivariata verrà eseguita sulla tabella dati a cui fa riferimento "dt"
Re: Come posso forzare l'esecuzione sequenziale del mio script?ho riscontrato diversi errori durante l'esecuzione automatica degli script, ma quando li ho testati manualmente era ok.
per questo tipo di errori, di solito mi capitano quando provo a creare una trama base sulla tabella sbagliata
ora aggiungo quelle righe prima di creare grafici/grafici negli script
dt = Tabella dati ("tabella dati xxx");
dt << Cancella Seleziona;
dt<Re: Come posso forzare l'esecuzione sequenziale del mio script?
Mi dispiace sapere che hai problemi qui.
Il nostro obiettivo è che non dovresti mai aver bisogno di un file Aspettare() per eseguire lo script. Sappiamo che ci sono momenti in cui i vari elementi dell'interfaccia utente (finestre, piattaforme, ecc.) hanno bisogno di un momento per istanziarsi completamente prima di poter rispondere in modo appropriato al resto del tuo JSL. Tuttavia, vogliamo affrontare queste situazioni internamente in modo che tu non debba preoccupartene nel tuo JSL.
Quindi, quando ti imbatti in situazioni che vengono risolte aggiungendo a Aspettare() nel tuo codice, inviali a Supporto tecnico , in modo da poterli monitorare e risolverli.
Grazie!
-Jeff
Re: Come posso forzare l'esecuzione sequenziale del mio script?metto attendere(0); istruzioni tra sezioni di codice che voglio eseguire in sequenza.
Re: Come posso forzare l'esecuzione sequenziale del mio script?Il metodo che utilizzo consiste nel suddividere lo script in componenti funzionali, quindi nel disporre la sezione di controllo dell'istruzione di script attraverso lo script e nel richiamare i componenti quando ne ho bisogno.In genere inserisco il codice nelle sezioni EXPR(().Il codice inserito in EXPR() non verrà eseguito finché non verrà chiamato dalla sezione di controllo.