你好,
我是 JMP 的新手,希望自動執行以下非常具有挑戰性的操作,最好是通過自動化 JMP 腳本或您專家可能推薦的任何其他解決方案:)。
我的數據:
我有兩個結果文件夾,datafolder1 和 datafolder2。 從技術上講,它們是相同的測量值,設置略有不同,更改前後會重複相同的測量值。
每個文件夾有多個.txt 文件,這些文件是.txt 表格格式的結果文件。 每個文件夾的 .txt 文件名稱相同,列名也相同。 實際上,每個文件只有數字數據略有不同。
我想要的是:
我想以圖形方式比較具有相同名稱 .txt 的每一列的結果數據文件夾 1 與結果數據文件夾 2 的差異,並生成結果的 .pdf 輸出。 我設法以 .pdf 格式生成了我想要的輸出,但必須進行 8-12 小時的手動工作才能使用圖形生成器獲得該輸出。 輸出文件稱為“wanted_output.pdf”。 現在我還有許多其他類似的案例要做,手動完成這件事需要幾個月的時間。
數據文件作為附件。 [數據已被刪除]
提前謝謝您,幾個月來一直在為這個問題苦苦掙扎,我希望 JMP 有簡單的解決方案!
嗨 txnelson 和伊恩
奇蹟般有效! 謝謝!
我不得不將 datafolder2 變量從 folder1 更改為 folder2。
同樣出於某種原因,.pdf 打印的縮放比例不佳,我不得不更改默認打印設置文件 => 頁面設置。
問題已解決,感謝大家的幫助!
附言。 我不得不從第一篇文章中刪除數據,但從技術上講,任何前後類型的數據文件夾都適用於此腳本。
而且,作為替代@txnelson的方法,並遵循最初的想法(並使用“包含子文件夾”選項):
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 社區給我發私信嗎? 我可以通過電子郵件提供更輕鬆的幫助,然後我們可以在此處發布最終解決方案。
謝謝 Jarmo 的快速回复!
我確實需要一個 JSL 來完成這一切,對於其他多個案例來說這樣做太耗時了。
在架構視圖中,遵循 JSL 可以鍛煉:
1.從兩個文件夾中導入所有文件。
2.加入/&將結果連接到一個文件中,JMP 似乎會在表名相同(XXXX)時自動添加某種索引。
3. 按字母順序對列名進行排序。
4. 將第 1 和 2 列繪製成一個圖,將第 3 和 4 列繪製為下一個圖,將第 5 和 6 列繪製為下一個圖...重複繪製以下數字,直到沒有剩餘的列。
聽起來很簡單,但我對 JSL 只有初學者的了解,每個步驟有什麼提示和示例嗎?
文件/導入多個文件可以讓你很容易地開始。 導入文件時,您必須對默認設置進行一些更改(將分隔符從逗號更改為製表符)。
從這一點開始,您可以開始加入數據表。 我不確定是否有任何簡單的方法可以做到這一點,除了 JSL 和循環遍歷您剛剛從上一步獲得的數據表列表。
對兩個文件夾重複此過程,然後將數據表連接在一起,最後使用圖形生成器創建圖形(您可能需要在創建圖形之前堆疊數據)。