Importación: un montón de col extra. ¿El usuario selecciona los que quiere?Buenos días,
Así que soy nuevo en jsl y estoy tratando de resolver esto. Los conjuntos de datos que obtengo de nuestros servidores tienen un montón de columnas adicionales, a menudo columnas que están en blanco. ¿Espero comenzar la mayoría de mis scripts con un cuadro de diálogo seleccionado por el usuario que les permita seleccionar / agregar / eliminar columnas de su elección y posiblemente reorganizarlas en un orden preferido? ¿Alguna ayuda?
Digamos que los coles son:
| Columna# | ColName | |
| 1 | fecha_exportación | |
| 2 | tipo de producto | |
| 3 | part_Number | |
| 4 | receta | |
| 5 | date_run | |
| 6 | tipo de medida | |
| 7 | Valor | |
| 8 | Herramienta | |
| 9 | Objetivo | |
De acuerdo, algunos de estos collares no son necesarios y todos están definitivamente fuera de orden, solo desde una perspectiva humana. Idealmente, me gustaría que el script seleccione automáticamente y ordene algo como:
Col #: 2, 8, 4, 5, 6, 7, 9
y luego tal vez tenga un cuadro de diálogo de usuario que le permita seleccionar cualquier otra columna para agregar a la salida reformateada si así lo desean.
¿Qué piensas?
Re: importación: un montón de col extra. ¿El usuario selecciona los que quiere?Suponiendo que entiendo su pregunta:
// Open Sample Data Table
dt = Open( "$SAMPLE_DATA\Air Traffic.jmp" );
// Define list of columns to delete
DelList = {"Carrier Code","Flight Number"};
// Delete Columns
dt << Delete Columns(DelList); Re: importación: un montón de col extra. ¿El usuario selecciona los que quiere?¡increíble! ¿Qué pasa con una lista predeterminada de nombres de columna? Al igual que mis tablas de datos, vienen con docenas o columnas adicionales (a menudo no vacías).
seleccione colname (crap1, crap2, crap3 ...)
eliminar columnas seleccionadas
luego continuar para permitir que el usuario seleccione el resto recortado?
Re: importación: un montón de col extra. ¿El usuario selecciona los que quiere?Aquí hay un fragmento de código que utilizo para crear una secuencia de comandos de tabla que eliminará columnas vacías cuando esté leyendo datos en:
// add a table script that will remove empty columns
dt << Set Property( "Remove Empty Columns",
dt = Current Data Table();
lstToDelete = {};
For (i=1,i<=NCols(dt),i++,
col = Column(dt,i);
If (Col Number(col)==0,
InsertInto(lstToDelete,i)
)
);
If (NItems(lstToDelete)>0,
dt << Delete Columns(lstToDelete)
);
);Re: importación: un montón de col extra. ¿El usuario selecciona los que quiere?Esto me gusta mucho, seleccionando los cols deseados, luego invirtiéndolos y eliminando los cols no deseados.
¿Tiene algún consejo para ejecutar un paso previo, donde puedo hacer una "eliminación" masiva de coles preespecificados para recortar la selección del usuario?
Desafortunadamente, mis archivos de datos vienen con unas pocas docenas de columnas innecesarias para cosas que no son necesarias.
¿Tal vez algo que podría escribir al comienzo de cada dt = open (), para eliminar las 'columnas innecesarias' conocidas?
Re: importación: un montón de col extra. ¿El usuario selecciona los que quiere?dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
// Get Column Names
ColNames = dt << Get Column Names("String");
// Open a window for user selection
NW1 = New Window("User Selection",
<< Modal,
V List Box(
Lineup Box(
Lb1 = List Box(ColNames);
)
),
H List Box(
Button Box("OK",
// Unload User Inputs
Rb1Val = Lb1 << Get Selected();
)
)
);
// Select Columns
for(i = 1, i <= N Items(ColNames), i ++,
If(Contains(Rb1Val,ColNames[i]),
Col = Column(dt,i); ;
Col << Set Selected(1);
);
);
// Delete Unwanted Columns
dt << Invert Column Selection ;
dt << Delete Columns ;Re: importación: un montón de col extra. ¿El usuario selecciona los que quiere?Esperemos que la naturaleza del formato de archivo extranjero sea estable. Puede intentar usar este argumento en la función Abrir () para importar:
Select Columns( "col", ... )
Suponiendo que almacenó la referencia de datos en una variable (como dt) cuando se abrió, puede reorganizar iterativamente las columnas usando este patrón:
dt << Go to Column( col ref ) // select column to move
<< Move Selected Columns( ... ) // move column to new location
<< Clear Column Selection; //
Espero que esta respuesta te ponga en marcha.
Re: importación: un montón de col extra. ¿El usuario selecciona los que quiere?Hola mark
Todas las buenas preguntas. Desearía poder escribir una consulta en la parte delantera, pero el DB de mi empresa está bloqueado. Tenemos que poner solicitudes y obtenemos un archivo .csv de Excel plano que tiene todas estas columnas innecesarias y encabezados mal nombrados en un orden que no coincide (como 35 columnas). Estoy trabajando para obtener acceso de solo lectura, pero ese es un problema diferente.
Re: importación: un montón de col extra. ¿El usuario selecciona los que quiere?¿Los archivos fuente son planos o relacionales? ¿Cuál es el tipo de archivo de origen? ¿Qué tipo de archivos estás importando? ¿Tienes que importar el archivo completo?
¿Puede consultar una base de datos para el resultado? Si es así, puedes crear una consulta para darte lo que quieres.