Problema con l'importazione dei dati dal file di testoStiamo riscontrando problemi con l'importazione dei dati da file di testo. Ora, abbiamo un messaggio di errore per alcune colonne ("Dati non validi rilevati durante l'importazione della colonna... Provare a importare nuovamente i dati, ma impostare esplicitamente il tipo di dati di quelle colonne su Carattere").
Per chiarire meglio, utilizziamo lo script JMP che viene utilizzato per estrarre una serie di dati da un database. Dopo l'estrazione, i dati vengono organizzati con parametri in colonne e righe per ogni istanza di dati. Questi parametri sono tutti categorici, ma ce ne sono molti numerici (e molti sono formattati come Data). Alcuni anni fa, abbiamo chiesto aiuto per migliorare le prestazioni (in termini di tempo) per convertire tutte le colonne nel tipo di dati appropriato (utilizzare lo script JMP richiedeva molto tempo a causa delle migliaia di colonne).
Jim Nelson ha suggerito di salvare la tabella come file di testo e poi riaprirla. Questa soluzione ha funzionato perfettamente, migliorando notevolmente le prestazioni, convertendo in numeri tutte le colonne e mantenendo il formato data per quelle che contengono date.
Ora, questa operazione non funziona più e una finestra di avviso interrompe l'esecuzione.
Ho cercato nella community e ho provato uno dei metodi suggeriti:
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>Questo non è un bene perché perdiamo la formattazione della data, quindi le colonne che dovrebbero contenere date vengono visualizzate in formato numerico.</P> <P>Qualcuno potrebbe suggerire una soluzione alternativa?</P>
<LINGO-LABS id="lingo-labs-909378" slang="en-US" mode="CREATE">
<LINGO-LABEL>Automazione e scripting</LINGO-LABEL>
</LINGO-LABS>
Re: Problema con l'importazione di dati da file di testoCosa è cambiato e ha impedito al processo di funzionare?
Quale versione di JMP stai utilizzando?
Quale sistema operativo?
Puoi fornire un esempio del file di testo che stai leggendo e del JSL che stai utilizzando per farlo?
Re: Problema con l'importazione di dati da file di testoI'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 con l'importazione di dati da file di testoLo script funziona perfettamente e JMP ti dice il motivo del messaggio di 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.
Ciò è dovuto ai valori dei caratteri MANCANTI nella colonna Reactor. Se si desidera evitarlo, è possibile racchiudere Open con Log Capture().
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);