如何自動將所有列添加到 .jsl 中的列切換器我還是 JSL 的初學者,我還在學習中——
我有許多文件需要使用圖形生成器查看,每個文件都有不同的列數。 唯一不變的是,我知道我希望第 1 列作為疊加,第 2 列作為 X 軸,第 3 列作為 Y 軸,以及列切換器中的所有其餘列。 我希望有一個腳本可以使用這些設置為所有當前打開的數據表打開所有圖形生成器窗口,但我不知道該怎麼做。 這是我得到的最接近的:
Graph Builder(
Size( 1900, 1200 ),
Variables(
X( :Column(2) ),
Y( :Column(3) ),
Overlay( :Column(1) )
),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) ),
Column Switcher( :Column(3) ),
SendToReport(
Dispatch(
{},
"",
ScaleBox
)
)
);
我需要幫助的兩件事:(1)弄清楚如何設置列切換器以自動加載數據表中的所有列而不詢問我,(2)將此腳本包裝在一個循環中,迭代所有打開的列數據表。
提前致謝!
大規模定制回复:如何自動將所有列添加到 .jsl 中的列切換器感謝這裡提供幫助的人,我覺得我自己在這裡沒有添加太多。 這基本上就是我最終得到的結果:
目標是有一個腳本,可以一次遍歷一個充滿文本文件的文件夾,加載它,並打開一個預先設置了一些設置的圖形生成器窗口,然後當圖形生成器關閉時,它會自動打開下一個。
我使用的方法是使用全局變量來管理它:“regFlist”是要打開的文件列表,“stopReg”是一個標誌,打開時會中斷進程。
有兩個腳本: (1) reg_Next.jsl -- 檢查 regFlist,如果為空,則詢問要使用的文件夾;否則,它會從 regFlist 列表中加載下一個文件(如果未設置 regStop), (2) reg_Stop.jsl — 簡單地清空 regFlist 並設置 regStop 變量;用於提前停止進程。
我是 .jsl 的初學者,所以我非常願意接受任何反饋/建設性批評。
reg_Next.jsl
//!<BR /><BR />// use global variables (since hey, what could go wrong? ;)</img> )
Names Default To Here( 0 );
// get path to self
selfPath = get default directory() || "/reg_Next.jsl";
// check to see if user has requested a stop
If( stopReg == 1 ,
stopReg = 0;
regFlist = {};
Stop();
);
// initialize list of files to review if there aren't any in the list
If( Is Empty( regFlist ) | N Items( regFlist ) < 1,
jmpDir = Pick Directory( "Select the jmp directory." );
regFlist = Files In Directory( jmpDir );
);
// open data table and remove it from the regFlist
dt = Open( jmpDir || "/" || regFlist[1] );
regFlist = Remove( regFlist, 1 );
// set up for column switcher
colList = dt << get column names( string );
col1 = colList[1];
col2 = colList[2];
col3 = colList[3];
Remove From( colList, 1, 2 );
// open graph builder
gb = dt << Graph Builder(
size( 800, 600 ),
Variables( X( As Column( col2 ) ), Y( As Column( col3 ) ), Overlay( As Column( col1 ) ) ),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) )
);
cs = gb << Column Switcher( col3, colList );
// set up mechanism to re-run myself when graph builder is closed
If( N Items( regFlist ) == 0,
gb << on close( Close( dt, nosave ) ),
gb << on close(
Close( dt, nosave );
Open( selfPath, Run JSL( 1 ) );
)
);reg_Stop.jsl
//!
Names Default To Here( 0 );
regFlist = {};
stopReg = 1;回复:如何自動將所有列添加到 .jsl 中的列切換器@BHarris如果您可以將您的解決方案添加到此討論中,那就太好了,這樣整個討論社區都可以使用它。
回复:如何自動將所有列添加到 .jsl 中的列切換器我想到了。 我真的希望 JMP 有時有一個終端......
如果其他人發現自己在這裡尋找相同的解決方案,請回复,我將分享我最終得到的結果。
回复:如何自動將所有列添加到 .jsl 中的列切換器@tx尼爾森-- 我剛剛花了大約 3 個小時使用腳本索引和腳本指南來嘗試完成這項工作,但無法弄清楚如何使“on close()”函數打開下一個文件。 這是我認為“應該”有效的方法,但事實並非如此。
(提醒,目標是一次逐步瀏覽這些文件,打開一個圖形生成器窗口並讓我評估該文件,然後當我關閉圖形生成器窗口時,它應該關閉數據表並打開下一個文件並繪製它。)
該腳本名為“jmp_reg_4.jsl”,位於我的桌面上:
Names Default To Here( 0 ); // <-- trying to use globals so the file list will be maintained between invocations
/*
All of what you suggest is doable in JMP.
You can use "Files in Directory()" to get the file list, and then loop through them.
You can attach an "On Close()" function to the Graph Builder object, which will close the current data table, and then go get the next file from your list of files from the "Files in Directory()" list.
Examples and description are in the Scripting Index
Help==>Scripting Index
*/
If( Not( As Global( "flist" ) ),
jmpDir = Pick Directory( "Select the jmp directory." );
flist = Files In Directory( jmpDir );
);
dt = Open( jmpDir || "/" || flist[1] );
Remove( flist, 1 );
colList = dt << get column names( string );
col1 = colList[1];
col2 = colList[2];
col3 = colList[3];
Remove From( colList, 1, 2 );
gb = dt << Graph Builder(
size( 800, 600 ),
Variables( X( As Column( col2 ) ), Y( As Column( col3 ) ), Overlay( As Column( col1 ) ) ),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) )
);
cs = gb << Column Switcher( col3, colList );
gb << on close(
Close( dt, nosave );
run script( "/Users/bh/Desktop/jmp_reg_4.jsl" );
);我以為我正在創建一個要檢查的全局文件列表,然後在每次調用時,如果“flist”(文件列表)變量中仍然有元素,那麼我們只需獲取下一個並加載它並繪製它。 但它沒有按我的預期工作:當我關閉圖形生成器窗口時,它會正確關閉數據表,但不會執行其他任何操作。
回复:如何自動將所有列添加到 .jsl 中的列切換器我也找不到辦法,但按幾下 Tab 鍵會將焦點轉移到列切換器中的列列表。

