打開多個文件我想打開多個測量文件並將它們連接到一個文件中。
不幸的是,由於文件的標題很奇怪,使用起來並不簡單導入多個文件...
因此,我設置了一個 for 循環並通過 open() ... 加載每個文件,一個一個地處理它,然後將它們連接起來。
for( open(...)) 與 MFI 相比慢了多少,這令人驚訝。
我嘗試過的一些技巧:
- 加載所有文件,連接一次 --> 幫助
- 選項“invisible”(去除表更新)--> 很有幫助
但仍然沒有機會達到 MFI 的性能。
還有什麼技巧嗎?
它應該有助於使用 MFI(不堆疊),然後分別處理數據表並將它們連接起來。
是否有命令告訴 MFI 打開文件無形的?
數據訪問回复:打開多個文件- 似乎是一些不錯的願望清單項目:一個更激進的連接選項,一個不可見的選項。
- 嘗試最小化表格
- 嘗試 <<開始數據更新
- MFI 也有一個比 open() 使用更快的 CSV 閱讀器。 但是如果您可以使用指定足夠信息的源腳本來防止對數據進行額外掃描,那麼使用 open 仍然可以很快。 或者嘗試使用 MFI 導入單個文件。
- MFI 使用多線程。 如果您正在查看時間分鐘(而不是秒), JMP 可以運行 JMP 嗎?可能是您一次運行多個 open() 所需要的。 目前還不清楚你花在讓它工作上的時間是否會得到回報,以及維護其他人的噩夢。
回复:打開多個文件我已經編寫了一個插件,它使用一些其他選項來執行此操作,並且僅依靠 MFI 的功能工作。 我沒有在社區中分享它,因為我需要從中刪除一些公司特定的項目。 這可能會促使人們分享我多年來學到的東西 
無論如何,你可以使用 MFI,我所做的基本上是創建一個文件名列表(通過選擇文件或目錄中的文件)所以我有一個單一的路徑和該路徑的文件名列表,然後將它們傳遞到MFI 命令。
然後我檢查輸出,如果它超過 1 個文件,我將強制連接。 這是一個片段
filter = ConcatItems(fileList,";");
filesImported1 = Multiple File Import(
<<SET folder=""></SET>
過濾器基本上是文件名列表,但以“;”分隔
回复:打開多個文件這樣的事情可能會奏效。
// use MFI to stack a mixed bag of tables...
// assumes "text" and "file name" are not columns in the data AND assumes
// no commas in the data values. Not sure how you would work around that.
dir = "$temp/testfiles/"; // make sample files here
Delete Directory( dir );
Create Directory( dir );
Save Text File( dir || "a.csv", "a,b,c\!n1,2,3\!n-1,-2,-3" );
Save Text File( dir || "b.csv", "junk\!nc,b,a,e\!n3,4,5,98\!n-1,-2,-3,-4" );
Save Text File( dir || "c.csv", "junk\!njunk\!nb,d,a,c\!n6,99,7,8\!n-1,-2,-3,-4" );
dtList = Multiple File Import(
<<SET folder=""></SET>
cleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned up清理乾淨
現在你必須決定哪些列是數字......
回复:打開多個文件你好@nathan-clark .
謝謝你的片段。
關於這裡討論的應用案例,在合併文件之前,需要在文件級別進行一些預處理。
因此,我更願意使用選項加載文件
<<SET stack="" mode=""></SET>
在我的系統 (Jmp 17.1) 上,Jmp 開始顯示 100 多個表前它對
<< show window(0);
這是因為:
@hogi寫道:是否有命令告訴 MFI 打開文件無形的?
回复:打開多個文件好的,這更有意義。 我明白你在說什麼......
唯一能讓它快一點的是如果你私下而不是不可見地打開文件。 這是一個相當快速的升級……但不確定它是否會與 MFI 的速度相匹配。 我發現,即使在私有時,JMP 也可以對文件執行大部分操作,並且它大大減少了 RAM 需求......您只需要在測試時註釋掉私有,否則您最終會尋找您看不到的測試表:)
希望 JMP 可以進一步改善 MFI。
回复:打開多個文件@nathan-clark ,非常感謝,私人的使它大約快 2 倍 
@nathan-clark寫道:希望 JMP 可以進一步改善 MFI。
是的,一個無形的(甚至私人!)MFI 中的選項
https://community.jmp.com/t5/JMP-Wish-List/Private-option-for-Import-Multiple-Files/idc-p/632087#M42...
將成為 GameChanger!
對我來說足夠的選擇:
- 在 Open 中使用私人模式並小睡片刻
- 檢查我是否設法適應@Craige_Hales下面針對我們的文件類型的解決方案。
- 等待無形的Jmp 18 中的選項 
回复:打開多個文件謝謝@Craige_Hales - 許多非常好的想法可以復制!
不幸的是,
// transfer data from text to unique cols.<BR />...
相當慢...
這裡有一個例子——在我的系統上,加載數據需要一秒鐘,轉換數據需要 10 秒鐘……
查看更多...
回复:打開多個文件很好,數據表矩陣列的設置非常陡峭。 這種方式對所有 40 行使用一個設置,而不是對每一行使用一個設置。 (見溫度列表。)我認為大類測試用例要好 4 倍:
// use MFI to stack a mixed bag of tables...
// assumes "text" and "file name" are not columns in the data AND assumes
// no commas in the data values. Not sure how you would work around that.
dir = "$temp/testfiles/"; // make sample files here
Open( dir );
Delete Directory( dir );
Create Directory( dir );
dt0 = Open( "$SAMPLE_DATA/Big Class.jmp" );
For Each( {i, idx}, 1 :: 300,
dt0:height[1] = 1000 + i;
dt0 << Save( dir || Char( 1000+i ) || ".csv" );
);
t1 = HP Time();
dtList = Multiple File Import(
<<SET folder=""></SET>
(t2 - t1) / 1000000 = 2.105032;
(t3 - t2) / 1000000 = 2.65675;
回复:打開多個文件這個怎麼樣:
- 使用超快的 MFI-Import(帶 csv 選項)
- 通過 Subset(private) 分隔輸入文件
- 對數據進行後處理以獲得有意義的列名[這裡只是一個移動]
- 連接文件
// use MFI to stack a mixed bag of tables...
// assumes "text" and "file name" are not columns in the data AND assumes
// no commas in the data values. Not sure how you would work around that.
// then splits the data via Subset(private)
// ... some postprocessing ...
// and then concatenate the files
dir = "$temp/testfiles/"; // make sample files here
open(dir);
Delete Directory( dir );
Create Directory( dir );
dt0 = Open( "$SAMPLE_DATA/Big Class.jmp" );
Foreach ({i,idx},1::300,
dt0 << Save( dir || char(i)||".csv" ));
t1=HPtime();
dtList = (Multiple File Import(
<<SET folder=""></SET>
回复:打開多個文件通過將數據收集在臨時列表中並塊寫入數據表,這是多麼大的改進啊!
好的!
謝謝@Craige_Hales
回复:打開多個文件在撰寫願望清單帖子時,我找到了相關願望 - 並在那裡添加了鏈接:
隱形:已經有打開文件的願望私人的選項(從 2022 年起):
導入多個文件的私有選項
積極的串聯(從 2020 年開始):
多個文件導入 - 強制合併
因此,幸運的是,它們已經在 Jmp 的下一版本中實現了:)