Buscar todos los elementos del árbol de visualización<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola,
Me gustaría usar JSL para obtener una lista de todos los objetos dentro de un árbol de visualización con fines de secuencias de comandos.Específicamente, me gustaría obtener una lista de todos los FrameBoxes dentro de una ventana y luego agregar un script de gráficos a cada uno.O mejor aún, me gustaría devolver una lista de FrameBoxes disponibles al usuario y luego hacer que el usuario seleccione qué secuencia de comandos de gráficos agregar.
¿Cómo puedo obtener una lista de todos los FrameBoxes en una ventana?Me gustaría obtener una lista que esté en un formato adecuado para secuencias de comandos, y no solo ver el árbol de visualización.es posible?
¡Gracias!
Re: Buscar todos los elementos del árbol de visualización¿Qué versión de JMP estás usando?
¿Estás ejecutando en una caja de Windows o en una Mac?
¿Podría borrar el registro, volver a ejecutar el script y luego incluir el resultado del registro completo en su próxima respuesta?
Re: Buscar todos los elementos del árbol de visualizaciónEstoy tratando de ejecutar este script, pero recibo el mensaje de error:
Enviar espera objeto programable{1} en acceso o evaluación de 'Enviar', nodo << /*###*/className/*###*/
¿Alguna idea de por qué o qué debo hacer?
Gracias,
Tova
Re: Buscar todos los elementos del árbol de visualizaciónEstoy tratando de ejecutar este script, pero recibo el mensaje de error:
Enviar espera objeto programable{1} en acceso o evaluación de 'Enviar', nodo << /*###*/className/*###*/
¿Alguna idea de por qué o qué debo hacer?
gracias
Re: Buscar todos los elementos del árbol de visualizaciónHola MS,
El problema parece ser que "padre << getTitle" no produce un resultado para Graph Builder en JMP10.
Mi equipo se las arreglará sin esto para JMP10. ¡Gracias por tu ayuda!
Re: Buscar todos los elementos del árbol de visualizaciónEs posible que no pueda ayudar ya que no tengo una licencia JMP 10. ¿Qué sale mal? ¿Algún mensaje en el registro?
Graph Builder ha evolucionado mucho para cada nueva versión de JMP. Creo que la compatibilidad con las secuencias de comandos de Graph Builder también ha mejorado. Tal vez haya un tipo de cuadro de visualización especial en el informe de v.10 Graph Builder que (todavía) no es "scriptable", lo que hace que el ciclo while se detenga antes de que se complete la búsqueda.
También podrías intentar usar Insertar() en lugar de Insertar elemento ().
Re: Buscar todos los elementos del árbol de visualizaciónHola EM ,
Gracias de nuevo por tu guión; funciona muy bien para JMP12.Ahora estoy tratando de hacer que el script sea compatible con JMP10 y tengo problemas para depurar el script para GraphBuilder.¿Sabes cómo hacer que tu script funcione para ¿GraphBuilder en JMP10?
dt = Abierto ( "$SAMPLE_DATA/Clase grande.jmp" ) ;
// El script funcionará para graph1.
grafico1 = dt << Modelo de ajuste (
Y ( : altura ) ,
Efectos ( : sexo ) ,
Personalidad ( "Mínimos cuadrados estándar" ) ,
Énfasis ( "Efecto de apalancamiento" ) ,
Correr (
: altura << { Falta de ajuste ( 0 ) , Trazar real por predicho ( 1 ) ,
Transformación Box Cox Y ( 1 ) , Trazar Residual por Predicho ( 1 ) ,
Apalancamiento del efecto de la trama ( 1 )}
)
) ;
// El script fallará para graph2.
/*
gráfico2 = dt << Creador de gráficos(
Mostrar panel de control ( 0 ),
Variables( X( :altura ), Y( :peso ), Envoltura( :edad ) ),
Elementos( Puntos( X, Y, Leyenda( 1 ) ) )
);
*/
Esperar ( 1 ) ;
ganar = Ventana actual () ;
// Matriz asociativa que vincula los números de FrameBox mostrados con títulos
títulosfb = [ => ] ;
i = 1 ;
Mientras ( es programable ( Intentar ( padre = ganar [ Caja de marcos ( i )] << padre ) ) ,
Mientras ( parentType = Carbonizarse ( padre << nombre de la clase ) != "ContornoCuadro" ,
padre = padre << padre
) ;
títulosfb << insertar artículo ( i , padre << obtener título ) ;
i ++;
) ;
Espectáculo ( títulosfb ) ;
// Seleccionar ventanas.
ganar << Llevar ventana al frente ;
Para ( i = 1 , i <= N elementos ( títulosfb ) , i ++,
ganar [ MarcoCuadro ( i )] << Seleccionar ;
Nueva ventana ( "Título de FrameBox" , << Modal , Caja de texto ( evaluar ( títulosfb [ i ] ) ) ) ;
ganar [ MarcoCuadro ( i )] << Deseleccionar ;
) ;
Re: Buscar todos los elementos del árbol de visualizaciónGracias MS.
Si publica su respuesta en la discusión separada para esta pregunta de seguimiento, Encuentra FrameBoxes ocultos o mostrados , lo marcaré como correcto.
Muy impresionante.
Re: Buscar todos los elementos del árbol de visualizaciónEsto funcionó para mí si no necesitas todas las otras cosas que Ian incorporó.No sé por qué está devolviendo listas de listas, pero solo selecciono la primera.
dt = abierto ( "$SAMPLE_DATA/Clase grande.jmp" ) ;
vivac = (dt << bivariado (Y( : altura , : peso) , X( : edad))) ;
lista_de_cuadros = vivac << xpath ( "//CuadroMarco" ) ;
esperar ( 2 ) ;
lista_cuadros[ 1 ][ 1 ] <
esperar ( 2 ) ;
lista_cuadros[ 2 ][ 1 ] <
Re: Buscar todos los elementos del árbol de visualizaciónInteresante discusión. A continuación se muestra un ejemplo, tomando prestado en gran medida de los ejemplos anteriores, donde utilizo una matriz asociativa para vincular el cifras actuales de cuadros de marco mostrados con sus títulos.
dt = Abierto ( "$SAMPLE_DATA/Clase grande.jmp" ) ;
objeto = dt << Modelo de ajuste (
Y ( : altura ) ,
Efectos ( : sexo ) ,
Personalidad ( "Mínimos cuadrados estándar" ) ,
Énfasis ( "Efecto de apalancamiento" ) ,
Correr (
: altura << { Falta de ajuste ( 0 ) , Trazar real por predicho ( 1 ) , Transformación Box Cox Y ( 1 ) , Trazar Residual por Predicho ( 1 ) ,
Apalancamiento del efecto de la trama ( 1 )}
)
) ;
informe = Informe ( objeto ) ;
// Matriz asociativa que vincula los números de cuadro de cuadro mostrados con títulos
títulosfb = [ => ] ;
i = 1 ;
Mientras ( es programable ( Intentar ( padre = Informe [ Caja de marcos ( i )] << padre )) ,
Mientras ( parentType = Carbonizarse ( padre << nombre de la clase ) != "ContornoCuadro" , padre = padre << padre ) ;
títulosfb << insertar artículo ( i , padre << obtener título ) ;
i ++;
) ;
Espectáculo ( títulosfb ) ;
// Seleccionar ventanas.
objeto << Llevar ventana al frente ;
Para ( i = 1 , i <= N elementos ( títulosfb ) , i ++,
informe [ MarcoCuadro ( i )] << Seleccionar ;
ganar = Nueva ventana ( "Título de FrameBox" , << Modal , Caja de texto ( evaluar ( títulosfb [ i ]))) ;
informe [ MarcoCuadro ( i )] << Deseleccionar ;
) ;
Re: Buscar todos los elementos del árbol de visualizaciónBueno.graciasUn efecto secundario desafortunado de los FrameBoxes ocultos devueltos es que el título de FrameBox puede no coincidir con el número de FrameBox como se muestra a continuación.Es posible que pueda hacer que mi script funcione usando algunas otras variaciones en la función Try().
Nombres predeterminados hasta aquí ( 1 ) ;
Borrar registro () ;
// Esta función atraviesa recursivamente un árbol de visualización que produce
// una lista de pedidos anticipados de los nombres de las cajas de visualización que constituyen
// el árbol. También busca cada FrameBox (ya sea que se muestre o no),
// y obtiene el nombre del cuadro de contorno principal
hacer un pedido = Función ( { nodo } ,
Local ( { chnodo } ,
// Inspeccionar el nodo actual
tipo de nodo = Carbonizarse ( nodo << nombre de la clase ) ;
Imprimir ( "Nodo: " || tipo de nodo ) ;
Si ( tipo de nodo == "CuadroMarco" ,
// Encuentra el título del nodo principal del esquema de este FrameBox
padre = nodo << padre ;
parentType = Carbonizarse ( padre << nombre de la clase ) ;
Mientras ( parentType != "ContornoCuadro" ,
padre = padre << padre ;
parentType = Carbonizarse ( padre << nombre de la clase ) ;
) ;
Insertar en ( títulosfb , padre << obtener título ) ;
) ;
// Haz la recusación
chnodo = nodo << niño ;
Mientras ( es programable ( chnodo ) ,
recurso ( chnodo ) ;
chnodo = chnodo << hermano ;
) ;
)
) ;
// Pruebe 'preordenar' . . .
dt = Abierto ( "$SAMPLE_DATA/Clase grande.jmp" ) ;
objeto = dt << Modelo de ajuste (
Y ( : altura ) ,
Efectos ( : sexo ) ,
Personalidad ( "Mínimos cuadrados estándar" ) ,
Énfasis ( "Efecto de apalancamiento" ) ,
Correr (
: altura << { Falta de ajuste ( 0 ) , Trazar real por predicho ( 1 ) , Trazar regresión ( 0 ) , Trazar Residual por Predicho ( 1 ) , Apalancamiento del efecto de la trama ( 1 )
}
)
) ;
informe = Informe ( objeto ) ;
títulosfb = {} ;
hacer un pedido ( informe ) ;
Imprimir ( "\!norte" , títulosfb ) ;
// Seleccionar ventanas.
Esperar ( 1 ) ;
objeto << Llevar ventana al frente ;
Para ( i = 1 , i <= N elementos ( títulosfb ) , i ++,
Intentar (
informe [ MarcoCuadro ( i )] << Seleccionar ;
ganar = Nueva ventana ( "Título de FrameBox" , << Modal , Caja de texto ( evaluar ( títulosfb [ i ] ) ) ) ;
informe [ MarcoCuadro ( i )] << Deseleccionar ;
)
) ;
Re: Buscar todos los elementos del árbol de visualizaciónRealmente no respondo su pregunta directamente, pero es posible que pueda hacer que la falla que menciona sea benigna usando la función 'Probar ()'.
Re: Buscar todos los elementos del árbol de visualizaciónHola Ian@JMP ,
Gracias de nuevo por el función de pedido anticipado.¿Hay alguna forma de que la función devuelva solo FrameBoxes que realmente se muestran?¿O hay alguna forma de que JMP sepa qué FrameBoxes se muestran o no?
Encuentro que cuando mi secuencia de comandos intenta enviar un comando a un FrameBox que no se muestra, provocará un error.
Re: Buscar todos los elementos del árbol de visualizacióngracias
Re: Buscar todos los elementos del árbol de visualizaciónEso es perfectamente posible. El siguiente código utiliza el recorrido de pedidos anticipados para recorrer el árbol de visualización (y creo que fue escrito originalmente por Joseph Morgan en la División JMP). Debería poder obtener lo que necesita con algunos ajustes (dependiendo del resto de su código).
Nombres predeterminados a aquí ( 1 ) ;
Borrar registro () ;
// Esta función atraviesa recursivamente un árbol de visualización que produce
// una lista de pedidos anticipados de los nombres de las cajas de visualización que constituyen
// el árbol. También busca cada FrameBox (ya sea que se muestre o no),
// y obtiene el nombre del cuadro de contorno principal
hacer un pedido = Función ({ nodo } ,
Local ({ chnodo } ,
// Inspeccionar el nodo actual
tipo de nodo = Carbonizarse ( nodo << nombre de la clase ) ;
Imprimir ( "Nodo: " || tipo de nodo ) ;
Si ( tipo de nodo == "CuadroMarco" ,
// Encuentra el título del nodo principal del esquema de este FrameBox
padre = nodo << padre ;
parentType = Carbonizarse ( padre << nombre de la clase ) ;
Mientras ( parentType != "ContornoCuadro" ,
padre = padre << padre ;
parentType = Carbonizarse ( padre << nombre de la clase ) ;
) ;
Insertar en ( títulosfb , padre << obtener título )
) ;
// Haz la recusación
chnodo = nodo << niño ;
Mientras ( Es Scriptable ( chnodo ) ,
recurso ( chnodo ) ;
chnodo = chnodo << hermano ;
) ;
) ;
) ;
// Pruebe 'preordenar' . . .
dt = Abierto ( "$SAMPLE_DATA/Clase grande.jmp" ) ;
objeto = dt << Modelo de ajuste (
Y ( : altura ) ,
Efectos ( : sexo ) ,
Personalidad ( "Mínimos cuadrados estándar" ) ,
Énfasis ( "Efecto de apalancamiento" ) ,
Correr (
: altura << { Falta de ajuste ( 0 ) , Trazar real por predicho ( 1 ) ,
Trazar regresión ( 0 ) , Trazar Residual por Predicho ( 1 ) ,
Apalancamiento del efecto de la trama ( 1 )}
)
) ;
informe = informe ( objeto ) ;
títulosfb = {} ;
hacer un pedido ( informe ) ;
Imprimir ( "\!norte" , títulosfb ) ;