Fusión de la configuración de JSL usando "Unirse"<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Descubrí que puedo fusionar dos conjuntos de datos mejor usando el comando de tablas de datos "Unir", esto elimina mejor las posibles entradas duplicadas que pueden existir: la columna 1 contiene un número único para cada entrada.Tengo una secuencia de comandos que abre varias tablas de datos y manipula los datos, pero tengo problemas para llamar a cada tabla de datos por separado para que la secuencia de comandos "unirse" funcione correctamente:
Si estoy haciendo esto manualmente, el código es como tal:
Tabla de datos ( "Sin título 322" ) << Unirse ( Tabla de datos ( "Sin título 318" ) ) ,
Fusionar columnas con el mismo nombre ,
Por columnas coincidentes ( : REPLICAR_ID = : REPLICAR_ID ) ,
Suelta múltiplos ( 1 , 1 ) ,
Nombre( "Incluir no coincidencias" )( 1 , 1 ) ,
Conservar el orden de la mesa principal ( 1 ) ,
Tabla de salida ( "Fusionado" )
Mi problema surge cuando intento codificar este formulario en varias tablas.Las tablas sin título (sin título 322, sin título 318, etc., puede haber más dependiendo de cuántos archivos abra) están designadas en mi código como. Así que quiero de alguna manera tomar mi máximoy unirse con todos los demás w.
Configuré algo de la siguiente manera:
Para (f = Tabla de datos, f >= 1, f--,
Try(v = w << Join( With(Data Table (f)),
*y el resto sigue las propiedades de la tabla de unión enumeradas anteriormente*
Sin embargo, mi código no funciona.¿Alguien tiene una idea de cómo puedo hacer esto?
Re: Combinar la configuración de JSL usando "Unirse"Pido disculpas, supongo que no estoy siendo claro:
Entiendo que necesito mantener abiertas las tablas que se agregaron a la lista; si comento Cerrar todo (Tablas de datos, no guardar) en mi código, obtengo
lo siguiente en mi registro (tengo una referencia a una tabla original que no debería estar en la lista de openDT y que se transfiere a los OT.Estoy seguro de que solo necesito un fxn cercano para esa mesa y podría resolverlo.He especificado previamente que la combinación funciona, pero no cómo quiero que funcione.

Pero en mi código donde tengo //invisible (para w = z << Split...), Quiero descomentar lo invisible, pero debido a que el fxn invisible solo reconoce la última tabla del ciclo y todas las demás se eliminan, necesito una forma de hacer referencia a estos y mantenerlos en una lista para poder referirme a ellos como un todo. (Cerrar todo también está comentado) ¿Cómo hago esto?

La invisibilidad es el problema, b/c a menos que descubra una forma de hacer referencia a cada tabla invisible, entonces no hay forma de que pueda fusionar varias tablas. Parece que tendré que mover el código Join al ciclo, pero no sé cómo incorporarlo si solo se está recorriendo una tabla a la vez y necesito hacer referencia al menos a dos.
Re: Combinar la configuración de JSL usando "Unirse"La invisibilidad no es el problema aquí. Las tablas invisibles se pueden referenciar y unir con otras tablas invisibles o visibles. Mesas cerradas e invisibles no son lo mismo. Las mesas cerradas son completamente inútiles, se han ido y olvidado. En el guión que ha colocado Cierra todo ( Tablas de datos , no guardar ) ; antes de la parte del código de fusión. Eso debería resultar en que todas las tablas se olviden y la combinación fallará. Espere hasta que haya terminado antes de cerrar mesas, invisibles o no.
O use mi enfoque anterior, es decir, abra una tabla una a la vez, haga la edición y división que desee, y luego combínelas con el MT actual antes de cerrar y pasar al siguiente archivo.
Re: Combinar la configuración de JSL usando "Unirse"Hmmm, aunque no puedo fusionar los archivos txt originales: estoy fusionando los archivos invisibles intermedios creados a partir de la división/formateo de los archivos txt originales.Como estos archivos son invisibles e intermedios, no hay un directorio raíz donde se guarden (el punto de por qué estoy usando la función invisible: ahorra espacios y tiempo). Sin embargo, entiendo lo que dices, aunque mis tablas están en la lista, están cerradas, por lo que no hay forma de hacer referencia a ellas, pero "abrirlas" no se aplica, ya que son archivos intermedios/invisibles creados a partir del archivo txt que son no se guarda ningún directorio.
Aquí está el desglose de lo que estoy haciendo:
1. Abro el código de los archivos txt que es similar al que tienes (Tendrá el nombre Tabla de datos ("Resultado 1"))
2. Reformateo estos archivos txt (no están en formato de columna, por lo que tengo código donde "divido", formateo, etc., en una tabla de datos más legible en JMP. - Llamaré a estas tablas INTERMEDIAS (Tendrán el nombre Data Table("Untitled1"))
3. estos archivos intermedios son invisibles (hay demasiados para hacerlos visibles) - No los guardo porque no quiero un directorio de archivos intermedios guardados que tenga que eliminar más tarde.
4. Mi problema es que intento fusionar las tablas intermedias.
Veo que sería más fácil simplemente unir los archivos originales, pero no vienen en un formato en el que pueda hacerlo, por lo tanto, mi enigma.
Entonces, el código que tengo (y mencionado anteriormente) funciona si mis tablas intermedias no son invisibles Y no cierro las tablas intermedias a las que me refiero para unirme (no funciona exactamente como lo quiero, pero no obstante funciona) - pero luego tengo TODAS las tablas abiertas: las fusionadas y las no fusionadas
Así que las verdaderas preguntas que tengo son:
a) Tengo tablas intermedias, esencialmente quiero que sean invisibles, pero para hacer referencia a ellas en las listas de MT/OT, tengo que hacerlas visibles para que esto funcione, aunque esencialmente quiero que sean invisibles.Así que mi verdadera pregunta es: ¿Cómo hago referencia a tablas intermedias invisibles en un bucle para reconocer cada tabla que se usará para un cálculo posterior (para usar las tablas de unión fxn parece que debo tenerlo fuera del bucle For para poder unir dos instancias del intermedio mesas)?
He adjuntado el guión.tal vez esto explique lo que estoy tratando de hacer.
Re: Combinar la configuración de JSL usando "Unirse"Parece que todas las tablas están cerradas antes de Join(). La lista de OT es solo una lista de referencias de tablas de datos. No son "objetos programables" si las tablas correspondientes no están.
Prueba algo como esto:
mi camino = "/Usuarios/.../Archivos/" ; // ruta al directorio de los archivos .txt
flist = Archivos en el directorio ( mi camino ) ; //Lista de todos los archivos
norte = N elementos ( flist ) ;
// Eliminar archivos que no sean de texto de flist
Para ( i = norte , i > 0 , i --,
Si ( Contiene ( flist [ i ] , ".TXT" ) == 0 ,
Eliminar de ( flista , i ) ;
norte --;
)
) ;
// Función para abrir archivos de texto (editar columna e importar configuraciones si es necesario)
abrir documento = Función ( { X } ,
Abierto (
mi camino || flist [ X ] ,
Importar ajustes (
Fin de la línea ( CRLF , RC , LF ) ,
Fin del campo ( Pestaña ) ,
Cotizaciones de tiras ( 1 ) ,
Usar apóstrofe como comillas ( 0 ) ,
Escanear todo el archivo ( 1 ) ,
Etiquetas ( 1 ) ,
Inicio de nombres de columna ( 1 ) ,
Inicios de datos ( 2 ) ,
Líneas para leer ( Todos ) ,
Regla del año ( "10-90" )
)
)
) ;
// Abre el primer archivo
MONTE = abrir documento ( 1 ) ;
//Unir todos los archivos en flist
Para ( i = 2 , i <= norte , i ++,
S T = abrir documento ( i ) ;
PIE = MONTE ;
MONTE = PIE << Unirse (
Con ( S T ) ,
Actualizar ,
Por columnas coincidentes ( : Columna_1 = : Columna_1 ) ,
Soltar múltiplos ( 1 , 0 ) ,
Nombre ( "Incluir no coincidencias" )( 1 , 1 ) ,
Conservar el orden de la mesa principal ( 1 ) ,
Tabla de salida ( "Fusionado" )
) ;
// Limpiar
Cerca ( S T , sin guardar ) ;
Cerca ( PIE , sin guardar ) ;
) ;
Re: Combinar la configuración de JSL usando "Unirse"De acuerdo, probé algo similar donde envié mis tablas abiertas a una lista:
Antes de este código, tengo un código donde se abren los archivos *txt (podría tener hasta más de 30 archivos) y convertirlos en una tabla de datos JMP (por lo tanto, salida de hasta más de 30 tablas).Entonces estoy tratando de fusionar todas estas tablas en una mesa sin embargo, algunos archivos pueden contener información duplicada que debe eliminarse; descubrí que puedo hacerlo usando la propiedad Unir tabla.Entonces, según el código a continuación.Obtuve con éxito 1 tabla = MT, y las otras están en una lista = OT.Quiero unirme a cada OT de la lista y unirlo a MT para obtener:
MT+OT(1) = MergedTable, luego MergedTable+OT(2) = MergedTable2, luego MergedTable2+OT(3) = MergedTable3, etc. hasta que obtenga una tabla maestra que contiene todos los datos (y las otras están cerradas)
openDT = Lista();
Para (f = 1, f <= N Tabla(), f++,
Insertar en(abrir IME, Tabla de datos(f)););
Mostrar (DT abierto);
MT = tabla de datos (1);
Cerrar (Tabla de datos (1), no guardar);
OT = Lista ();
Para(g = 1, g<= N Elementos(openDT) -1, g++,
Insertar en (OT, DataTable (g));
Cerrar todo (DataTables, nosave);
Mostrar (OT);
Mostrar (MT);
Para ( h = 1, h <= N elementos (OT), h ++,
MT << Unirse (Con (ST),
Actualizar,
Por columnas coincidentes (: Columna_1 =: Columna_1),
Soltar múltiplos (1,0),
Nombre("Incluir no coincidencias"))(1, 1),
Conservar el orden de la mesa principal(1),
Tabla de salida ("Fusionada")););
Continuar());
Cuando ejecuto el script, todo funciona bien hasta el comando Unir, donde aparece el siguiente error
"Enviar espera objeto programable{169} en acceso o evaluación de 'Enviar',"
Para( h = 1 , h <= N artículos ( OT ) , h ++,
Tm << /*###*/ Unirse (
Con (ST),
Actualizar ,
Por columnas coincidentes ( : Columna_1 = : Columna_1 ) ,
Suelta múltiplos ( 1 , 0 ) ,
Nombre( "Incluir no coincidencias" )( 1 , 1 ) ,
Conservar el orden de la mesa principal ( 1 ) ,
Tabla de salida ( "Fusionado" )) /*###*/ ;
Continuar();
¿Ayuda? Estoy golpeando mi cabeza contra la pared tratando de averiguar por qué esto no funciona
Re: Combinar la configuración de JSL usando "Unirse"Esto podría ayudarlo a comenzar como un ejemplo. No es perfecto ya que después de la ejecución también se cierra la última de las mesas abiertas...
Close All(data tables);
New Table("a") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 4, 5, 6]);
New Column("Label", Character) << Set Each Value("a");
New Table("b") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 7, 8, 9]);
New Column("Label", Character) << Set Each Value("b");
New Table("c") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 10, 11, 12]);
New Column("Label", Character) << Set Each Value("c");
New Table("d") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 13, 14, 15]);
New Column("Label", Character) << Set Each Value("d");
t_count = N Table();
dt_old = Data Table(t_count);
Show(dt_old << get name());
dt_new = Data Table(1);
For(i = 2, i <= t_count, i++,
dt_old = dt_new;
dt_new = dt_old << Join(
With(Data Table(i)),
Merge Same Name Columns,
By Matching Columns(:Column 1 = :Column 1),
Drop multiples(1, 1),
Name("Include non-matches")(1, 1)
);
Close(dt_old);
);