Problème d'importation de données à partir d'un fichier texteNous rencontrons des problèmes lors de l'importation de données depuis un fichier texte. Un message d'erreur s'affiche pour certaines colonnes (« Données non valides rencontrées lors de l'importation de la colonne... Réessayez d'importer les données, mais définissez explicitement le type de données de ces colonnes sur Caractère »).
Pour plus de clarté, nous utilisons un script JMP pour extraire un ensemble de données d'une base de données. Après l'extraction, les données sont organisées avec des paramètres en colonnes et en lignes pour chaque instance de données. Ces paramètres sont tous catégoriques, mais beaucoup sont numériques (et beaucoup sont formatés en date). Il y a quelques années, nous avons demandé de l'aide pour améliorer les performances (temps) de conversion de toutes les colonnes au type de données approprié (l'utilisation du script JMP prenait beaucoup de temps en raison des milliers de colonnes).
Jim Nelson a suggéré d'enregistrer le tableau au format texte, puis de le rouvrir. Cela a bien fonctionné, améliorant considérablement les performances, convertissant toutes les colonnes en numériques et conservant le format de date pour celles qui sont des dates.
Maintenant, cela ne fonctionne plus, et une fenêtre d'alerte arrête l'exécution.
J'ai regardé dans la communauté, j'ai essayé une méthode suggérée :
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>Ce n'est pas bon car nous perdons le formatage des dates, donc les colonnes qui devraient être des dates apparaissent au format numérique.</P> <P>Quelqu'un pourrait-il suggérer une solution de contournement ?</P>
<LINGO-LABS id="lingo-labs-909378" slang="en-US" mode="CREATE">
<LINGO-LABEL>Automatisation et scripts</LINGO-LABEL>
</LINGO-LABS>
Re : Problème d'importation de données à partir d'un fichier texteQu’est-ce qui a changé et qui a empêché le processus de fonctionner ?
Quelle version de JMP utilisez-vous ?
Quel système d'exploitation ?
Pouvez-vous fournir un échantillon du fichier texte que vous lisez et du JSL que vous utilisez pour le faire ?
Re : Problème d'importation de données à partir d'un fichier texteI'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: Problème d'importation de données à partir d'un fichier texteLe script fonctionne parfaitement et JMP indique bien la raison du message de journalisation.
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.
Cela est dû aux valeurs de caractères manquantes dans la colonne Réacteur. Pour éviter cela, vous pouvez utiliser la fonction Open avec 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);