ProblemaÈ necessario creare una calcolatrice personalizzata che visualizzi una tabella di numeri basata su diversi valori di input.
SoluzioneUtilizzare le caselle di modifica dei numeri per ottenere i valori e utilizzare il metodo Set Function per allegare JSL alle caselle di modifica dei numeri per ricalcolare la tabella quando i valori vengono modificati. Usa un Table Box per contenere colonne di numeri. Ricostruisci le colonne di numeri quando i valori cambiano.
if( jmpversion()<"13", Open Log(1); throw("richiede JMP 13 o superiore")); // occorrono valori predefiniti per impostare le caselle di modifica prestito = 1e5; anni = 2; aprile = 15; cur = "USD"; // "EUR" New Window( "table demo", Border Box( Left( 5 ), Right( 5 ), bottom( 5 ), // questo box estende il verde chiaro di alcuni pixel V List Box( // border box bisogno di un singolo figlio, come un vlist, per contenere tutto Border Box( Left( 20 ), Right( 20 ), top( 10 ), bottom( 10 ), // il bordo di inserimento dati H List Box( // separa i dati campi di inserimento dal titolo "Interessante" V List Box( // i tre campi di inserimento verticali e le loro etichette H List Box( // un campo e la sua etichetta Number Edit Box( // un campo in prestito, < 12, month -= 12; year += 1; ); date[i ] = Date DMY( day, month, year ); month += 1; ); While( !Is Empty( tb << child ), (tb << child) << delete ); // rimuove i dati precedenti, se presenti // aggiunge le nuove colonne alla tabella tb << append( Number Col Box( "Due Date", date, <Non sono un tipo di finanza. Non dare per scontato che io stia usando correttamente le formule. Ho scelto sfumature di verde e ho specificato alcuni parametri del table box per rendere il tavolo attraente. Non sono un artista, puoi fare di meglio. La casella spaziatrice verde crea una bella barra di colore e riempie la pagina senza allargarla utilizzando le opzioni AutoStretching e MaxSize. La funzione freshen() viene chiamata da tutti e tre i campi di immissione dati e non importa quale campo è cambiato. Potresti fare qualcosa di più complicato, ma a meno che tu non abbia calcoli molto lenti, mantienilo semplice. È possibile fare clic con il pulsante destro del mouse sulla tabella e creare una tabella dati per elaborare ulteriormente i dati; potresti volere un modo per salvare i parametri con la tabella dei dati (un altro pulsante, forse, per creare la tabella dei dati). È inoltre possibile inserire nel journal il report che includerà i parametri.
Guarda ancheAiuto->Libri->Guida allo scripting contiene ulteriori informazioni sui Table Box
Ho iniziato a scrivere script all'inizio del 2021 e questo post è stato davvero utile. Ho copiato la maggior parte dello script sopra e l'ho modificato per la mia calcolatrice, il cui output intendo utilizzare in un'altra piattaforma.
Tuttavia, non sono pienamente soddisfatto di ciò che ho ottenuto. Quando apro ed eseguo il mio script per la prima volta, ottengo due caselle numeriche precompilate in cui posso inserire i valori.

È solo quando cambio uno dei valori nelle caselle numeriche precompilate che appare la terza casella con il risultato che sono effettivamente interessato a utilizzare ulteriormente.

Penso di essermi imbattuto in questo, perché ciò che ho creato si basa sul codice fornito da @Craige_Hales Sopra.
- Come posso fare in modo che la terza casella (cerchiata in rosso sopra) appaia dall'inizio, ma sia anche aggiornata in base ai valori di input nelle altre due caselle?
- Esiste una soluzione più efficiente per costruire una piccola calcolatrice o sto usando un approccio inutilmente complicato?
A questo punto volevo anche menzionare che, sì, ho studiato la Scripting Guide così come lo Scripting Index, ma non sono ancora uno scripter abbastanza forte per trovare la mia soluzione. (Non ho sfogliato "Jump into JMP Scripting", tuttavia, poiché al momento non ho accesso alla mia copia.)
Names default to here ( 1 );
// some default values for the first two number edit boxes
CurrentConc_wt% = 45.00;
LowestAcceptConc_wt% = 40.00;
New Window( "Calculating Concentration acceptance limit",
Border Box(Left( 5 ), Right( 5 ), bottom( 20 ),
V List Box(
Text Box("Some comment")
)
),
Border Box(Left( 5 ), Right( 5 ), bottom( 20 ),
V List Box(
Text Box("Instructions: [add instructions here later]")
)
),
Border Box(Left( 5 ), Right( 5 ), bottom( 5 ), // added this because I copied this code and left in there, just in case...
V List Box( // border boxes need a single child, like a vlist, to hold everything
Border Box(Left( 5 ), Right( 5 ), bottom( 5 ), // border for data entry boxes
H List Box(
V List Box(
Border Box(Left( 5 ), Right( 5 ), bottom( 5 ),
H List Box(
Number Edit Box(
CurrentConc_wt%,
<<SETFORMAT></SETFORMAT>
Ci vorrà un po' di tempo prima che io possa esaminarlo in modo più approfondito. Ma penso che potresti semplicemente perdere la chiamata alla fine del JSL originale, freshen() , che era lì per inizializzare tutte le caselle come se qualcosa fosse già stato cliccato.
Grazie, è stata una soluzione facile. Forse c'è motivo di essere soddisfatti, dopotutto.