脚本中的表宽查找和替换<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我有几个由欧洲同事创建的大型数据表(+100,000 条记录)。
创建表格时使用的是欧盟编号格式,即“,”是小数点。
我需要做一个表范围的替换来用“。”替换“,”。为了使表与现有脚本一起使用。
我可以使用 get column names() 语句获取列名,但我不知道如何使用替换(...)或替换到(...)语句来进行批量替换。
大卫
回复:脚本中的表宽查找和替换嗨大卫,
我有同样但相反的问题 - 全局替换点到逗号分隔符在一系列进程日志文件中。
我发现摆脱这种情况的最简单方法是将每个 jmp 文件保存为文本文件,然后使用 JMP 导入它:s “最佳猜测”选项。
它用系统预期的分隔符替换了原始分隔符(在我的例子中,“.”被替换为“,”),并将列从分类重新分类为连续。 手动做了一个,并使用源代码来处理其余的脚本。
回复:脚本中的表宽查找和替换有趣的讨论。我玩了一些代码并得到了49 65394 列的全局列重命名的秒数。Lenovo T420 PC,Windows 7 64 位,JMP 64 位,4 GB RAM。
dt =打开( “$sample_data\Probe.jmp” ) ;
// 将列数扩展为 65000
// 警告大约需要 10 分钟!
为了(一世= 1 ,一世<= 65000 ,一世++,
dt <<新专栏( “XYZ” ||字符(一世) ,数字,连续的) ;
) ;
start_dt =今天() ;
col_name_list = dt <<获取列名(细绳) ;
数控= ncols ( dt ) ;
为了(一世= 1 ,一世<=数控,一世++,
one_col_name = col_name_list [一世] ;
// 如果列包含有问题的字符串,则仅重命名该列
如果(包含( one_col_name , “X” ) ,
柱子(一世) <<设置名称(代替( one_col_name , “X” , “D” )) ;
) ;
) ;
end_dt =今天() ;
打印(字符( end_dt - start_dt ) || “秒为” ||字符(数控) || “ 列” ) ;
回复:脚本中的表宽查找和替换我尝试使用以下方法调用搜索对话框,但它不能可靠地工作。 当脚本编辑设置时,似乎对话框断开连接。 但也许有人可以找到改进代码的方法。
如果这个异常宽的文件源自 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(),我会得到“5800 行 2 秒”或 1.753558 秒。
与上面所说的相反,内置的查找和替换在这里要慢得多。 下面的代码需要 16.27 秒才能完成(代码假定搜索对话框已由先前的手动搜索“准备好”)。
dt =打开( "$Sample_Data\Probe.jmp" ) ;
start_dt =惠普时间() ;
主菜单( “全部替换” ) ;
end_dt =惠普时间() ;
打印(字符(( end_dt - start_dt ) / 1e6 ) || “秒为” ||字符(天然橡胶) || “行” ) ;
回复:脚本中的表宽查找和替换这是示例数据集中的一个大表的示例。它只有 5800 行,需要 8 秒。联想 T420 上的 JMP 11 64 位。比较不同的方法会很有趣。
dt =打开( "$Sample_Data\Probe.jmp" ) ;
col_names = dt <<获取列名(数字,细绳) ;
为了(一世= 1 ,一世<=物品( col_names ) ,一世++,
柱子( dt , col_names [一世]) <<数据类型(特点) ;
) ;
start_dt =今天() ;
天然橡胶=行( dt ) ;
col_names = dt <<获取列名(细绳) ;
为了(一世= 1 ,一世<=物品( col_names ) ,一世++,
one_col =柱子( dt , col_names [一世]) ;
为了( ķ = 1 , ķ <=天然橡胶, ķ ++,
one_col [ ķ ] =代替( one_col [ ķ ] , “。” , "," ) ; // 用逗号替换十进制
) ;
) ;
end_dt =今天() ;
打印(字符( end_dt - start_dt ) || “秒为” ||字符(天然橡胶) || “行” ) ;
回复:脚本中的表宽查找和替换嗨大卫,
**在输入所有这些之后,我意识到原来的问题是很久以前发布的。但是,如果有人可以提供帮助,我的“更有效”问题仍然存在。 **
我试图弄清楚同样的事情。一种解决方案是使用 For 循环并单独处理每一列,但这可能需要相当长的时间,具体取决于您的数据集。下面列出了示例代码供您参考。
dt = 当前数据表();
为了( i=1,i<=ncol(dt),i++,
名称=列(i)<<获取名称;
新名称= munger(colname,1,"replacestring",""); // 你可以用“替代”命令做类似的事情
列(i)<<设置名称(newcolname);
);
有谁知道比 For 循环更有效的方法来处理这个问题?例如,当使用标准的“查找和替换”对话框时,它执行得非常快。但是,在大约 65,000 列上,For 循环方法需要相当长的时间。
谢谢,
杰克