Board logo

标题: [文本处理] 怎样批量计算后替换文本内容 [打印本页]

作者: smss    时间: 2019-7-16 23:57     标题: 怎样批量计算后替换文本内容

本帖最后由 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 这样一多,一个个改太费事 因此想批量计算后替换掉原来的值 以减少程序计算量 提高效率
作者: xczxczxcz    时间: 2019-7-17 09:41

举个栗子:
  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;
复制代码

作者: smss    时间: 2019-7-17 11:00

本帖最后由 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后的值吗
作者: flashercs    时间: 2019-7-17 12:23

本帖最后由 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>
复制代码

作者: xczxczxcz    时间: 2019-7-20 14:10

回复 3# smss


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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2