Fusionar 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 "Unir" tablas de datos, esto elimina mejor las posibles entradas duplicadas que puedan 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 hago esto manualmente, el código es el siguiente:
Tabla de datos ( "Sin título 322" ) << Unirse ( Tabla de datos ( "Sin título 318" ) ) ,
Fusionar columnas del mismo nombre ,
Por columnas coincidentes ( : REPLICAR_ID = : REPLICAR_ID ) ,
Eliminar múltiples ( 1 , 1 ) ,
Nombre( "Incluir no coincidencias" )( 1 , 1 ) ,
Preservar 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. Entonces 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(Tabla de datos (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: Fusionar la configuración JSL usando "Unirse"Pido disculpas, creo 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, nosave) 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 sólo necesito un fxn cercano para esa mesa y podría resolverlo.Anteriormente especifiqué 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 bucle y todas las demás se eliminan, necesito una forma de hacer referencia a estos y mantenerlos en una lista para poder consultarlos como un todo. (Cerrar todo también está comentado) ¿Cómo hago esto?

La invisibilidad es el problema, b/c, a menos que encuentre una manera de hacer referencia a cada tabla invisible, entonces no hay forma de fusionar varias tablas. Parece que tendré que mover el código de unión al bucle, pero no sé cómo incorporarlo si solo recorre una tabla a la vez y necesito hacer referencia a al menos dos.
Re: Fusionar la configuración JSL usando "Unirse"La invisibilidad no es el problema aquí. Se puede hacer referencia a las tablas invisibles y unirlas con otras tablas invisibles o visibles. Las mesas cerradas y las invisibles no son lo mismo. Las mesas cerradas son completamente inútiles, desaparecieron y quedaron olvidadas. En el script que has colocado Cierra todo ( Tablas de datos , guardar ) ; antes de la parte del código de fusión. Eso debería dar como resultado que se olviden todas las tablas y la fusión fallará. Espere hasta que haya terminado antes de cerrar las mesas, invisibles o no.
O utilice mi enfoque anterior, es decir, abra una tabla una a la vez, realice las ediciones y divisiones que desee y luego combínelas con el MT actual antes de cerrar y pasar al siguiente archivo.
Re: Fusionar la configuración JSL usando "Unirse"Hmmm, aunque no puedo fusionar los archivos de texto originales. Estoy fusionando los archivos invisibles intermedios creados a partir de la división/formateo de los archivos de texto originales.Como estos archivos son invisibles e intermedios, no hay un directorio raíz donde se guardan (el motivo por el que estoy usando la función invisible es que ahorra espacios y tiempo). Sin embargo, entiendo lo que estás diciendo, 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 están no guardado es ningún directorio.
Aquí está el desglose de lo que estoy haciendo:
1. Abro el código de los archivos txt y es similar al que tienes (tendrá el nombre Tabla de datos ("Resultado1"))
2. Vuelvo a formatear estos archivos txt (no están en formato de columna, por lo que tengo un código donde los "divido", los formateo, etc., en una tabla de datos más legible en JMP. - Llamaré a estas tablas INTERMEDIAS (Tendrán el nombre Tabla de datos ("Sin título1"))
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 estoy intentando 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, de ahí mi enigma.
Entonces, el código que tengo (y al que hice referencia anteriormente) funciona si mis tablas intermedias no son invisibles Y no cierro las tablas intermedias a las que hago referencia para unirlas (tampoco funciona exactamente como lo quiero, pero de todos modos funciona) - pero luego tengo TODAS las tablas abiertas: las fusionadas y las no fusionadas
Entonces las verdaderas preguntas que tengo son:
a) Tengo tablas intermedias; básicamente quiero que sean invisibles, pero para hacer referencia a ellas en las listas MT/OT, tengo que hacerlas visibles para que esto funcione; básicamente, quiero que sean invisibles.Entonces mi verdadera pregunta es: ¿Cómo puedo hacer referencia a tablas intermedias invisibles en un bucle para reconocer cada tabla que se utilizará para cálculos adicionales (para usar el fxn de tablas de unión parece que debo tenerlo fuera del bucle For para poder unir dos instancias del intermedio? mesas)?
Adjunto el guión.tal vez esto explique lo que estoy tratando de hacer.
Re: Fusionar la configuración JSL usando "Unirse"Parece que todas las tablas están cerradas antes de Join(). La Lista OT es solo una lista de referencias de tablas de datos. No son "objetos programables" si las tablas correspondientes ya no existen.
Pruebe algo como esto:
mi camino = "/Usuarios/.../Archivos/" ; //ruta al directorio de los archivos.txt
lista = Archivos en el directorio ( mi camino ) ; //Lista de todos los archivos
norte = N artículos ( lista ) ;
// Elimina archivos que no sean de texto de flist
Para ( i = norte , i > 0 , i --,
Si ( Contiene ( lista [ i ] , ".TXT" ) == 0 ,
Eliminar de ( lista , i ) ;
norte --;
)
) ;
// Función para abrir archivos de texto (editar columnas e importar configuraciones si es necesario)
abrir documento = Función ( { X } ,
Abierto (
mi camino || lista [ X ] ,
Importar ajustes (
Fin de la línea ( CRLF , CR , LF ) ,
Fin del campo ( Pestaña ) ,
Cotizaciones de tira ( 1 ) ,
Utilice el apóstrofe como comillas ( 0 ) ,
Escanear todo el archivo ( 1 ) ,
Etiquetas ( 1 ) ,
Nombres de columnas Inicio ( 1 ) ,
Inicios de datos ( 2 ) ,
Líneas para leer ( Todo ) ,
Regla del año ( "10-90" )
)
)
) ;
//Abrir el primer archivo
MONTE = abrir documento ( 1 ) ;
//Unir todos los archivos en flist
Para ( i = 2 , i <= norte , i ++,
CALLE = abrir documento ( i ) ;
PIE = MONTE ;
MONTE = PIE << Unirse (
Con ( CALLE ) ,
Actualizar ,
Por columnas coincidentes ( : Columna_1 = : Columna_1 ) ,
Soltar múltiplos ( 1 , 0 ) ,
Nombre ( "Incluir no coincidencias" )( 1 , 1 ) ,
Preservar el orden de la mesa principal ( 1 ) ,
Tabla de salida ( "Fusionado" )
) ;
// Limpiar
Cerca ( CALLE , no guardar ) ;
Cerca ( PIE , no guardar ) ;
) ;
Re: Fusionar la configuración JSL usando "Unirse"Bien, probé algo similar donde envié mis tablas abiertas a una lista:
Antes de este código, tenía un código donde se abren archivos *txt (podría tener hasta más de 30 archivos) y se convierten en una tabla de datos JMP (por lo tanto, se generan hasta más de 30 tablas).Luego 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 demás 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 demás están cerradas)
openDT = Lista();
Para (f = 1, f <= N Tabla(), f++,
Insertar en (DT abierto, tabla de datos (f)););
Mostrar (openDT);
MT = Tabla de datos(1);
Cerrar (Tabla de datos (1), nosguard);
OT = Lista();
Para (g = 1, g<= N elementos (openDT) -1, g++,
Insertar en (OT, DataTable(g));
Cerrar todo (Tablas de datos, nosave);
Mostrar (OT);
Mostrar(MT);
Para (h = 1, h <= N elementos (OT), h++,
MT << Unirse(Con(ST),
Actualizar,
Al hacer coincidir columnas (:Columna_1 = :Columna_1),
Eliminar múltiplos (1,0),
Nombre("Incluir no coincidencias")(1, 1),
Preservar el orden de la mesa principal(1),
Tabla de salida ("Fusionada"););
Continuar());
Cuando ejecuto el script, todo funciona bien hasta el comando Unirse, donde aparece el siguiente error
"Enviar espera objeto programable{169} en el 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 ) ,
Eliminar múltiples ( 1 , 0 ) ,
Nombre( "Incluir no coincidencias" )( 1 , 1 ) ,
Preservar el orden de la mesa principal( 1 ) ,
Tabla de salida ( "Fusionado" )) /*###*/ ;
Continuar();
¿Ayuda? Me golpeo la cabeza contra la pared tratando de descubrir por qué esto no funciona.
Re: Fusionar la configuración JSL usando "Unirse"Esto podría ayudarle a comenzar como ejemplo. No es perfecto ya que después de la ejecución la última de las mesas abiertas también se cierra...
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);
);