Concatenar tablas y cerrar los archivos de entradaBusco la manera de cerrar las mesas que estan abiertas y han servido para entrada
Para( f2 = 1, f2 < N Elementos( Tablas ), f2++,
ConcTable = Tablas[f2] << /*###*/Concatenar(
Tablas[f2 + 1],
Nombre de la tabla de salida ("Ambos")
) /*###*/;
Cerrar (lista de archivos [f2], No Guardar);
);
La respuesta en el registro es:
Enviar espera objeto programable en acceso o evaluación de 'Enviar', Tablas[f2] << /*###*/Concatenar( Tablas[f2 + 1], Nombre de tabla de salida( "Ambos") ) /*###* /
Re: Concatenar tablas y cerrar los archivos de entrada
@rc_hertzy escribió:
Buena solución. Primero, un error tipográfico (signo igual, no menos): la cuarta línea debe ser
dt=tabla de datos(1);
Ahora, ¿cómo puedo mantener una columna para la fuente? Si simplemente agrego
Crear columna de origen
en la instrucción Concatenar, obtengo columnas de origen sucesivas, y ninguna es lo que quiero: enumera todos los archivos de origen.
Relacionado: cuando concatené archivos manualmente y copié el script de origen del archivo de salida a una ventana de script, no se ejecutó y dio el error de no encontrar los nombres de archivo enumerados. Aquí está el script ( File1.jmp es el archivo abierto seleccionado):
dt = Tabla de datos actuales ();
dt << Concatenar (
Tabla de datos ( "Archivo2.jmp" ),
Tabla de datos ( "Archivo3.jmp" ),
Tabla de salida ( "Combinedtest.jmp" ),
Crear columna de origen
);
Gracias. -Almiar
Encontré mi error en la última parte. Cambié el nombre de un archivo de datos, por lo que, por supuesto, el script no pudo encontrarlo.
Aún así, me gustaría una forma de modificar su solución para agregar una columna de origen, por lo que no necesito enumerar explícitamente todos los archivos abiertos. Gracias.
Re: Concatenar tablas y cerrar los archivos de entradaBuena solución. Primero, un error tipográfico (signo igual, no menos): la cuarta línea debe ser
dt=tabla de datos(1);
Ahora, ¿cómo puedo mantener una columna para la fuente? Si simplemente agrego
Crear columna de origen
en la instrucción Concatenar, obtengo columnas de origen sucesivas, y ninguna es lo que quiero: enumera todos los archivos de origen.
Relacionado: cuando concatené archivos manualmente y copié el script de origen del archivo de salida a una ventana de script, no se ejecutó y dio el error de no encontrar los nombres de archivo enumerados. Aquí está el script ( File1.jmp es el archivo abierto seleccionado):
dt = Tabla de datos actuales ();
dt << Concatenar (
Tabla de datos ( "Archivo2.jmp" ),
Tabla de datos ( "Archivo3.jmp" ),
Tabla de salida ( "Combinedtest.jmp" ),
Crear columna de origen
);
Gracias. -Almiar
Re: Concatenar tablas y cerrar los archivos de entradaaquí hay un método simple para concatenar las tablas y cerrar las que no son necesarias
Names Default To Here( 1 );
Final_Table="Data_" || char(ntable);
// Concatenate the tables and delete them. Add all of the tables to the first table
dt-data table(1);
For( i = 2, i <= N Table(), i++,
dt << concatenate(data table(i), append to first table(1));
close(data table(i), nosave);
);
// Rename the table to the desired name
dt << set name(Final_Table);
Re: Concatenar tablas y cerrar los archivos de entradaJim,
Si observa las dos tablas adjuntas, tienen el mismo número de columnas y nombres de columnas. Lo único que diferencia a ambos es el número de filas. La columna n.º 1 es la marca de tiempo y, según esto, se eliminarán los duplicados.
El método como funciona con guión. Estoy buscando una forma eficiente de guardar la mesa final y cerrar las mesas que han sido la entrada para la final.
Atentamente,
cristiano
Re: Concatenar tablas y cerrar los archivos de entrada¿Puede proporcionar una muestra de sus tablas de datos y una ilustración de lo que se consideraría filas duplicadas?
Re: Concatenar tablas y cerrar los archivos de entradaJaime, gracias por la respuesta. Permítanme ampliar un poco más. El objetivo es concatenar una lista de tablas de datos y eliminar filas dobles. Se cerrarán todas las tablas de datos que hayan contribuido a la tabla concatenada final. El número de tablas de datos de entrada es variable. La selección de las tablas de datos a concatenar sigue la regla de que las cadenas iniciales son iguales y el nombre final de la tabla de datos concatenada es la misma cadena.
Aquí ahora el código para la concatenación y la eliminación de doble fila además de guardar la tabla final.
Si (N elementos (lista de archivos)> 0,
para (nu_t = 1, nu_t <= num_tables, nu_t++,
FinalTable = Munger(lista de archivos[1],6,4);
Final_Table = "Data_"||FinalTable||".jmp";
//Mostrar(TablaFinal);
para (f2 = 1, f2 < nitems(Tablas), f2++,
ConcTable = Tables[f2] << Concatenate(Tables[f2+1], Output Table Name( "Both" ) );
Cerrar (Tablas [f2], No Guardar);
);
// Eliminar filas dobles
ConcTable = Tabla de datos actuales ();
col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( ConcTable << obtener nombres de columnas( string ), "\!"), :Name(\!"" ) || "\!"))" );
duplicados = [];
Para cada fila (Si (col_min! = Fila (), duplicados |/= Fila ()));
ConcTable << eliminar filas (duplicados);
ConcTable << Save(Path_datatable_out||Final_Table);
//For(cc=1,cc <= nitems(Tables),cc++, Close(Tables[cc], No Save));
);
); // Si Condición
Espero ansioso tu respuesta.
cristiano
Re: Concatenar tablas y cerrar los archivos de entradaAquí hay un fragmento de código que funcionará y sigue la lógica de lo que ha especificado. Sin embargo, no entiendo por qué querrías hacer esto... así que tal vez el resultado no sea el que estás imaginando. Si no responde con lo que se supone que es el resultado final.
Names Default To Here( 1 );
// Create sample tables
dt = Open( "$SAMPLE_DATA\big class.jmp" );
dt << subset( selected rows( 0 ), selected columns( 0 ), by( :age ) );
Close( dt, nosave );
// Create your Tables list
Tables = {};
For( i = 1, i <= N Table(), i++,
Insert Into( Tables, Data Table( i ) << get name )
);
// Run the concatinations
For( f2 = 1, f2 < N Items( Tables ), f2++,
ConcTable = Data Table( Tables[f2] ) << Concatenate( Data Table( Tables[f2 + 1] ), Output Table Name( "Both" ) );
Close( Data Table( Tables[f2] ), No Save );
);