你好,
我對 JMP 相當陌生,希望自動執行以下極具挑戰性的操作,最好透過自動化 JMP 腳本或您專家可能推薦的任何其他解決方案:)。
我的數據:
我有兩個結果資料夾:datafolder1 和 datafolder2。 從技術上講,它們是相同的測量結果,設定方面存在細微差別,並且在更改前後重複相同的測量結果。
每個資料夾都有多個.txt 文件,這些文件是.txt 表格式的結果檔。 每個資料夾的 .txt 檔案具有相同的名稱,且列名稱也相同。 實際上,每個文件只有數字數據略有不同。
我想要的是:
我想以圖形方式比較結果 datafolder1 與結果 datafolder2 中具有相同名稱 .txt 的每一列的差異,並產生結果的 .pdf 輸出。 我設法產生了我想要的 .pdf 格式的輸出,但必須花費 8-12 小時的手動工作才能使用圖形產生器獲得該輸出。 輸出檔案稱為“wanted_output.pdf”。 現在我還有很多其他類似的案例要做,而手動完成這件事需要幾個月的時間。
數據文件作為附件。 [資料已刪除]
預先感謝您,幾個月來一直在解決這個問題,我希望 JMP 能為此提供簡單的解決方案!
嗨特克斯尼爾森和伊恩
奇蹟般有效! 謝謝你!
我必須將 datafolder2 變數從folder1更改為folder2。
另外由於某種原因 .pdf 列印不能很好地擴展,我不得不更改預設列印設定 File=>Page setup。
問題解決了,謝謝大家幫忙!
附言。 我必須從第一篇文章中刪除數據,但從技術上講,任何之前和之後類型的資料資料夾都可以使用此腳本。
並且,作為替代方案@tx尼爾森的方法,並遵循最初的想法(並使用“包含子資料夾”選項):
NamesDefaultToHere(1);
// Unzip the example file 'net_data.zip' to your Desktop
// Generated via 'File > Open Multiple..': tabList is a list of 'paired' tables
// that are built automatically according to the commonality of column names
tabList =
Multiple File Import(
<<SET folder=""></SET>
像往常一樣,最終結果的完整性取決於您可以(和不能)假設資料的規律性。
我必須猜測一些事情,但下面的腳本為資料表資料夾中找到的每個檔案建立一個單獨的 pdf。我稍微修改了圖表格式。正如我所能確定的,它顯示了所有相同的信息,但形式略有不同。
在腳本中,您需要輸入資料夾 1 和資料夾 2 的路徑。目前,pdf 儲存在 $TEMP 目錄中。您需要將它們更改為真實的資料夾。
Names Default To Here( 1 );
// Set folder1 and folder2 paths
folder1 = "path to folder 1";
folder2 = "path to folder 2";
// Get files in datafolder 1 folder
fileNamesList = Files In Directory( folder1 );
For( File = 1, File <= N Items( fileNamesList ), File++,
// Open the file in datafolder1
dt1 = Open(
folder1 || "/" || fileNamesList[File],
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Tab, Comma, CSV( 1 ) ),
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" )
)
);
// New column: Index
dt1 << New Column( "Index", Numeric, "ordinal", Format( "Best", 12 ), Set Each Value( Row() ) );
// New column: Index
dt1 << New Column( "Measured", Character, Set Each Value( "Before" ) );
// Open the file in datafolder2
dt2 = Open(
folder1 || "/" || fileNamesList[File],
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Tab, Comma, CSV( 1 ) ),
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" )
)
);
// New column: Index
dt2 << New Column( "Index", Numeric, "Ordinal", Format( "Best", 12 ), Set Each Value( Row() ) );
// New column: Index
dt2 << New Column( "Measured", Character, Set Each Value( "After" ) );
// Concatenate tables
// → Data Table( "HW.DiodeTest.ADP_diodes" )
dt1 << Concatenate( dt2, Append to first table );
// Close the After data table
Close( dt2, nosave );
// get all continuous columns in the data table
colNamesList = dt1 << get column names( continuous, string );
theJournal = New Window( fileNamesList[File], <<JOURNAL></JOURNAL>
您可以在 JMP 社群給我發送私人訊息嗎? 我可以透過電子郵件提供更輕鬆的幫助,然後我們可以在這裡發布最終的解決方案。
謝謝賈莫的快速回覆!
我確實需要一個 JSL 來完成這一切,對於其他多種情況來說太耗時了。
從架構的角度來看,遵循 JSL 可以鍛鍊:
1.導入兩個資料夾中的所有檔案。
2.加入/&將結果連接到一個檔案中,當表名相同(XXXX)時,JMP 似乎會自動添加某種索引。
3. 依字母順序對列名稱進行排序。
4. 將第1 列和第2 列繪製為一個圖,將第3 列和第4 列繪製為下一個圖,將第5 列和第6 列繪製為下一個圖...重複繪製以下數字,直到沒有剩餘的列。
這一切聽起來很簡單,但我對 JSL 只有初學者的了解,每個步驟有什麼提示和範例嗎?
文件/匯入多個文件可以讓您相當輕鬆地開始。 匯入檔案時,您必須對預設設定進行一些變更(將分隔符號從逗號變更為製表符)。
從此時起,您可以開始加入資料表。 我不確定除了 JSL 和循環剛剛從上一步獲得的資料表列表之外是否有任何簡單的方法可以做到這一點。
對兩個資料夾重複此過程,然後將資料表連接在一起,最後使用圖形產生器建立圖形(您可能需要在建立圖形之前堆疊資料)。