Ich habe einige CSV-Dateien, die importiert werden müssen, und es gibt einige Felder, die mit Softwareversionen korrelieren. Sie befinden sich jedoch wie xyz in der CSV-Datei und sind nicht in Anführungszeichen gekapselt, sodass JMP versucht, sie als numerischen Datentyp einzufügen. Wenn dies der Fall ist, glaubt JMP, dass es sich bei der Zahl um ein Datum handelt, und konvertiert sie in ein Datum, sodass es sehr schwierig ist, sie wieder in eine verwendbare Version zu konvertieren.
Wenn ich eine Datei manuell importiere, kann ich die Vorschau verwenden, um die Spalten, die ich benötige, auf die gewünschten Datentypen zu zwingen. Das resultierende Importskript hat jedoch 'new column()' für jede einzelne Spalte, und ich muss entweder das Ganze weglassen, damit JMP nur die Datei importiert, ODER alle 186 Spalten auflisten lassen, nur damit ich den Import einiger weniger steuern kann.
Das eigentliche Problem besteht darin, dass einige dieser Dateien unterschiedliche Spalten haben ... einige sind gemeinsam, andere nicht, aber in allen Fällen sind die Versionsspalten gemeinsam UND ich muss steuern, wie sie eingefügt werden.
Unten ist, was ich gerne tun könnte (oder so ähnlich), aber die Gesamtzahl der Spalten beträgt wirklich 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" )
)
)
Hier ist ein Skript, das funktionieren sollte, um die Spalten richtig in Zeichen umzuwandeln.
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" );
)
);
Könntest du eine Formel wie verwenden
Char( Month( :colName ) ) || "." || Char( Day( :colName ) ) || "." ||
Char( Year( :colName ) )
zurück konvertieren?
Wenn Sie sich einige Layouts ansehen, würde das für einige von ihnen funktionieren, aber nicht für alle. und natürlich weiß ich nicht, welches Layout ich bekomme, bis es verarbeitet ist.
Im Moment haben wir Code für jeden Weg von CSV und wir müssen die Dateien nur auf den richtigen Pfad schicken, um verarbeitet zu werden ... aber da es für alle zu etwa 90 % gleich sein sollte, scheint es dort eine Schande zu sein ist keine dynamischere Lösung.