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

[文本处理] 【已解决】批处理怎样提取文本中指定值?

本帖最后由 smss 于 2019-7-26 18:20 编辑

例句如下
  1. <Circle x="432.5" y="144" fillColor="@Color" r="2"/>
  2. <Circle x="446.5" y="146.5" fillColor="@Color" r="2"/>
  3. <Circle x="460" y="150" fillColor="@Color" r="2"/>
  4. <Circle x="473" y="155" fillColor="@Color" r="2"/>
复制代码
提取文本1中x y的值以","号间隔 保存文本为2
生成文本样式如下
x="432.5,446.5,460,473"
y="144,146.5,150,155"

本帖最后由 smss 于 2019-7-27 09:49 编辑

回复 8# xczxczxcz
  1. $f =gc manifest.xml -readcount 0 -enc utf8;
  2. $x =[regex]::matches($f,'(?is)(?<=\bx=")[^"]+\b').value;
  3. $y =[regex]::Matches($f,'(?is)(?<=\by=")[^"]+\b').value;
  4. $w =[regex]::matches($f,'(?is)(?<=\bw=")[^"]+\b').value;
  5. $h =[regex]::matches($f,'(?!s)(?<=\bh=")[^"]+\b').value;
  6. $r =[regex]::matches($f,'(?!s)(?<=\br=")[^"]+\b').value;
  7. $alpha =[regex]::matches($f,'(?is)(?<=\balpha=")[^"]+\b').value;
  8. $pivotX =[regex]::matches($f,'(?is)(?<=\bpivotX=")[^"]+\b').value;
  9. $pivotY =[regex]::matches($f,'(?is)(?<=\bpivotY=")[^"]+\b').value;
  10. $angle =[regex]::matches($f,'(?is)(?<=\bangle=")[^"]+\b').value;
  11. $scale =[regex]::matches($f,'(?is)(?<=\bscale=")[^"]+\b').value;
  12. $src =[regex]::matches($f,'(?is)(?<=\bsrc=")[^"]+\b').value;
  13. $srcExp =[regex]::matches($f,'(?is)(?<=\bsrcExp=")[^"]+\b').value;
  14. $align =[regex]::matches($f,'(?is)(?<=\balign=")[^"]+\b').value;
  15. $alignV =[regex]::matches($f,'(?is)(?<=\balignV=")[^"]+\b').value;
  16. $package =[regex]::matches($f,'(?is)(?<=\bpackage=")[^"]+\b').value;
  17. $class =[regex]::matches($f,'(?is)(?<=\bclass=")[^"]+\b').value;
  18. $out ='<Var name="信息_x" type="number[] const="false" values="'+($x -join ',')+'"/>'+"`r`n"+'<Var name="信息_y" type="number[] const="false" values="'+($y -join ',')+'"/>'+"`r`n"+'<Var name="信息_w" type="number[] const="true" values="'+($w -join ',')+'"/>'+"`r`n"+'<Var name="信息_h" type="number[] const="true" values="'+($h -join ',')+'"/>'+"`r`n"+'<Var name="信息_r" type="number[] const="true" values="'+($r -join ',')+'"/>'+"`r`n"+'<Var name="信息_alpha" type="number[] const="true" values="'+($alpha -join ',')+'"/>'+"`r`n"+'<Var name="信息_pivotX" type="number[] const="true" values="'+($pivotX -join ',')+'"/>'+"`r`n"+'<Var name="信息_pivotY" type="number[] const="true" values="'+($pivotY -join ',')+'"/>'+"`r`n"+'<Var name="信息_angle" type="number[] const="true" values="'+($angle -join ',')+'"/>'+"`r`n"+'<Var name="信息_scale" type="number[] const="true" values="'+($scale -join ',')+'"/>'+"`r`n"+'<Var name="信息_src" type="string[]" const="true" expression="''''" values="'''+($src -join ''',''')+'''"/>'+"`r`n"+'<Var name="信息_srcExp" type="string[]" const="true" expression="''''" values="'''+($srcExp -join ''',''')+'''"/>'+"`r`n"+'<Var name="信息_align" type="string[]" const="true" expression="''''" values="'''+($align -join ''',''')+'''"/>'+"`r`n"+'<Var name="信息_alignV" type="string[]" const="true" expression="''''" values="'''+($alignV -join ''',''')+'''"/>'+"`r`n"+'<Var name="信息_package" type="string[]" const="true" expression="''''" values="'''+($package -Join ''',''')+'''"/>'+"`r`n"+'<Var name="信息_class" type="string[]" const="true" expression="''''" values="'''+($class -join ''',''')+'''"/>'
  19. sc '.\数组信息.xml' -value $out  -enc utf8 -force;
复制代码
感觉能精减 还有可以加统计数量吗 比如 X="11.5,555,888" x的值共3个这样  最好能区分节点名 比如 <Text name="sms" x="#info_x+#sms_x-58" y="375" color="@Color1" size="32"/> 那么生成所有名为Text_x 并把对应所有<Text节点 x的值归类

<Image name="icon_sms" x="#info_x+#icon_sms_x" y="340" w="88" h="88" pivotX="64.5" pivotY="64.5"/> 那么生成所有名为Image_x 并把对应所有<Image节点 x的值归类 以此类推

TOP

回复 7# smss


   俺已下线了。
  1. $y =[regex]::Matches($f,'(?is)(?<=\by=")[^"]+\b').value;
复制代码
脚本有针对性,不是所有地方都可用。
1

评分人数

    • smss: 谢谢大神技术 + 1

TOP

本帖最后由 smss 于 2019-7-26 20:03 编辑

回复 5# xczxczxcz


<Button name="del" x="180" y="#sh    -626.67" w="180" h="156.67" alignV="bottom" alignChildren="true">
  1. $y =[regex]::matches($f,'(?!s)(?<=\by=")[\S.]["/]+').value;
复制代码
提取y=" "之间所有字符可以吗

TOP

本帖最后由 smss 于 2019-7-26 19:30 编辑

回复 5# xczxczxcz
$out ='x="'+($x -join ',')+'"'+"`n"+'y="'+($y -join ',')+'"'
第4句这样才能换行"`n"——"`r`n"

TOP

本帖最后由 xczxczxcz 于 2019-7-26 15:27 编辑
  1. $f =gc 1.txt -readcount 0;
  2. $x =[regex]::matches($f,'(?is)(?<=\bx=")[\d.]+').value;
  3. $y =[regex]::matches($f,'(?!s)(?<=\by=")[\d.]+').value;
  4. $out ='x="'+($x -join ',')+'"'+"`n"+'y="'+($y -join ',')+'"'
  5. sc '.\2.txt' -value $out -force;
复制代码
1

评分人数

TOP

本帖最后由 smss 于 2019-7-26 14:29 编辑

回复 3# Batcher

能不能改改这兼容性不够

<Circle  y="144" x="432.5" fillColor="@Color" r="2"/>
会截取成
x="144"
y="432.5"

能不能定义x="为分隔符将文本分为2部分

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f tokens^=1-4^ delims^=^" %%a in ('type "1.txt"') do (
  4.     set m=!m!,%%b
  5.     set n=!n!,%%d
  6. )
  7. >"2.txt" echo x="!m:~1!"
  8. >>"2.txt" echo y="!n:~1!"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

完全没有自学能力的吗?

TOP

返回列表