¿Cómo nombrar CORRECTAMENTE una tabla?Todo,
Sé cómo ponerle un nombre a una mesa. Pero a veces, si ese nombre ya existe (por casualidad o desde la izquierda después de ejecuciones anteriores del script), el nombre en lugar de configurar "Mi tabla" se establecería en "Mi tabla 2". ¿Cómo puedo configurarlo correctamente exactamente como quiero que esté configurado?
Estoy buscando un fragmento de código que haga esto: verifica si la tabla con este nombre es extensa; en caso afirmativo, cierra o cambia el nombre de la anterior y luego nombra esta con el nombre exacto que solicité.
Probé la función Try() pero probablemente no entiendo completamente cómo funciona. Probé algunas declaraciones if() complejas que obtienen la lista de todas las tablas e itera a través de los nombres, etc. Es demasiado larga y en una gran cantidad de tablas se ralentiza significativamente.
Entonces, me preguntaba, ¿cuál es la forma CORRECTA y convencional de nombrar una tabla para estar seguro de que la tabla se llama exactamente así?
Re: ¿Cómo nombrar CORRECTAMENTE una tabla?El único problema que veo con este enfoque es que... bueno, básicamente estás intentando hacer que Set Name sea más seguro de usar escribiendo una nueva función. Pero en esa función usas Establecer nombre nuevamente, lo cual es propenso a los mismos problemas que estás tratando de resolver...
Pero no debería importar para su tabla inmediata y, por lo tanto, para el script en sí, así que estamos bien aquí.
En este punto probablemente simplemente cerraría tablas antiguas sin guardarlas.Re: ¿Cómo nombrar CORRECTAMENTE una tabla?Sí, así es como intenté abordarlo. Probablemente no entiendo completamente cómo funciona Try(). Déjame probar a tu manera.Re: ¿Cómo nombrar CORRECTAMENTE una tabla?Como mencioné, me gustaría evitar obtener una lista de todas las tablas abiertas. Generar cientos de tablas de resumen en la ejecución de un script lleva mucho tiempo.Re: ¿Cómo nombrar CORRECTAMENTE una tabla?Estoy seguro de que los distintos miembros de la Comunidad pueden tener diversas formas de abordar esta cuestión.Aquí hay uno que parece ser un enfoque bastante simple.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
xt = dt << subset( selected rows( 0 ), selected columns( 0 ) );
setName = Function( {tdt, Name},
{tdt, Name},
Try( Data Table( Name ) << set name( Name || "_Old" ) );
tdt << set name( name );
);
setName( xt, "big class" );Re: ¿Cómo nombrar CORRECTAMENTE una tabla?No conozco una forma convencional (aparte de evitar nombres que ya están en uso). Estoy de acuerdo en que puede resultar difícil, después de un tiempo de actividad prolongado, realizar un seguimiento de todas las ventanas abiertas.
Aquí hay una idea de JSL para hacer lo que usted describe (probado en JMP 14). Parece ser bastante eficiente. Para estar siempre disponible globalmente, la función se puede agregar como una función personalizada() mediante un script de inicio que se ejecuta automáticamente cada vez que se inicia JMP.
// Function for renaming data table if desired name is used by another open table
rename_if_exists = Function({s},
open_tables = Get Window List(Type("data tables")) << Get Window Title();
exists = Loc(open_tables, s)[1];
If(exists,
Data Table(open_tables[exists]) << set name(open_tables[exists] || "_old")
);
s;
);
// Apply...
dt = New Table(rename_if_exists("untitled 28972"), add rows(10));