我瘋了還是怎麼可能?- 需要幫助解決奇怪的行為在我的應用程序中問題我整天都在進行故障排除。我把它縮小到這個非常奇怪的行為。除非我遺漏了什麼,否則不應該這樣。
我打開了兩張桌子:“棒球”和“籃球”。
我有這個腳本:
Clear Log();
//dt_current=Data Table("Basketball");
/*Two tables opened: Baseball and Basketball. The table named "Basketball" is selected as current table*/
dt_working=Data Table("Baseball");
Show("This is the dt_working table:");
Show(dt_working<<GET name=""></GET>顯然,我正在嘗試使用棒球表中的列創建一個列錶框。
但這就是我的日誌(以及應用程序的其餘部分)向我展示的內容:
"This is the dt_working table:";
dt_working << Get Name() = "Baseball";
"Columns names:";
colNamesList = {Player, Batting};
"This is what dt_working still is:";
dt_working << Get Name() = "Baseball";
"But this is what I got in Col List Box:";
colListX << Get Items = {"School", "CSN", "Durham Sun", "Durham Herald", "Washington Post", "USA Today", "Sports Magazine", "In Sport", "UPI", "AP", "Sports Illustrated"};出於某種原因,即使我將dt_working指定為Baseball並且表示使用表dt_working創建了Col List Box,它會使用我在頂部工具欄中選擇的當前數據表中的列填充Col List Box。
另一個應用程序通常具有不同的代碼但該特定部分完全相同的工作方式不同以及我打算如何工作。有人可以幫助我進一步排除故障嗎?為什麼owuld它填充Col List Box不形成我告訴它填充的表,但從當前表?
從長遠來看,我正在嘗試顯示我在不同列錶框中選擇的表中的列。另一個應用程序中的類似功能工作正常。這裡無論我點擊什麼表(並運行類似於我引用的代碼),它總是顯示從頂部選擇的表中的列。
謝謝,
M.
回复:我瘋了還是怎麼可能?- 需要幫助解決奇怪的行為 @MathStatChem 中寫道:
lso,看一下腳本指南中的語法,看來語法不允許使用數據表引用,你必須使用以下語法:
y =列錶框(<數據表(名稱)>,...)
Col List Box()的參數中的Data Table()不是函數,它是一個命名參數,讓Col List Box()知道該參數應該被解釋為數據表。因此,它確實將數據表引用作為參數。這是一個例子:
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt2 = Open( "$SAMPLE_DATA\Solubility.jmp" );
New Window("Example", Col List Box( Data Table( dt ), all ) );
不需要<< Get Name消息。
我們將嘗試自動檢測第一個參數是否是數據表引用。
謝謝 @Justin_Chilton 為了解釋。
回复:我瘋了還是怎麼可能?- 需要幫助解決奇怪的行為
@ gzmorgan0 中寫道:
是的,這是我建議使用ColListBox(數據表(dt_ref << getname),...)
它的工作原理!你今天救了我兩次!
回复:我瘋了還是怎麼可能?- 需要幫助解決奇怪的行為好吧,也許不是一個bug,我將不得不查找舊的電子郵件,但我在某處找到了ColListBox(dt,...)的引用並標記了JMP。
是的,這是我建議使用ColListBox(數據表(dt_ref << getname),...)
回复:我瘋了還是怎麼可能?- 需要幫助解決奇怪的行為另外,看一下腳本指南中的語法,似乎語法不允許使用數據表引用,您必須使用以下語法:
y =列錶框(<數據表(名稱)>,...)
所以使用此代碼
y=Col List Box( Data Table(dt_working<<GET name=""></GET>
給你想要的結果。 我不認為這是一個bug,它只是笨拙的語法。
回复:我瘋了還是怎麼可能?- 需要幫助解決奇怪的行為啊,好吧,我明白了。 所以Col List Box使用當前數據表,而不是數據表引用。 快速修復,就是在colList語句之前插入腳本,這句話:
當前數據表(dt_working);
回复:我瘋了還是怎麼可能?- 需要幫助解決奇怪的行為是的,我打開了另一個腳本,但它正在工作
意。我將嘗試格魯吉亞的解決方法,讓你們知道它是否有效。我曾有一個
強烈的懷疑它是一個大的,我不清楚是什麼觸發
因為完全相同的代碼在另一個應用程序中運行良好。回复:我瘋了還是怎麼可能?- 需要幫助解決奇怪的行為我使用示例數據中的Baseball.JMP表運行您的代碼,但我沒有看到您看到的行為。 這是我的日誌輸出。
"This is the dt_working table:";
dt_working << Get Name() = "Baseball";
"Columns names:";
colNamesList = {Player, Batting};
"This is what dt_working still is:";
dt_working << Get Name() = "Baseball";
"But this is what I got in Col List Box:";
colListX << Get Items = {"Player", "Batting"};你有另一個腳本打開你創建colListX引用的地方,也許是另一個表?
最好在腳本開頭使用Names Default to Here(1)命令。 如果你不這樣做,那麼你所有的變量都是全局變量,兩個不同的腳本可以互相遍歷變量。
回复:我瘋了還是怎麼可能?- 需要幫助解決奇怪的行為我稱之為一個錯誤。我去年被抓了。 但是,有一個解決方案。 問題是ColListBox沒有評估或解析表引用dt_working。 我的建議是使用語法ColListBox(數據表(dt_working <<獲取名稱),.... 或者在創建colListX時使目標表成為當前數據表。
嗯,我的JSl正在包裝。腳本附上。
open("$Sample_data/Basketball.jmp");<BR />open("$Sample_data/Baseball.jmp");<BR /><BR />Clear Log();<BR /> //dt_current=Data Table("Basketball");<BR /> /*Two tables opened: Baseball and Basketball. The table named "Basketball" is selected as current table*/<BR /> dt_working=Data Table("Baseball");<BR /> <BR /> Show("This is the dt_working table:");<BR /> Show(dt_working<<GET name=""></GET> colNamesList = dt_working << Get Column Names;<BR /> show("Columns names:");<BR /> show(colNamesList);<BR /> show(current data table()); //Baseball<BR /> <BR /> colListX = Col List Box (all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET><BR /> //_______________________________________________________<BR /> <BR /> Write("\!N" ||Repeat("_",60)||"\!N");<BR /> <BR /> //make Basektball current <BR /> <BR /> current data table(Data Table("Basketball"));<BR /> <BR /> colListX = Col List Box (dt_working, all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET><BR /> colListX = Col List Box (NameExpr(dt_working), all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET><BR /> colListX = Col List Box (Data Table("Baseball"), all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET> <BR /> <BR /> colListX = Col List Box (Data Table(dt_working<<GET name=""></GET> show(colListX<<GET items=""></GET><BR /><BR /> Eval( <BR /> Parse( EvalInsert("colListX = ColListBox( ^dt_working^, all, width(250), maxSelected(1));") )<BR /> );<BR /> wait(0);<BR /> show(colListX<<GET items=""></GET>