匯入 csv 並僅更改幾列的格式我有一些需要導入的 csv 文件,並且有一些與軟體版本相關的欄位。 然而,它們與 xyz 一樣位於 csv 中,並且沒有封裝在引號中,因此 JMP 嘗試將其作為數字資料類型引入。 當這樣做時,JMP 認為該數字是日期並將其轉換為日期,因此很難轉換回可用版本。
如果我手動匯入文件,我可以使用預覽將我需要的列強制為我想要的資料類型。 然而,生成的導入腳本對於每一列都有“new column()”,我要么必須忽略整個內容,以便 JMP 僅導入文件,要么列出所有 186 列,以便我可以控制其中一些的導入。
真正的問題在於,其中一些文件具有不同的列……有些是共同的,有些不是,但在所有情況下,版本列都是共同的,我需要控制它們的引入方式。
下面是我想要做的(或類似的事情),但總列數實際上是 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" )
)
)
資料存取回覆:匯入 csv 並僅更改幾列的格式是的,不幸的是,我不會獲得有關該組織的大量資訊。 不過,我也檢查了 JMP 支持,並找到了解決方案。
由於 Open() 命令試圖變得智慧並為每列取得正確的格式,因此建議執行 Multiple File Import()。 由於它的重點是速度,因此不需要花太多時間來識別資料類型,因此格式 xyz 乍看之下就像字符,所以它可以工作! 諷刺的是,不久前我就被這個問題困擾了,如果使用 MFI 來修正 Open() 正確識別的一些內容,我就必須在腳本中加入程式碼。
在這種情況下,這個「缺陷」是一個好處。 我不確定它是否會是 100% 總是做我需要的解決方案,但它在這裡輕鬆解決了問題。 向給我這個想法的溫蒂·墨菲致敬。
回覆:匯入 csv 並僅更改幾列的格式有選擇。 如果我只知道版本號碼的模式而不知道其他內容(列數、名稱、資料類型等),您可以使用載入文字文件,遍歷資料一次以查找它們所在的位置,然後相應地建立導入程式碼。 或者,您可以將所有欄位作為文字讀取,然後檢查每個列是否有可能的版本號(在必要時轉換為數字)。 對於非常大的文件,這兩種方法都可能很慢,但是很強大 - 您不會丟失資訊。 您對版本號的可能位置了解越多,這兩種方法的效率就越高。
回覆:匯入 csv 並僅更改幾列的格式看看一些佈局,這適用於其中一些,但不適用於全部。當然,在處理之前我不會知道我得到的佈局。
現在我們有針對 CSV 每種途徑的程式碼,我們只需要將檔案傳送到正確的路徑即可處理…但是由於所有檔案應該有 90% 相同,所以這似乎是一種恥辱不是一個更動態的解決方案。
回覆:匯入 csv 並僅更改幾列的格式你能用這樣的公式嗎
Char( Month( :colName ) ) || "." || Char( Day( :colName ) ) || "." ||
Char( Year( :colName ) )
轉換回來?
回覆:匯入 csv 並僅更改幾列的格式我的錯誤,這不會修正具有 xyz 結構的列
這是一個應該可以正確地將列更改為字元的腳本。
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" );
)
);