在脚本中进行表宽查找和替换<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我有几个由欧洲同事创建的大型数据表(+100,000 条记录)。
创建表格时,使用 EU 编号格式,即“,”是小数点。
我需要进行全表替换,将“,”替换为“.”。为了使该表能够与现有脚本一起使用。
我可以使用 get column names() 语句获取列名称,但我无法弄清楚如何使用替代(...)或替代(...)语句来对质量进行替换。
大卫
回复:在脚本中进行表宽查找和替换嗨大卫,
我有同样但相反的问题 - 将点全局替换为逗号分隔符在一系列进程日志文件中。
我发现摆脱这种情况的最简单方法是将每个 jmp 文件保存为文本文件,然后使用 JMP:s“最佳猜测”选项导入它。
它将原来的分隔符替换为系统期望的分隔符(在我的例子中,“.”被替换为“,”),并将列从分类重新分类为连续。 手动完成一个并使用源代码来处理其余部分。
回复:在脚本中进行表宽查找和替换有趣的讨论。我玩了一些代码并得到了49 65394 列的全局列重命名所需的秒数。联想 T420 PC、Windows 7 64 位、JMP 64 位、4 GB RAM。
dt =打开( “$sample_data\Probe.jmp” ) ;
// 将列数扩展到 65000
// 警告大约需要 10 分钟!
为了(我= 1 ,我<= 65000 ,我++,
dt <<新专栏( “XYZ” ||字符(我) ,数字,连续的) ;
) ;
开始时间=今天() ;
列名列表= dt <<获取列名(细绳) ;
数控=恩科尔斯( dt ) ;
为了(我= 1 ,我<=数控,我++,
one_col_name =列名列表[我] ;
// 仅当列包含有问题的字符串时才重命名该列
如果(包含( one_col_name , “X” ) ,
柱子(我) <<设置名称(代替( one_col_name , “X” , “D” )) ;
) ;
) ;
结束时间=今天() ;
打印(字符(结束时间-开始时间) || “秒” ||字符(数控) || “ 列” ) ;
回复:在脚本中进行表宽查找和替换我尝试使用以下方法调用搜索对话框,但它工作不可靠。 当脚本编辑设置时,对话框似乎会断开连接。 但也许有人可以找到改进代码的方法。
如果这个异常宽的文件源自 JMP 外部,则在导入之前编辑列名称可能会更有效,例如通过可以从 JSL 触发的 Perl 或 VBA 脚本(可能取决于平台)。
dt =当前数据表() ;
老的= “C” ;
新的= “问” ;
dt <<将窗口置于前面;
// 调用搜索对话框并编辑设置
主菜单( “寻找” ) ;
w =窗户( “搜索对话框” ) ;
w [文本编辑框( 1 )] <<设置文本(老的) ;
w [文本编辑框( 2 )] <<设置文本(新的) ;
如果( w [复选框 复选框( 2 )] <<得到, w [复选框 复选框( 2 )] <<放( 1 )) ;
如果( w [复选框 复选框( 6 )] <<得到, w [复选框 复选框( 6 )] <<放( 1 )) ;
如果(( w [复选框 复选框( 7 )] <<得到) == 0 , w [复选框 复选框( 7 )] <<放( 1 )) ;
w [按钮盒( 3 )] <<点击;
//主菜单(“全部替换”);
回复:在脚本中进行表宽查找和替换也许我根据大卫对“获取列名称”的评论混淆了他的要求。我的印象是他想更改列名称(而不是实际的行数据)。无论如何,这就是我正在努力做的事情。我想更改多个列的名称(即从每个列名称中删除“labdata”)。这就是我上面的脚本要做的事情。在 JSL 中,处理 85,000 列大约需要 19 秒。“搜索对话框”只需要几分之一秒的时间。
关于如何做的任何想法那没有 For 循环(或超级高效的循环)?
谢谢,
杰克
回复:在脚本中进行表宽查找和替换在 MacBook Pro 上使用 JMP 11 时,如果使用 HP time( ) 而不是 Today( ),我会得到“2 秒处理 5800 行”或 1.753558 秒。
与上面的说法相反,内置的查找和替换在这里要慢得多。 下面的代码需要 16.27 秒才能完成(代码假设搜索对话框已通过先前的手动搜索“准备好”)。
dt =打开( “$Sample_Data\Probe.jmp” ) ;
开始时间=血量时间() ;
主菜单( “全部替换” ) ;
结束时间=血量时间() ;
打印(字符((结束时间-开始时间) / 1e6 ) || “秒” ||字符(号) || “行” ) ;
回复:在脚本中进行表宽查找和替换下面是一个示例,其中包含示例数据集中的一个大表。它只有 5800 行,需要 8 秒。Lenovo T420 上的 JMP 11 64 位。比较不同的方法会很有趣。
dt =打开( “$Sample_Data\Probe.jmp” ) ;
列名= dt <<获取列名(数字,细绳) ;
为了(我= 1 ,我<=尼特姆斯(列名) ,我++,
柱子( dt ,列名[我]) <<数据类型(特点) ;
) ;
开始时间=今天() ;
号=行数( dt ) ;
列名= dt <<获取列名(细绳) ;
为了(我= 1 ,我<=尼特姆斯(列名) ,我++,
一个列=柱子( dt ,列名[我]) ;
为了( k = 1 , k <=号, k ++,
一个列[ k ] =代替(一个列[ k ] , “。” , “,” ) ; // 用逗号替换小数
) ;
) ;
结束时间=今天() ;
打印(字符(结束时间-开始时间) || “秒” ||字符(号) || “行” ) ;
回复:在脚本中进行表宽查找和替换嗨大卫,
**输入所有这些内容后,我意识到原来的问题是很久以前发布的。然而,我的“更有效”问题仍然存在,是否有人可以提供帮助。 **
我正在尝试弄清楚同样的事情。一种解决方案是使用 For 循环并单独处理每一列,但这可能需要相当长的时间,具体取决于您的数据集。下面列出了示例代码供您参考。
dt = 当前数据表();
为了( i=1,i<=ncol(dt),i++,
科名= Column(i) << 获取名称;
新名称= munger(colname,1,"替换字符串",""); // 你可以使用“Substitute”命令做类似的事情
列(i) << 设置名称(newcolname);
);
有谁知道比 For 循环更有效的方法来解决这个问题?例如,当使用标准的“查找和替换”对话框时,执行速度非常快。然而,在大约 65,000 列上,For 循环方法需要相当多的时间。
谢谢,
杰克