Problem beim Importieren von Daten aus einer TextdateiWir haben Probleme beim Datenimport aus einer Textdatei. Für einige Spalten wird eine Fehlermeldung angezeigt („Beim Importieren der Spalte sind ungültige Daten aufgetreten … Versuchen Sie, die Daten erneut zu importieren, aber legen Sie den Datentyp dieser Spalten explizit auf Zeichen fest“).
Zur Verdeutlichung: Wir verwenden ein JMP-Skript, mit dem Datenmengen aus einer Datenbank extrahiert werden. Nach dem Extrahieren werden die Daten mit Parametern in Spalten und Zeilen für jede Dateninstanz organisiert. Diese Parameter sind alle kategorisch, viele davon sind numerisch (und viele sind als Datum formatiert). Vor einigen Jahren baten wir um Hilfe bei der Verbesserung der Leistung (Zeit) für die Konvertierung aller Spalten in den entsprechenden Datentyp (die Verwendung des JMP-Skripts war aufgrund der Tausenden von Spalten sehr zeitaufwändig).
Jim Nelson schlug vor, die Tabelle als Textdatei zu speichern und dann erneut zu öffnen. Dies funktionierte einwandfrei und verbesserte die Leistung erheblich, da alle Spalten in numerische Werte umgewandelt wurden und das Datumsformat für die Datumsangaben beibehalten wurde.
Dies funktioniert nun nicht mehr und eine Fensterwarnung stoppt die Ausführung.
Ich habe in der Community nachgesehen und eine der vorgeschlagenen Methoden ausprobiert:
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>Dies ist nicht gut, da wir die Datumsformatierung verlieren und Spalten, die Datumsangaben enthalten sollten, im numerischen Format angezeigt werden.</P> <P>Kann jemand eine Problemumgehung vorschlagen?</P>
<LINGO-LABS id="lingo-labs-909378" slang="en-US" mode="CREATE">
<LINGO-LABEL>Automatisierung und Skripting</LINGO-LABEL>
</LINGO-LABS>
Betreff: Problem beim Importieren von Daten aus einer TextdateiWas hat sich geändert, sodass der Prozess nicht mehr funktioniert?
Welche JMP-Version verwenden Sie?
Welches Betriebssystem?
Können Sie ein Beispiel der Textdatei bereitstellen, die Sie einlesen, und des JSL, das Sie dafür verwenden?
Betreff: Problem beim Importieren von Daten aus einer TextdateiI'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);
Betreff: Problem beim Importieren von Daten aus TextdateienDas Skript funktioniert einwandfrei und JMP zeigt den Grund für die Protokollmeldung an.
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.
Das liegt an den fehlenden Zeichenwerten in der Spalte „Reaktor“. Um dies zu vermeiden, können Sie „Open“ mit „Log Capture()“ umschließen.
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);