列对话框 - 也复制列属性<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 <<关闭窗口;
)
) ;