¿Cómo actualizar automáticamente las filas con el nombre de archivo desde una importación dinámica de datos?Estoy trabajando en una secuencia de comandos que importa varios archivos de una carpeta a una sola tabla de datos. He creado una columna en la lista USP_ID, en la que me gustaría que el nombre de archivo aparezca en cada fila. Aunque los datos se importan correctamente, solo el nombre del archivo de Excel importado final se muestra en esta columna, mientras que me gustaría que cada nombre de archivo se muestre en las filas correspondientes a sus datos respectivos.
He enumerado mi script a continuación, con la línea que creo que me está causando problemas, aunque no tengo una pista para solucionarlo. Cualquier sugerencia será muy apreciada!
Names Default To Here( 1 );
Clear Symbols();
filelist = {};
filepath = Munger( Pick Directory( "Select the desired file directory" ), 1, "/", "" );
prefilelist = Files In Directory( filepath );
n2 = N Items( prefilelist );
For( i2 = 1, n2 >= i2, i2++,
file = (prefilelist[i2]);
If( Item( -1, prefilelist[i2], "." ) == "xlsm" | Item( -1, prefilelist[i2], "." ) == "xlsx",
Insert Into( filelist, file ),
Show( file )
);
);
nf = N Items( filelist );
cc_dt = New Table( "Combined data " );
cc_dt << New Column( "USP_ID", character, nominal );
For( iii = 1, iii <= nf, iii++,
filenow = (filelist[iii]);
fileopen = (filepath || filenow);
dt = Open( fileopen );
dt << Run Formulas();
cc_dt << Concatenate( Data Table( dt ), append to first table );
cc_dt:USP_ID << set each value( filenow ); // having issues with this I think?
Close( dt, nosave );
);
colList = cc_dt << get column names( character, string );
For( i = 1, i <= N Items( colList ), i++,
selRows = cc_dt << get rows where(
Column( cc_dt, colList[i] )[Row()] == "NaN" | Column( cc_dt, colList[i] )[Row()] == "0"
);
If( N Rows( selRows ) > 0,
Column( cc_dt, colList[i] )[selRows] = "0";
Column( cc_dt, colList[i] ) << data type( "numeric" ) << modeling type( "continuous" );
);
);Re: ¿Cómo actualizar automáticamente las filas con el nombre de archivo de una importación de datos dinámica?Hola melanie
Gracias por la ayuda, aunque no pude hacer que su recomendación funcionara como quería, descubrí que al asignar las columnas de la Fuente a las tablas de datos antes de concatenarlas, se lograría:
nf = N Items( filelist ); //number of items in the working list
cc_dt = New Table( "Combined fermenter data " );
cc_dt << New Column( "Source", character, nominal );
cc_dt << New Column( "USP_ID", character, formula( Substr( :Source, 1, 7 ) ) );
For( iii = 1, iii <= nf, iii++, //this starts the first loop
filenow = (filelist[iii]);
fileopen = (filepath || filenow);
dt = Open( fileopen );
dt << Run formulas();
dt << new column("Source", character, set initial data(filenow));
cc_dt << Concatenate( Data Table( dt ), append to first table );
close(dt, nosave);
);Re: ¿Cómo actualizar automáticamente las filas con el nombre de archivo de una importación de datos dinámica?cc_dt<SPAN class="token punctuation">:</SPAN>USP_ID <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> set each value</SPAN><SPAN class="token punctuation">(</SPAN> filenow <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
Establecer cada valor establece todos los valores de una columna en una constante. Así que con cada bucle, está configurando cada celda en esa columna al nombre de archivo actual. Deberá establecer solo las celdas "nuevas" de la tabla que se acaba de concatenar con el nombre del archivo. Tal vez algo como esto?
cc_dt << Seleccione Dónde (cc_dt: USP_ID == ""); // seleccionar celdas vacías, asumiendo que todas las celdas anteriores tienen sus valores de nombre de archivo
selrows = cc_dt << Obtener filas seleccionadas (); // obtener los números de fila que se seleccionan
cc_dt: USP_ID [selrows] = filenow; // establece solo esas filas en esa columna al nombre de archivo
HTH,
Melanie