¡Hola!
Mi secuencia de comandos actual para abrir un directorio que contiene archivos CSV y concatenarlos en un archivo maestro no funciona, y esperaba obtener información sobre el motivo. Ya especifiqué las variables directorio y archivos, y el ciclo parece terminar después de tomar el primer archivo, cuando hay 4 en la carpeta. Además, ¿existe una secuencia de comandos para leer el nombre del archivo CSV y usarlo para completar una nueva columna?
Para (yo = 1 , yo < N artículos (archivos), i++,
estaTabla = Abierto (dir || archivos[i]);
// crea una nueva columna para indicar SD ID
Nueva columna ( "EX801.SD.ID" ,Carácter, Respuesta Múltiple);
Por cada fila (:EX801.SD.ID = "Ejecutar1" ); // atascado al ingresar la ID de la SD - ¡necesita el nombre del archivo!
estaTabla << Mover columnas seleccionadas ( {:EX801.SD.ID}, A primero );
// elimina las columnas "......PV"
Para (yo = N Cols (esta tabla), i > 32 , i--, // Se necesitan las primeras 32 columnas
estaTabla << eliminar columnas ( Columna (i));
);
// agrega "I" delante de cada nombre de columna para que coincida con el nombre de la columna más adelante
Para (yo = 3 , yo <= 32 , yo ++,
Columna (estaTabla, i) << Escoger un nombre ( "I" || ( Columna (estaTabla, i) << Obtener nombre ) );
);
dt << Concatenar (Esta mesa, "Agregar a la primera tabla" );
Cerrar (estaTabla);
dt << Seleccione dónde ( Está perdido (:TIEMPO)) << Eliminar filas ;
);
¡Muchas gracias por esta opción! Sin embargo, parece que no puedo limpiarlo usando un script de bucle después de importar los archivos. ¿Alguna sugerencia de por qué es esto?
// importar archivos csv de la carpeta seleccionada
estaTabla = Importación de múltiples archivos (
<< Establecer carpeta (directorio),
<< Establecer filtro de nombre ( "*.*;" ),
<< Establecer nombre Habilitar ( 0 ),
<< Establecer filtro de tamaño ( { 254056 , 261197 } ),
<< Establecer tamaño Habilitar ( 0 ),
<< Establecer filtro de fecha ( { 3632893806 , 3633422386 } ),
<< Establecer fecha Habilitar ( 0 ),
<< Establecer agregar columna de nombre de archivo ( 1 ),
<< Establecer agregar columna de tamaño de archivo ( 0 ),
<< Establecer columna de fecha de agregar archivo ( 0 ),
<< Establecer modo de importación ( "Datos CSV" ),
<< Establecer juego de caracteres ( "Mejor conjetura" ),
<< Establecer modo de apilamiento ( "Pila similar" ),
<< Establecer CSV tiene encabezados ( 1 ),
<< Establecer CSV Permitir numérico ( 1 ),
<< Establecer la primera línea de encabezado CSV ( 1 ),
<< Establecer número CSV de líneas de encabezado ( 1 ),
<< Establecer la primera línea de datos CSV ( 2 ),
<< Establecer coma CSV EOF ( 1 ),
<< Establecer pestaña CSV EOF ( 0 ),
<< Establecer espacio CSV EOF ( 0 ),
<< Establecer espacios CSV EOF ( 0 ),
<< Establecer CSV EOF Otro ( "" ),
<< Establecer CSV EOL CRLF ( 1 ),
<< Establecer CSV EOL CR ( 1 ),
<< Establecer CSV EOL LF ( 1 ),
<< Establecer punto y coma CSV EOL ( 0 ),
<< Establecer CSV EOL Otro ( "" ),
<< Establecer cotización CSV ( "\!"" ),
<< Establecer escape CSV ( "" )
) << Datos de importacion ;
estaTabla << Mover columnas seleccionadas ( {:Nombre de archivo}, Al primero );
// elimina las columnas "......PV" // atrapado aquí
Para (k = N Cols (estaTabla), k > 32 , k--, // Se necesitan las primeras 32 columnas
estaTabla << Eliminar columnas ( Columna (k));
);
Su problema es que está utilizando la variable "i" en dos bucles For, donde un bucle For está dentro del otro... por lo tanto, su valor de "i" no se incrementa adecuadamente para el bucle externo.
Cambié la variable Loop para los bucles internos en el siguiente script.Esta podría ser tu solución
For( i = 1, i < N Items( files ), i++,
thisTable = Open( dir || files[i] );
// creates new column to indicate SD ID
New Column( "EX801.SD.ID", Character, Multiple Response );
For Each Row( :EX801.SD.ID = "Run1" ); // stuck at inputing SD ID - need file name!
thisTable << Move Selected Columns( {:EX801.SD.ID}, To First );
// deletes columns "......PV"
For( k = N Cols( thisTable ), k > 32, k--, // 1st 32 columns are needed
thisTable << delete columns( Column( k ) );
);
// adds "I" in front of each column name to be matched with column name later
For( k = 3, k <= 32, k++,
Column( thisTable, k ) << Set Name( "I" || (Column( thisTable, k ) << Get Name) );
);
dt << Concatenate( thisTable, "Append to First Table" );
Close( thisTable );
dt << Select Where( Is Missing( :TIME ) ) << Delete Rows;
);
Si está utilizando JMP 14, es posible que pueda utilizar la función Importación de archivos múltiples().