¿Cómo es posible automatizar la salida de plataformas que requieren entrada desde un cuadro de diálogo modal?
A continuación se muestran dos ejemplos. El primero funciona al especificar todas las opciones en el cuadro de diálogo.
Esperaría que el segundo funcione de la misma manera si es posible especificar todas las opciones. Supongo que algunas opciones no utilizan los nombres o la sintaxis correctos (desafortunadamente, Jmp no proporciona ninguna información de depuración). Vea los ejemplos a continuación (funciona en Jmp 14 EA 7)...
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//This Works when all options in Save Document Matrix are specified:
te=dt<<TEXT explorer=""></TEXT>
En general, el cuadro de diálogo Recodificar no admite secuencias de comandos. He transmitido sus comentarios al equipo de desarrollo de JMP para que los tengan en cuenta en una versión futura de JMP.
¡Gracias por usar JMP!
Gracias por su respuesta, tal vez la distancia de Levenshtein sea útil algún día.
Estoy buscando una forma de automatizar la última parte de las plataformas mediante secuencias de comandos en general. Soy consciente de que no hay documentación para esto, o al menos no pude encontrarla, pero como puede ver en mi primer ejemplo, es posible evitar el cuadro de diálogo modal cuando se proporcionan todos los valores en el momento de la llamada. No estoy seguro de que funcione para todos los cuadros de diálogo, pero dado que funcionó para uno, creo que es muy probable que funcione en general. De lo contrario, ruego a los desarrolladores que hagan que esto funcione, para que podamos evitar tareas repetitivas y desplegar todo el potencial de las plataformas y las secuencias de comandos Jmp.
Desafortunadamente, no hay forma de hacer que los cuadros de diálogo modales desaparezcan sin hacer clic en ellos, a menos que el cuadro se cierre solo. En este caso, podría escribir la grabación usted mismo; la parte más difícil sería encontrar o escribir una función de distancia de cadena.
El script a continuación puede ayudarlo a comenzar, pero no use esta función de distancia tal como está: ¡es muy ineficiente!Una distancia de dos en palabras con 5 caracteres es mucho, pero puede ver que 'JANE', 'JAMES' y 'JOE' se convierten en 'JANE'.
Names default to here( 1 );
// FUNCTION TO CALCULATE DISTANCE BETWEEN STRINGS
//Rewrite of example C code from wikipedia:
//https://en.wikipedia.org/wiki/Levenshtein_distance
//very inefficient
// len_s and len_t are the number of characters in string s and t respectively
LevenshteinDistance_ = function({s, len_s, t, len_t},
// show(s || char(len_s) || t || char(len_t));
// base case: empty strings
if ( substr( s, 1, len_s ) == substr( t, 1, len_t ), 0, //strings match, distance is zero
len_s == 0, len_t, //s empty, distance is the length of t
len_t == 0, len_s, //t empty, distance is the length of s
// return minimum of delete char from s, delete char from t, and delete char from both
minimum(
LevenshteinDistance_(s, len_s - 1, t, len_t ) + 1,
LevenshteinDistance_(s, len_s , t, len_t - 1) + 1,
LevenshteinDistance_(s, len_s - 1, t, len_t - 1) +
if (substr(s, len_s, 1) == substr(t, len_t, 1), 0, 1) // test if last characters of the strings match
);
);
);
//Wrapper that finds strings lengths for you
LevenshteinDistance = function({s, t}, LevenshteinDistance_(s, length(s), t, length(t)));
// EXAMPLE
//data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "name recoded", Character, "Nominal" );
//replace names with the first name in the table having a Levenshtein
//distance of two or less when compared to that value
for( i = 1, i <= min(15, N Rows( dt )), i++, //for each row in the table
//if row one always use that value
Column( dt, "name recoded")[i] = if( i == 0, Column( dt, "name")[i], <BR />
newvalue = Column(dt, "name")[i]; //assume you will use this rows' value<BR />
match = 0; //flag indicating that a match is found
for( j = 1, j < i & match == 0, j++, //look at all previous rows to find a match
//if a match use the previous row value and stop looking for more matches
if( LevenshteinDistance( Column(dt, "name")[i], Column(dt, "name")[j] ) <= 2,
newvalue = Column(dt, "name")[j];
match = 1;
)
);
newvalue;
);
);