Board logo

标题: [文本处理] 【已解决】批处理怎样提取文本中指定值? [打印本页]

作者: smss    时间: 2019-7-25 20:39     标题: 【已解决】批处理怎样提取文本中指定值?

本帖最后由 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"
作者: 523066680    时间: 2019-7-25 21:29

完全没有自学能力的吗?
作者: Batcher    时间: 2019-7-26 10:55

  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!"
复制代码

作者: smss    时间: 2019-7-26 13:30

本帖最后由 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部分
作者: xczxczxcz    时间: 2019-7-26 15:25

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

作者: smss    时间: 2019-7-26 18:17

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

回复 5# xczxczxcz
$out ='x="'+($x -join ',')+'"'+"`n"+'y="'+($y -join ',')+'"'
第4句这样才能换行"`n"——"`r`n"
作者: smss    时间: 2019-7-26 19:49

本帖最后由 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=" "之间所有字符可以吗
作者: xczxczxcz    时间: 2019-7-26 20:12

回复 7# smss


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

本帖最后由 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的值归类 以此类推




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