[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 怎样批量计算后替换文本内容

本帖最后由 smss 于 2019-7-17 13:22 编辑

文本A.xml中有大量数值需要除以1.5后再用 有余数时4舍5入保留小数点后2位
例句
  1. <Button name="clean" y="#sh-940/1.5" w="270/1.5" h="235/1.5" alignV="bottom" alignChildren="true">
  2. <Rectangle w="270/1.5" h="235/1.5" fillColor="#ffffff" strokeColor="#cdcdcd" />
  3. </Button>
复制代码
生成
  1. <Button name="clean" y="#sh-626.67" w="180" h="156.67" alignV="bottom" alignChildren="true">
  2. <Rectangle w="180" h="156.67" fillColor="#ffffff" strokeColor="#cdcdcd" />
  3. </Button>
复制代码
计算所有""之间数值 运算符含+-*/ (加减乘除 还有取模函数等等 就不涉及了)
例如x="65+5" 调试时加的5 这样一多,一个个改太费事 因此想批量计算后替换掉原来的值 以减少程序计算量 提高效率

举个栗子:
  1. ((gc 1.xml -ReadCount 0 -enc utf8)|%{foreach($i in [regex]::Matches($_,'\d+/1.5').value){$r=$i.split('/');$_=$_ -replace $i,[math]::Round(($r[0]/1.5),2);};$_})|sc a.xml -enc UTF8 -Force;
复制代码

TOP

本帖最后由 smss 于 2019-7-17 12:49 编辑

回复 2# xczxczxcz

能不能再改改 当出现y="117.5/1.5" 会运算成y="117.3.33" 即运算5/1.5


可以直接把<Button name="clean" y="#sh-940" w="270" h="235" alignV="bottom" alignChildren="true">
中出现的数值替换成其除以1.5后的值吗

TOP

本帖最后由 flashercs 于 2019-7-17 12:25 编辑

jscript脚本
  1. var strxml = '<Button name="clean" y="#sh-940/1.5" w="270/1.5" h="235/1.5" alignV="bottom" alignChildren="true">' +
  2.   '<Rectangle w="270/1.5" h="235/1.5" fillColor="#ffffff" strokeColor="#cdcdcd" />' +
  3.   '</Button>';
  4. strxml.replace(/<[^>]+>/g, function ($0) {
  5.   return $0.replace(/"[^"]+"/g, function ($0) {
  6.     return $0.replace(/[-+*/%()\d.]+/g, function ($0) {
  7.       try {
  8.         return (eval($0)).toFixed(2);
  9.       } catch (e) {
  10.         return $0;
  11.       }
  12.     });
  13.   });
  14. });
复制代码
结果为:
  1. <Button name="clean" y="#sh-626.67" w="180.00" h="156.67" alignV="bottom" alignChildren="true"><Rectangle w="180.00" h="156.67" fillColor="#ffffff" strokeColor="#cdcdcd" /></Button>
复制代码
微信:flashercs
QQ:49908356

TOP

回复 3# smss


  把 下面的替换一下。
‘\d+/1.5'  ===>  '[\d\./]+(?=")'
第二个问题可以 。整数,小数,数学表达式(可带小括号),可带开根之类。当然也复杂了。

TOP

返回列表