ProblemaDebe crear una calculadora personalizada que muestre una tabla de números basada en varios valores de entrada.
SoluciónUse los cuadros de edición de números para obtener los valores y use el método Establecer función para adjuntar JSL a los cuadros de edición de números para volver a calcular la tabla cuando se cambien los valores. Use un cuadro de tabla para contener columnas de números. Reconstruya las columnas de números cuando cambien los valores.
if( jmpversion()<"13", Abrir registro(1); throw("requiere JMP 13 o superior")); // necesita valores predeterminados para configurar los cuadros de edición préstamo = 1e5; años = 2; abril = 15; actual = "USD"; // "EUR" New Window( "table demo", Border Box( Left( 5 ), Right( 5 ), bottom( 5 ), // este cuadro extiende el verde pálido unos pocos píxeles V List Box( // border boxes necesita un solo elemento secundario, como una vlist, para contener todo Border Box (Izquierda (20), Derecha (20), arriba (10), abajo (10), // el borde de entrada de datos H List Box (/ separa los datos campos de entrada del título "Interesante" V List Box( // los tres campos de entrada verticales y sus etiquetas H List Box( // un campo y su etiqueta Number Edit Box( // un campo prestado, < 12, mes -= 12; año += 1;); fechas [i ] = Fecha DMY( día, mes, año ); mes += 1; ); While( !Is Empty( tb << child ), (tb << child) << delete ); // elimina los datos anteriores, si los hay // agrega las nuevas columnas a la tabla tb << append( Number Col Box( "Fecha de vencimiento", fechas, <No soy un tipo de finanzas. No asuma que estoy usando las fórmulas correctamente. Elegí tonos de verde y especifiqué algunos parámetros del cuadro de la tabla para hacerla atractiva. No soy un artista, puedes hacerlo mejor. El cuadro espaciador verde crea una bonita barra de color y llena la página sin hacerla más ancha usando las opciones AutoStretching y MaxSize. La función freshen() se llama desde los tres campos de entrada de datos y no le importa qué campo cambió. Podrías hacer algo más complicado, pero a menos que tengas cálculos realmente lentos, mantenlo simple. Puede hacer clic con el botón derecho en la tabla y convertirla en una tabla de datos para seguir procesando los datos; es posible que desee una forma de guardar los parámetros con la tabla de datos (otro botón, quizás, para hacer la tabla de datos). También puede registrar en diario el informe que incluirá los parámetros.
Ver tambiénAyuda->Libros->Guía de secuencias de comandos tiene más información sobre Table Boxes
Comencé a escribir scripts a principios de 2021 y esta publicación fue realmente útil. Copié la mayor parte del script anterior y lo modifiqué para mi propia calculadora, cuyo resultado planeo usar en otra plataforma.
Sin embargo, no estoy completamente satisfecho con lo que he logrado. Cuando abro y ejecuto mi secuencia de comandos por primera vez, obtengo dos cuadros de números precargados donde puedo ingresar valores.

Solo cuando cambio uno de los valores en los cuadros de números precargados, aparece el tercer cuadro con el resultado que realmente me interesa usar más.

Creo que me encontré con esto, porque lo que creé se basa en el código proporcionado por @Craige_Hales arriba.
- ¿Cómo puedo hacer que el tercer cuadro (marcado con un círculo en rojo arriba) aparezca desde el principio, pero también se actualice en función de los valores de entrada en los otros dos cuadros?
- ¿Existe una solución más eficiente para construir una calculadora pequeña o estoy usando un enfoque innecesariamente complicado?
En este punto, también quería mencionar que, sí, he estado estudiando la Guía de secuencias de comandos, así como el Índice de secuencias de comandos, pero aún no soy un creador de secuencias de comandos lo suficientemente fuerte como para encontrar mi propia solución. (Sin embargo, no navegué a través de "Jump into JMP Scripting", ya que actualmente no tengo acceso a mi 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>
Pasará un tiempo antes de que pueda ver esto con más profundidad. Pero creo que es posible que te estés perdiendo la llamada al final del JSL original, freshen() , que estaba allí para inicializar todas las casillas como si ya se hubiera hecho clic en algo.
Gracias, esa fue una solución fácil. Quizás haya razones para estar satisfecho después de todo.