如何防止 3 位版本號作為日期讀入數據表?在 JMP 14.2.0 中,當我讀入(或“打開”)包含具有 3 位版本號值的列的 CSV 文件時,這些值會被解釋為日期。 例如,如果 verTest.csv 包含:
Product,Station,Version,Date
Widget,Audio-Test,2.2.2044,3/2/19
Widget,RF-Test,2.2.2045,3/2/20
所有列值都按預期解釋,但版本值除外,版本值以日期形式讀取,例如 2/2/2044 和 2/2/2045,具有數字數據類型、連續建模類型和 m/d/y格式。 我發現2位和4位版本號讀取正常,即作為字符串。
更複雜的是,我事先不知道哪些列可能包含此格式,因此我無法提前顯式設置列類型(也不清楚是否可以在打開之前設置列類型) CSV 文件)。 而且,如果我嘗試在事後手動更改列類型,似乎會烘焙“/”字符,以便將類型更改為“字符”,從而使值留下“2/2/2044”字符串。
有沒有辦法禁止這種解釋,以便 3 位版本號作為字符串讀入,即字符、名義(並且不影響使用傳統格式(例如 m/d/y)解釋日期的方式)?
回复:如何防止 3 位版本號作為日期讀入數據表?...你可以使用這樣的日期
<<SET date="" filter=""></SET>
<<CreateWindow with pre-populated date range<<CreateWindow with pre-populated date range<<使用預先填充的日期範圍創建窗口
回复:如何防止 3 位版本號作為日期讀入數據表?很高興這對你有用!
該語法有三個用途:如果您想使用預先填充的值重新啟動對話框,則記住對話框的完整狀態、運行導入以及顯示可能性。 過濾器是所有這些的一個示例:
<<SET name="" filter=""></SET>
與對話框相比,
using <<CreateWindow instead of <<ImportDatausing <<CreateWindow instead of <<ImportData使用 <<
對話框中有一些複選框可以啟用和禁用過濾器。 上面,名稱過濾器已啟用,大小和日期過濾器未使用。 大小和日期過濾器中的值是 (1) 您最後試驗的值,或 (2) 您選擇的文件的大小範圍和日期範圍。 最有可能的是(2)。 所以你的文件可能有 100 字節長。 該數字是 JMP 日期時間值,您可以使用類似 asdate( 3666002110.40841 ) 要得到
2020年3月2日:13:55:10
您可以從腳本中刪除這些行和(可能)許多其他行;它們大多是顯示如何使用 MFI 的默認值。
最後,該腳本真正在做什麼:MFI(...) 函數返回一個對象。 <<導入數據最後的方法告訴對象實際導入數據。 腳本索引中有一個示例顯示 <<創建窗口作為另一種方法。 MFI 對象立即被使用,然後在 <<導入數據案件。 在<<創建窗口如果窗口關閉,MFI 對像不會被銷毀。 您還可以使用 xyz = MultipleFileImport(...);並向變量 xyz 發送消息(包括導入數據和創建窗口);在變量被清除之前,該對像不會被銷毀。 ShowProperties(xyz) 將在日誌窗口中列出消息;它們也在腳本中使用。
回复:如何防止 3 位版本號作為日期讀入數據表?你好@Craige_Hales ,
非常感謝您的建議! 我實施了多個文件導入並對其進行了大量測試;我找不到任何問題,它的讀數是我的 3 位數版本列(以及其他類似的列)的分隔符完好無損,但仍然正確讀取日期。
從手冊產生的來源多個文件導入,我得到以下內容:
Multiple File Import(
<<SET folder=""></SET>
要將其集成到我的導入函數中(該函數需要小路作為參數),我只需正確填充前兩個方法:
Convert_csv_to_jmp = Function( {path},
:
:
// determine folder and file args for Multiple File Import function.
lastSlash = Contains( path, "/", -1 );
dir = Substr( path, 1, lastSlash );
If( Length(dir) == 0,
dir = "./";
);
file = Substr( path, lastSlash+1 );
Write( "Path: ", dir, "\!nFile: ", file, "\!n" );
Multiple File Import(
<<SET folder=""></SET>如果社區中的有人可以鏈接到有關此功能的一些好的文檔,我將不勝感激。 我想了解所有方法都在做什麼。 例如,設置日期過濾器似乎想要一些非常神秘的論點。
回复:如何防止 3 位版本號作為日期讀入數據表?使用多個文件導入。 它不會嘗試猜測日期格式。 如果您只選擇了一個文件,它會一次導入一個文件,但它的真正目標是從一個文件夾中導入一堆類似的文件。 如果需要重複該過程,請查看手動導入的源腳本。
回复:如何防止 3 位版本號作為日期讀入數據表?嗨卡梅倫,
感謝您的答复。 根據您的建議,在最後一個導入屏幕上,我可以單擊紅色箭頭左側的圖標,將其從數字數據列更改為字符數據列。 這樣,它就按照我想要的方式導入了數據。

其來源給了我以下信息:
Open(
"<SPAN>/Users/st/src/analysis_jmp/</SPAN>testVer.csv",
columns(
New Column( "Product", Character, "Nominal" ),
New Column( "Station", Character, "Nominal" ),
New Column( "Version", Character, "Nominal" ),
New Column( "Date",
Numeric,
"Continuous",
Format( "m/d/y", 10 ),
Input Format( "m/d/y" )
)
),
這表明可以在打開 CSV 文件之前設置列類型。 然而,當我只針對 JSL 腳本中的 Version 列時,事情就會變得混亂 – (也許是 JSL bug??)。
我的腳本:</CODE></P><P> </P><PRE><CODE class=" language-jsl">path = "./verTest.csv";<BR />dt = Open(
path,
columns(
New Column( "Version", Character, "Nominal" )
),
結果來源:
Open(
"/Users/st/src/analysis_jmp/verTest.csv",
columns(<BR /> New Column( "Product", Character, "Nominal" )<BR /> ),
因此,看起來進口商忽略了新列規範中的名稱,只是按照文件中出現的順序獲取它們(“產品”是第一個- 我添加了第二個具有類似結果的新列,從而加強了這一假設) 。
即使這確實有效,它也會假設我在導入之前知道列的名稱(我不知道)。 在某些情況下我會這樣做,所以我至少可以將這個邏輯(假設它有效)應用於那些;但我最終會想念其中的一些。
我希望可能有一個導入選項可以限製或限制日期的一般解釋方式(例如,“.”字符不被視為 m/d/y 分隔符)。
回复:如何防止 3 位版本號作為日期讀入數據表?你好@史蒂夫特里,
當您在 JMP 中打開 .csv 時,導航窗口上應該有一些選項(至少對於 Windows)。我沒有 Mac)。選擇數據(使用預覽),您將有機會手動設置導入列的格式。它在 Windows 中的樣子如下:

單擊“打開”時,您將看到一系列對話框屏幕,用於設置導入參數。在第二個屏幕上,您可以單擊預覽頂部要更改的標題,並確保該列作為字符列導入。一旦您按照您喜歡的方式導入它,您只需從表中復制源腳本並在將來重新使用它即可自動導入。