importa csv y solo cambia el formato de algunas columnasTengo algunos archivos csv que deben importarse y hay algunos campos que se correlacionan con las versiones de software. Sin embargo, están en el csv como xyz y no están encapsulados entre comillas, por lo que JMP intenta incorporarlo como un tipo de datos numérico. Cuando lo hace, JMP cree que el número es una fecha y lo convierte en una fecha, por lo que es muy difícil volver a convertirlo a una versión utilizable.
Si importo manualmente un archivo, puedo usar la vista previa para forzar las columnas que necesito a los tipos de datos que quiero. Sin embargo, el script de importación resultante tiene 'nueva columna ()' para cada columna, y tengo que omitir todo para que JMP solo importe el archivo O tenga las 186 columnas enumeradas solo para poder controlar la importación de algunos.
El verdadero problema es que algunos de estos archivos tienen columnas diferentes... algunos son comunes, otros no, pero en todos los casos las columnas de versión son comunes Y necesito controlar cómo se incorporan.
A continuación se muestra lo que me gustaría poder hacer (o algo así), pero el número total de columnas es realmente 186...
Open(
filepath,
columns(
New Column( "ALGORITHM_VERSION", Character, "Nominal" ),
New Column( "CLUST_ALG_VERSION", Character, "Nominal" ),
New Column( "CYTOFILEIO_VERSION", Character, "Nominal" ),
New Column( "RELEASE_VERSION", Character, "Nominal" )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
)
secuencias de comandosRe: importar csv y solo cambiar el formato de algunas columnasAquí hay una secuencia de comandos que debería funcionar para cambiar correctamente las columnas al carácter.
Names Default To Here( 1 );
dt = Open(
filepath,
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
For( i = 1, i <= N Cols( dt ), i++,
If(
Contains(
Uppercase( Column( dt, i ) << get name ),
"_VERSION"
) & Column( dt, i ) << get data type == "Numeric",
Column( dt, i ) << set format( "Fixed Dec", 18, 0 );
Column( dt, i ) << data type( "Character" );
)
);
Re: importar csv y solo cambiar el formato de algunas columnas¿Podrías usar una fórmula como
Char( Month( :colName ) ) || "." || Char( Day( :colName ) ) || "." ||
Char( Year( :colName ) )
volver a convertir?
Re: importar csv y solo cambiar el formato de algunas columnasMirando algunos de los diseños, eso funcionaría para algunos de ellos, pero no para todos. y, por supuesto, no sabré el diseño que estoy obteniendo hasta que se procese.
En este momento tenemos código para cada avenida de CSV y solo necesitamos enviar los archivos por la ruta correcta para que se manejen... pero dado que debería ser igual en un 90 % para todos ellos, parece una pena. no es una solución más dinámica.