Problema al importar datos desde un archivo de textoTenemos problemas al importar datos desde un archivo de texto. Ahora, recibimos un mensaje de error para algunas columnas ("Datos no válidos al importar la columna... Intente importar los datos de nuevo, pero configure explícitamente el tipo de datos de esas columnas como Carácter").
Para mayor claridad, utilizamos un script JMP para extraer una gran cantidad de datos de una base de datos. Tras la extracción, los datos se organizan con parámetros en columnas y filas para cada instancia. Todos estos parámetros son categóricos, pero muchos son numéricos (y muchos tienen formato de fecha). Hace algunos años, solicitamos ayuda para mejorar el rendimiento (tiempo) al convertir todas las columnas al tipo de dato adecuado (usar un script JMP requería mucho tiempo debido a las miles de columnas).
Jim Nelson sugirió guardar la tabla como archivo de texto y volver a abrirla. Esto funcionó correctamente, mejorando notablemente el rendimiento, convirtiendo todas las columnas a formato numérico y conservando el formato de fecha para las que son fechas.
Ahora, esto ya no funciona y una ventana de alerta detiene la ejecución.
Busqué en la comunidad y probé un método sugerido:
collist = dt << Get Column Names("String");
For Each({colname}, collist,
r = Column(dt, colname) << Set Data Type("Numeric", << Fail On Conversion Error, <
<RETURN failed="" rows=""></RETURN>
<P>Esto no es bueno porque perdemos el formato de fecha, por lo que las columnas que deberían ser fechas aparecen en formato numérico.</P> <P>¿Podría alguien sugerir una solución alternativa?</P>
<LINGO-LABS id="lingo-labs-909378" slang="en-US" mode="CREATE">
<LINGO-LABEL>Automatización y scripting</LINGO-LABEL>
</LINGO-LABS>
Re: Problema al importar datos desde un archivo de texto¿Qué cambió que impidió que el proceso funcionara?
¿Qué versión de JMP estás usando?
¿Qué sistema operativo?
¿Puedes proporcionarnos una muestra del archivo de texto que estás leyendo y el JSL que estás usando para hacerlo?
Re: Problema al importar datos desde un archivo de textoI'm using JMP PRO ver 18.0.0 (JMP normal show the same behavior).
Operating system : Windows 10 Enterprise
What I changed is the instruction open("C:\TEMP\jmp_conversion.csv", columns(LOT_ID=character), scan whole file(1));
where I added the clause columns(LOT_ID=character). Without this change it works (but in some specific case the lot_id is converted numeric in scientific notation: the reason for the change).
Consider that if you run just the following script you do not receive the blocking alert but a message in the log. (I don't know why)
numeric_conversion = function({dt},{Default Local},
n= dt << get name();
try(delete file("C:\TEMP\jmp_conversion.csv"));
dt << save as("C:\TEMP\jmp_conversion.csv");
close(dt,nosave);
try(
dt= open("C:\TEMP\jmp_conversion.csv", columns(LOT_ID=character), scan whole file(1));
);
dt << set name(n);
return(dt);
);
dt= data table("ExtractedData");
dt = dt << split(
split( :VALUE ),
split by( :PARAM ),
group( :LOT_ID, :WAFER_NO ),
remaining Columns( Keep All ),
);
dt = numeric_conversion(dt);
Re: Problema al importar datos desde un archivo de textoEl script funciona correctamente y JMP te indica el motivo del mensaje de registro.
Invalid data encountered while importing the column Reactor.
25 values were set to missing.
Try importing the data again, but explicitly set the Data Type of those columns to Character.
Esto se debe a los valores de caracteres faltantes en la columna Reactor. Si desea evitarlo, puede usar Log Capture() en lugar de Open.
Names Default To Here(1);
numeric_conversion = Function({dt_split}, {Default Local},
n = dt_split << get name();
Try(Delete File("C:\TEMP\jmp_conversion.csv"));
dt_split << Save As("C:\TEMP\jmp_conversion.csv");
Close(dt_split, nosave);
Log Capture(dt_split = Open("C:\TEMP\jmp_conversion.csv", columns(LOT_ID = character), scan whole file(1)));
dt_split << set name(n);
Return(dt_split);
);
dt = Open("$DOWNLOADS/ExtractedData.jmp");
dt_split = dt << split(split(:VALUE), split by(:PARAM), group(:LOT_ID, :WAFER_NO), remaining Columns(Keep All), Output table("ExtractedData Split"));
Close(dt, no save);
dt_split = numeric_conversion(dt_split);