Copiar columnas, nombres de columnas y nombres de tablas en una tabla nueva<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola,
Tengo algunos problemas para copiar columnas de varias tablas de datos en una nueva tabla en blanco. Todas las tablas de datos que se van a abrir tienen los mismos nombres de columna.
Hasta ahora, puedo abrir varias tablas, pero solo puedo copiar columnas de una de las últimas tablas de datos abiertas.
Aquí está mi código a continuación:
Nombres predeterminados hasta aquí ( 1 ) ;
// Use 'PickFile()' para obtener una lista de archivos para abrir (solo Windows)
lista de archivos = Seleccionar archivo (
"Seleccione uno de más archivos" , // Inmediato
"$ESCRITORIO" , // Carpeta inicial
{ "Archivos JMP|jmp;jsl;jrn;csv" , "Todos los archivos|*" } , // Lista de filtros de archivos para aplicar (ignorado por OS/X)
1 , // Filtro de archivo inicial a aplicar (índice de elemento en la lista anterior)
0 , // Indicador de guardar: especifique una ventana 'Guardar' o 'Abrir'. Establezca un valor de 1 o 0 respectivamente.
Vacío () , // archivo predeterminado
múltiple // Múltiple: permite abrir más de un archivo (OS/X lo ignora)
) ;
// Si solo se selecciona un archivo, la lista de archivos no será una lista, por lo que debemos crearla nosotros mismos
Si ( ! es lista ( lista de archivos ) ,
lista de archivos = Lista de evaluación ( { lista de archivos } )
) ;
// Abre los archivos y almacena sus nombres de tabla JMP correspondientes
nombres de tablas = {} ;
Para ( F = 1 , F <= N elementos ( lista de archivos ) , F ++,
dt = Abierto ( lista de archivos [ F ] ) ;
Insertar en ( nombres de tabla , dt << obtenerNombre ) ;
) ;
//Crear Column Copier para copiar archivos
col_dlg = nueva ventana ( "Copiadora de columna" ,
caja de panel ( "Seleccione cuatro columnas para crear una nueva tabla con:" ,
col_clist = collistbox ( todo , ancho ( 200 ) , máximo seleccionado ( 4 )) ,
) ,
botonera ( "DE ACUERDO" ,
lista_columna_seleccionada = col_clist << se selecciona ;
col1 = lista_columna_seleccionada [ 1 ] ;
col2 = lista_columna_seleccionada [ 2 ] ;
col3 = lista_columna_seleccionada [ 3 ] ;
col4 = lista_columna_seleccionada [ 4 ] ;
// Crea una nueva tabla usando solo las dos columnas seleccionadas
dt2 = dt << Subconjunto ( columnas ( columna ( dt , col1 ) , columna ( dt , col2 ) , columna ( dt , col3 ) , columna ( dt , col4 ) ) ) ;
col_dlg << Cerrar ventana ;
)
) ;
Nota: La nueva tabla de datos que se crea es un subconjunto de la última tabla de datos abierta desde la tabla de datos múltiples. capaz. Me gustaría poder elegir cualquier copia de cualquier columna de cualquiera de las tablas de datos en la nueva. Gracias.
Re: Copiar columnas, nombres de columnas y nombres de tablas en una tabla nuevaMuchas gracias, eso funcionó. Supuse que ese era el problema, solo una última ayuda. La concatenación era vertical. Intento concatenar horizontalmente la tabla de datos. Así que usé "Unir" en lugar de "concatenar", pero abre 2 tablas de datos separadas en lugar de combinarlas.
Re: Copiar columnas, nombres de columnas y nombres de tablas en una tabla nuevaEl error... que fue mi error... está en la línea
Insertar en (tableNames, dt << getName);
La línea debe leer:
Insertar en (tableNames, dttemp << getName);
Re: Copiar columnas, nombres de columnas y nombres de tablas en una tabla nuevaRevisé la tabla de datos pero todavía solo abrí una. Aquí está el error que obtuve del registro a continuación:
Nombre no resuelto: dt en acceso o evaluación de 'dt', dt/*###*/
En el siguiente script, error marcado por /*###*/
Nombres predeterminados hasta aquí ( 1 );
fileList = Seleccionar archivo (
"Seleccione uno de más archivos",
"$ESCRITORIO",
{"Archivos JMP|jmp;jsl;jrn;csv", "Todos los archivos|*"},
1,
0,
Vacío(),
múltiple
);
If( !Es Lista( listaArchivos ),
lista de archivos = Lista de evaluación ( {lista de archivos} )
);
nombres de tabla = {};
For( f = 1, f <= N elementos( listaarchivos ), f++,
dttemp = Abrir (lista de archivos);
Insertar en (tableNames, dt/*###*/ <
Si( f == 1,
dt = dttemp,
dt << concatenar( dttemp, añadir a la primera tabla( 1 ) );
Cerrar( dttemp, nosave );
);
);
col_dlg = Nueva Ventana( "Copiadora de Columnas",
Panel Box( "Seleccione cuatro columnas para crear una nueva tabla con:",
col_clist = Cuadro de lista de columnas (todos, ancho (200), máximo seleccionado (4))
),
Cuadro de botones ("OK",
lista_columnas_seleccionadas = lista_columnas << se selecciona;
col1 = lista_columnas_seleccionadas[1];
col2 = lista_columnas_seleccionadas[2];
col3 = lista_columnas_seleccionadas[3];
col4 = lista_columnas_seleccionadas[4];
dt2 = dt << Subconjunto(
columnas (
Columna (dt, col1),
Columna (dt, col2),
Columna (dt, col3),
Columna (dt, col4)
)
);
col_dlg << cerrar ventana;
)
Re: Copiar columnas, nombres de columnas y nombres de tablas en una tabla nuevaModifiqué el código, para leer en cada uno de los 4 archivos y agregarlos al primer archivo.Por lo tanto, el resultado final debería ser que solo tiene un archivo, pero todos los datos de cada uno de los archivos están en él.
No pude probar completamente su código, por lo que puede haber un pequeño problema.El único código que cambié estaba en el bucle For.Vuelva a ejecutar el código y luego mire en el registro View==>Log y vea cuál es el error.Además, verifique la tabla de datos y verifique que todos los datos hayan llegado a la tabla de datos.
Re: Copiar columnas, nombres de columnas y nombres de tablas en una tabla nuevaHola Jim,
Gracias por la ayuda pero sigue sin funcionar. Cuando ejecuto el nuevo código esta vez, la copiadora de columnas no aparece y aparece el único archivo que quiero abrir.
Re: Copiar columnas, nombres de columnas y nombres de tablas en una tabla nuevaEl siguiente código lee cada archivo y luego los concatena en una tabla de datos, que luego es procesada por su copiadora de columnas
Nombres predeterminados hasta aquí ( 1 ) ;
// Use 'PickFile()' para obtener una lista de archivos para abrir (solo Windows)
lista de archivos = Seleccionar archivo (
"Seleccione uno de más archivos" , // Inmediato
"$ESCRITORIO" , // Carpeta inicial
{ "Archivos JMP|jmp;jsl;jrn;csv" , "Todos los archivos|*" } , // Lista de filtros de archivos para aplicar (ignorado por OS/X)
1 , // Filtro de archivo inicial a aplicar (índice de elemento en la lista anterior)
0 , // Indicador de guardar: especifique una ventana 'Guardar' o 'Abrir'. Establezca un valor de 1 o 0 respectivamente.
Vacío () , // archivo predeterminado
múltiple // Múltiple: permite abrir más de un archivo (OS/X lo ignora)
) ;
// Si solo se selecciona un archivo, la lista de archivos no será una lista, por lo que debemos crearla nosotros mismos
Si ( ! es lista (lista de archivos) ,
lista de archivos = Lista de evaluación ( {lista de archivos} )
) ;
// Abre los archivos y almacena sus nombres de tabla JMP correspondientes
nombres de tabla = {} ;
Para ( f = 1 , F <= N artículos (lista de archivos) , F ++,
dttemp = Abierto ( lista de archivos);
Insertar en ( nombres de tabla , dt << obtenerNombre ) ;
// Agrega las tablas de datos juntas
Si ( f == 1 ,
dt = dttemp ,
dt << concatenar ( dttemp , agregar a la primera tabla ( 1 ) ) ;
Cerca ( dttemp , no guardar) ;
) ;
) ;
//Crear Column Copier para copiar archivos
col_dlg = Nueva ventana ( "Copiadora de columna" ,
caja de paneles ( "Seleccione cuatro columnas para crear una nueva tabla con:" , col_clist = Cuadro de lista de columnas ( todo , ancho( 200 ) , máximo seleccionado ( 4 ) ) , ) ,
Caja de botones ( "DE ACUERDO" ,
lista_columna_seleccionada = col_clist << se selecciona;
col1 = lista_columna_seleccionada[ 1 ] ;
col2 = lista_columna_seleccionada[ 2 ] ;
col3 = lista_columna_seleccionada[ 3 ] ;
col4 = lista_columna_seleccionada[ 4 ] ;
// Crea una nueva tabla usando solo las dos columnas seleccionadas
dt2 = dt << Subconjunto (columnas( Columna ( dt , columna1) , Columna ( dt , col2) , Columna ( dt , col3) , Columna ( dt , columna4 ) ) ) ;
col_dlg << Cerrar ventana;
)
) ;