回复:如何自動將所有列添加到 .jsl 中的列切換器我不知道如何完成第二個請求。回复:如何自動將所有列添加到 .jsl 中的列切換器謝謝!
我的列表中的#2 怎麼樣? (我想我可以弄清楚#3...)回复:如何自動將所有列添加到 .jsl 中的列切換器您建議的所有內容都可以在 JMP 中實現。
您可以使用“Files in Directory()”來獲取文件列表,然後循環遍歷它們。
您可以將“On Close()”函數附加到圖形生成器對象,這將關閉當前數據表,然後從“Files in Directory()”列表中的文件列表中獲取下一個文件。
示例和描述位於腳本索引中
幫助==>腳本索引
回复:如何自動將所有列添加到 .jsl 中的列切換器感人的! 我一直嘗試使用“Column Switcher(:Column(3),:Column(all))”及其變體
對腳本的這些改進是否可行? (1)給它一個裝滿txt文件的文件夾,並讓它在圖形生成器中一次打開它們,當我關閉圖形生成器時,它會關閉相應的數據表文件並打開下一個,(2)自動將焦點移至列切換器,這樣我就可以立即開始在變量中使用箭頭,而無需單擊列切換器框,(3) 當圖形生成器窗口打開時,將其在屏幕上顯示為全尺寸。
JMP 很快成為我最喜歡的軟件。回复:如何自動將所有列添加到 .jsl 中的列切換器腳本編寫非常簡單,
Names Default To Here( 1 );
// Loop across all data tables
For( i = 1, i <= N Table(), i++,
dt = Data Table( i );
// Find all of the column names
colList = dt << get column names( string );
// Get the first 3 columns for special processing
col1 = colList[1];
col2 = colList[2];
col3 = colList[3];
// Remove first 2 from column switcher columns from the overall list
Remove From( colList, 1, 2 );
// Run the Graph Builder
dt << Graph Builder(
Size( 570, 621 ),
Variables(
X( As Column( col2 ) ),
Y( As Column( col3 ) ),
Overlay( As Column( col1 ) )
),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) ),
Column Switcher( col3, colList )
);
);