CSV importieren und nur das Format einiger weniger Spalten ändernIch habe einige CSV-Dateien, die importiert werden müssen, und es gibt ein paar Felder, die sich auf Softwareversionen beziehen. Sie befinden sich jedoch wie xyz in der CSV-Datei und sind nicht in Anführungszeichen eingeschlossen, sodass JMP versucht, sie als numerischen Datentyp einzubinden. Wenn dies der Fall ist, geht JMP davon aus, dass es sich bei der Zahl um ein Datum handelt, und wandelt sie in ein Datum um, sodass es sehr schwierig ist, sie wieder in eine verwendbare Version umzuwandeln.
Wenn ich eine Datei manuell importiere, kann ich die Vorschau verwenden, um die benötigten Spalten auf die gewünschten Datentypen zu zwingen. Das resultierende Importskript enthält jedoch „new columns()“ für jede einzelne Spalte, und ich muss entweder das Ganze weglassen, sodass JMP einfach die Datei importiert, ODER alle 186 Spalten aufgelistet haben, 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 würde (oder so ähnlich), aber die Gesamtzahl der Spalten beträgt tatsächlich 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" )
)
)
DatenzugriffBetreff: CSV importieren und nur das Format einiger Spalten ändernJa, leider habe ich nicht viele Informationen über die Organisation. Ich habe jedoch auch den JMP-Support überprüft und eine Lösung gefunden.
Da der Befehl „Open()“ versucht, intelligent zu sein und für jede Spalte das richtige Format zu erhalten, wurde vorgeschlagen, „Multiple File Import()“ auszuführen. Da der Fokus auf der Geschwindigkeit liegt, nimmt die Identifizierung von Datentypen nicht so viel Zeit in Anspruch, sodass das Format xyz auf den ersten Blick wie ein Zeichen aussieht, also funktioniert es! Die Ironie besteht darin, dass ich mich vor einiger Zeit darüber geärgert habe und Code zu einem Skript hinzufügen musste, wenn MFI verwendet wurde, um einige der Dinge zu korrigieren, die Open() korrekt erkannte.
In diesem Fall war dieser „Fehler“ ein Vorteil. Ich bin mir nicht sicher, ob es die 100%ige Lösung sein wird, die immer das tut, was ich brauche, aber das Problem konnte hier problemlos behoben werden. Ein Dankeschön an Wendy Murphrey, die mich auf die Idee gebracht hat.
Betreff: CSV importieren und nur das Format einiger Spalten ändernEs gibt Optionen. Wenn ich nur die Muster für die Versionsnummern wüsste und nichts anderes (Anzahl der Spalten, Namen, Datentypen usw.), könnten Sie es verwenden Textdatei laden Gehen Sie die Daten einmal durch, um herauszufinden, wo sie sich befanden, und erstellen Sie dann den Importcode entsprechend. Oder Sie könnten alle Spalten als Text lesen und dann jede einzelne auf mögliche Versionsnummern prüfen (bei Bedarf in eine numerische Version umwandeln). Bei sehr großen Dateien kann jeder Ansatz langsam sein, ist aber robust – es gehen keine Informationen verloren. Je mehr Sie über den möglichen Speicherort der Versionsnummer wussten, desto effizienter ließe sich einer dieser Ansätze gestalten.
Betreff: CSV importieren und nur das Format einiger Spalten ändernWenn man sich das Layout ansieht, würde das für einige von ihnen funktionieren, aber nicht für alle. und natürlich erfahre ich erst, welches Layout ich erhalte, wenn es verarbeitet ist.
Im Moment haben wir Code für jeden CSV-Weg und wir müssen die Dateien nur über den richtigen Pfad senden, damit sie verarbeitet werden können ... aber da es für alle zu 90 % gleich sein sollte, scheint es eine Schande zu sein ist keine dynamischere Lösung.
Betreff: CSV importieren und nur das Format einiger Spalten ändernKönnten Sie eine Formel wie verwenden
Char( Month( :colName ) ) || "." || Char( Day( :colName ) ) || "." ||
Char( Year( :colName ) )
zurück konvertieren?
Betreff: CSV importieren und nur das Format einiger Spalten ändernMein Fehler: Spalten mit der Struktur xyz werden dadurch nicht korrigiert
Hier ist ein Skript, das funktionieren sollte, um die Spalten ordnungsgemäß 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" );
)
);