列對話框 - 也複製列屬性<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我有一個腳本可以打開多個數據表並在這些數據表中創建新列。 是否可以編寫一個列複製器框來顯示打開的每個數據表中的每一列?這樣我就可以選擇並複制我想要的唯一列及其屬性?
我當前的代碼嘗試在復制列之前將數據表連接到一個新表中,但它看起來像JMP 不允許我同時連接兩個以上的數據表。
下面是我編寫的代碼的摘要,以便於編輯。 謝謝。
名稱默認為此處( 1 ) ;
// 使用 'PickFile()' 獲取要打開的文件列表(僅限 Windows)
文件列表=選擇文件(
“選擇多個文件之一” , // 迅速的
“$桌面” , // 初始文件夾
{ “JMP 文件|jmp;jsl;jrn;csv” , “所有文件|*” } , // 要應用的文件過濾器列表(被 OS/X 忽略)
1 , // 要應用的初始文件過濾器(上面列表中項目的索引)
0 , // 保存標誌 - 指定“保存”或“打開”窗口。 分別設置值1或0。
空的() , // 默認文件
多種的// 多個 - 如果“保存標誌”= 0,則使用值 1 允許打開多個文件(被 OS/X 忽略)
) ;
// 如果只選擇單個文件,fileList將不是一個列表,所以我們需要自己構建它
如果( !是列表(文件列表) ,
文件列表=評估清單( {文件列表} )
) ;
// 打開文件並存儲其對應的 JMP 表名稱
表名= {} ;
為了( F = 1 , F <= N 項(文件列表) , F ++,
dt =打開(文件列表[ F ] ) ;
插入(表名, dt <<獲取名稱) ;
) ;
dt =新表( “連接狗 H” ) ;
//創建Column Copier來複製文件
dt =當前數據表() ;
列_dlg =新窗戶( 《列複印機》 ,
面板盒( “選擇四列來創建一個新表:” ,
列列表=碰撞列錶框(全部,寬度( 200 ) ,最大選擇數( 4 )) ,
) ,
按鈕盒( “好的” ,
選定的列列表=列列表<<被選中;
第 1 列=選定的列列表[ 1 ] ;
列2 =選定的列列表[ 2 ] ;
第 3 列=選定的列列表[ 3 ] ;
第 4 列=選定的列列表[ 4 ] ;
// 僅使用兩個選定的列創建一個新表
dt2 = dt <<子集(列(柱子( dt ,第 1 列) ,柱子( dt ,列2 ) ,柱子( dt ,第 3 列) ,柱子( dt ,第 4 列) ) ) ;
列_dlg <<關閉窗口;
)
) ;
添加了數據表。
消息編輯者:Luqman Olawin
回复:列對話框 - 也複製列屬性你好吉姆,
我嘗試用“名稱”替換它。 我評論了“通過匹配列”功能,這似乎對我有用。 非常感謝您的幫助,我真的很感激!
回复:列對話框 - 也複製列屬性該錯誤指出沒有名為“批次 ID 中的晶圓 ID”的列。這就是我的數據表中的匹配列。我相信您匹配的列名稱稱為“名稱”。將“批次 ID 中的晶圓 ID”的 2 個引用更改為“名稱”
回复:列對話框 - 也複製列屬性以下是我從日誌窗口收到的錯誤。 我已經編輯了帖子以附加數據表,它們都具有相同的列,只有不同的表名稱。我想將相同命名的列分開,以便當列複製器出現時,我可以選擇我喜歡複製的列。 謝謝。
範圍數據表訪問需要在訪問或評估“dt:批次 ID 中的晶圓 ID”、dt:批次 ID 中的晶圓 ID/*###*/ 時使用數據表列或變量
在以下腳本中,錯誤標記為 /*###*/
名稱默認為此處( 1 );
文件列表 = 選擇文件(
“選擇多個文件之一”,
“$桌面”,
{"JMP 文件|jmp;jsl;jrn;csv", "所有文件|*"},
1、
0,
空的(),
多種的
);
If( !Is List( 文件列表 ),
文件列表 = 評估列表( {文件列表} )
);
表名 = {};
For( f = 1, f <= N 項( 文件列表 ), f++,
dttemp = 打開( 文件列表);
插入( tableNames, dttemp << getName );
如果(f==1,
dt = dttemp,
dtx = dt << 加入(
使用( dttemp ),
通過匹配列(
dt: 批次 ID 中的晶圓 ID/*###*/ = dttemp: 批次 ID 中的晶圓 ID
),
保留主表順序(),
輸出表名稱(“Concatenated Watch H”)
);
關閉( dttemp, nosave );
關閉(dt,nosave);
dt = dtx;
);
);
dt = 當前數據表();
col_dlg = 新窗口( "列複印機",
Panel Box("選擇四列來創建一個新表:",
col_clist = 列列錶框(全部,寬度(200),最大選擇(4))
),
按鈕框(“確定”,
selected_column_list = col_clist << getselected;
col1 = 選定的列列表[1];
col2 = 選定的列列表[2];
col3 = 選定的列列表[3];
col4 = 選定的列列表[4];
dt2 = dt << 子集(
列(
列(dt,col1),
列(dt,col2),
列(dt,col3),
列(dt,col4)
)
);
col_dlg << 關閉窗口;
)
);
回复:列對話框 - 也複製列屬性告訴我有關不同文件的信息。 它們是否具有同名的列? 使用“合併同名列(1)”語句,任何具有相同名稱的列都將在連接中相互折疊。如果您指望連接將相同的命名列分開,那麼執行連接的代碼部分必須認識到連接數據表中名為“name”的列將不再命名為“name”,而是“name of ”,並且必須在腳本中處理該列以允許連接發生。
數據表中的“名稱”列是每行的唯一標識符嗎?
您能告訴我 JMP 日誌(查看==>日誌)中顯示了哪些錯誤消息嗎?
這是在我的系統上沒有錯誤的代碼。請注意,我打開以查找輸入文件的目錄以及用於在連接中匹配的列與您的代碼不同。除此之外,它應該是相同的代碼。這段代碼運行沒有錯誤。 請注意,此代碼工作的假設是除了用於匹配的列 ("批次 ID 中的晶圓 ID”)。
名稱默認為此處( 1 ) ;
文件列表=選擇文件(
“選擇多個文件之一” , // 迅速的
“c:\users\txjim\documents\multifiles” , // 初始文件夾
{ “JMP 文件|jmp;jsl;jrn;csv” , “所有文件|*” } , // 要應用的文件過濾器列表(被 OS/X 忽略)
1 , // 要應用的初始文件過濾器(上面列表中項目的索引)
0 , // 保存標誌 - 指定“保存”或“打開”窗口。 分別設置值1或0。
空的() , // 默認文件
多種的// 多個 - 允許打開多個文件(被 OS/X 忽略)
) ;
如果( !是列表(文件列表) ,
文件列表=評估清單( {文件列表} )
) ;
表名= {} ;
為了( F = 1 , F <= N 項(文件列表) , F ++,
溫度=打開( 文件列表);
插入( 表名,溫度<<獲取名稱) ;
如果( F == 1 ,
dt =溫度,
dtx = dt <<加入(
使用( dttemp ) ,
通過匹配列( dt :姓名( “批次 ID 中的晶圓 ID” ) =溫度:姓名( “批次 ID 中的晶圓 ID” ) ) ,
保留主表順序() ,
合併同名列( 1 ) ,
輸出表名( 《連環觀看H》 )
) ;
關閉( 溫度,不保存) ;
關閉( dt ,不保存) ;
dt = dtx ;
) ;
) ;
dt =當前數據表() ;
列_dlg =新窗戶( 《列複印機》 ,
面板盒( “選擇四列來創建一個新表:” ,列列表=列列錶框( 全部,寬度( 200 ) ,最大選擇( 4 ) ) , ) ,
按鈕盒( “好的” ,
選定的列列表=列列表<<被選中;
第 1 列=選定的列列表[ 1 ] ;
列2 =選定的列列表[ 2 ] ;
第 3 列=選定的列列表[ 3 ] ;
第 4 列=選定的列列表[ 4 ] ;
dt2 = dt <<子集( 列(柱子( dt ,第 1 列) ,柱子( dt ,第 2 列) ,柱子( dt ,第 3 欄) ,柱子( dt ,第 4 欄 ) ) ) ;
列_dlg <<關閉窗口;
) ;
回复:列對話框 - 也複製列屬性也不行。 更改甚至沒有連接表。
回复:列對話框 - 也複製列屬性問題在於,當表具有相同名稱的列時,JMP 在連接表時會重命名列。因此,您的名為“name”的列在第一次加入後發生了變化。所以改變這一行:
dtx = dt <<加入(和(溫度) ,通過匹配列(姓名=姓名) ,保留主表順序() ,輸出表名( 《連環觀看H》 ) ) ;
到
dtx = dt <<加入(和(溫度) ,通過匹配列(姓名=姓名) ,保留主表順序() ,輸出表名( 《連環觀看H》 ), 合併同名列(1) ) ;
回复:列對話框 - 也複製列屬性謝謝吉姆。 時間並沒有解決問題(我也嘗試增加它)。 不過,關閉功能效果很好。 現在唯一的問題是第三個文件自行打開,而沒有加入最新加入的表。 從昨天開始我一直在嘗試不同的方法,但沒有成功。
回复:列對話框 - 也複製列屬性該代碼的目的是打開第一個數據表,然後打開第二個表,創建一個新的聯接數據表,關閉原表和剛剛打開的表,保留新聯接的表。然後打開第三個表。 將其連接到先前連接的表,創建一個新的數據表。然後關閉舊的連接表和新打開的表,保留最新的連接表......等等。
可能存在計時問題,並且存在您刪除了關閉函數之一的問題。請更改為以下代碼:
如果( F == 1 ,
dt =溫度,
dtx = dt <<加入(和(溫度) ,通過匹配列(姓名=姓名) ,保留主表順序() ,輸出表名( 《連環觀看H》 ) ) ;
等待(1);
關閉(溫度,不保存) ;
關閉(dt,nosave);
dt = dtx ;
) ;
回复:列對話框 - 也複製列屬性你好吉姆,
感謝您的幫助,經過多次嘗試後我發現了這一點。 我應該回复那個帖子。 以下是我使用的代碼。 我現在遇到的問題是我無法將兩個以上的表連接在一起。 每次我嘗試連接 3 個表時,它都會顯示 2 個不同的連接表,而不是一個。 第一個顯示串聯數據表 1 和 2,第二個顯示串聯數據表 1 和 3。
如果沒有一個串聯的數據表,就很難使用列複製器。 所以我在想,是否可以使用列複製器來顯示多個數據表中的所有列?
名稱默認為此處( 1 ) ;
// 使用 'PickFile()' 獲取要打開的文件列表(僅限 Windows)
文件列表=選擇文件(
“選擇多個文件之一” , // 迅速的
“$桌面” , // 初始文件夾
{ “JMP 文件|jmp;jsl;jrn;csv” , “所有文件|*” } , // 要應用的文件過濾器列表(被 OS/X 忽略)
1 , // 要應用的初始文件過濾器(上面列表中項目的索引)
0 , // 保存標誌 - 指定“保存”或“打開”窗口。 分別設置值1或0。
空的() , // 默認文件
多種的// 多個 - 允許打開多個文件(被 OS/X 忽略)
) ;
// 如果只選擇單個文件,fileList將不是一個列表,所以我們需要自己構建它
如果( !是列表(文件列表) ,
文件列表=評估清單( {文件列表} )
) ;
// 打開文件並存儲其對應的 JMP 表名稱
表名= {} ;
為了( F = 1 , F <= N 項(文件列表) , F ++,
溫度=打開(文件列表[ F ] ) ;
插入(表名,溫度<<獲取名稱) ;
// 將數據表附加到一起
如果( F == 1 ,
dt =溫度,
dtx = dt <<加入(和(溫度) ,按行號,通過匹配列(姓名=姓名) ,保留主表順序() ,輸出表名( 《連環觀看H》 ) ) ;
關閉(溫度,不保存) ;
dt = dtx ;
) ;
) ;
dt =當前數據表() ;
//創建Column Copier來複製文件
列_dlg =新窗戶( 《列複印機》 ,
面板盒( “選擇四列來創建一個新表:” ,
列列表=列列錶框(全部,寬度( 200 ) ,最大選擇數( 4 ) ) ,
) ,
按鈕盒( “好的” ,
選定的列列表=列列表<<被選中;
第 1 列=選定的列列表[ 1 ] ;
列2 =選定的列列表[ 2 ] ;
第 3 列=選定的列列表[ 3 ] ;
第 4 列=選定的列列表[ 4 ] ;
// 僅使用兩個選定的列創建一個新表
dt2 = dt <<子集(列(柱子( dt ,第 1 列) ,柱子( dt ,列2 ) ,柱子( dt ,第 3 列) ,柱子( dt ,第 4 列) ) ) ;
列_dlg <<關閉窗口;
)
) ;
回复:列對話框 - 也複製列屬性在最後提出這個問題時,您表示您不想將表連接在一起,而是想水平連接它們。下面是我之前發送給您的腳本的修改版,但這次它的表是水平連接的。
名稱默認為此處( 1 ) ;
// 使用 'PickFile()' 獲取要打開的文件列表(僅限 Windows)
文件列表=選擇文件(
“選擇多個文件之一” , // 迅速的
“$桌面” , // 初始文件夾
{ “JMP
文件|jmp;jsl;jrn;csv" , “所有文件|*” } , // 要應用的文件過濾器列表(被 OS/X 忽略)
1 , // 要應用的初始文件過濾器(上面列表中項目的索引)
0 , // 保存標誌 - 指定“保存”或“打開”窗口。 分別設置值1或0。
空的() , // 默認文件
多種的// 多個 - 允許打開多個文件(被 OS/X 忽略)
) ;
// 如果只選擇單個文件,fileList將不是一個列表,所以我們需要自己構建它
如果( !是列表(文件列表) ,
文件列表=評估清單( {文件列表} )
) ;
// 打開文件並存儲其對應的 JMP 表名稱
表名= {} ;
為了( F = 1 , F <= N 項(文件列表) , F ++,
溫度=打開( 文件列表);
插入( 表名,溫度<<獲取名稱) ;
// 將數據表附加到一起
如果( F == 1 ,
dt =溫度,
dtx = dt <<加入(與(dttemp) ,按行號) ;
關閉( 溫度,不保存) ;
dt = dtx ;
關閉( dtx ,不保存) ;
) ;
) ;
//創建Column Copier來複製文件
列_dlg =新窗戶( 《列複印機》 ,
面板盒( “選擇四個
用於創建新表的列:” ,列列表=列列錶框( 全部,寬度( 200 ) ,最大選擇( 4 ) ) , ) ,
按鈕盒( “好的” ,
選定的列列表=列列表<<被選中;
第 1 列=選定的列列表[ 1 ] ;
列2 =選定的列列表[ 2 ] ;
第 3 列=選定的列列表[ 3 ] ;
第 4 列=選定的列列表[ 4 ] ;
// 僅使用兩個選定的列創建一個新表
dt2 = dt <<子集( 列(柱子( dt ,第 1 列) ,柱子( dt ,第 2 列) ,柱子( dt ,第 3 欄) ,柱子( dt ,第 4 欄 ) ) ) ;
列_dlg <<關閉窗口;
)
) ;