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

[文本处理] 批处理如何实现根据文本中是否含有指定字符串对文本里的特定内容进行替换

本帖最后由 pcl_test 于 2016-10-10 20:46 编辑

改个程序代码,数量很多,想用批处理完成,懂的进来看看

(/T0400B   M0059 CIRCLE    20.00    0.00     0.00)
(/T3200X   M0008 CIRCLE     6.40    0.00     0.00)
(/T3700X   M0009 CIRCLE     7.20    0.00     0.00)
(/T4100X   M0014 CIRCLE    12.00    0.00     0.00)
(/T4400X   M0051 CIRCLE     4.20    0.00     0.00)
(/T4900X   M0006 CIRCLE     4.80    0.00     0.00)
(/T5100X   M0011 CIRCLE     9.00    0.00     0.00)
(/T5300X   M0075 CIRCLE     3.20    0.00     0.00)
T04
X952.02Y150
GRD/L 36.62 1 U 16.6 1
X952.1Y16.84
GRD/L 37.23 3 U 31.55 3
-----------------------------------------
有CIRCLE    20.00的就把所有的T04改成T23,重要的是如果不知道CIRCLE    20.00是T04的情况下,有可能是T05,T06,如何把它改成T23
1

评分人数

这是数控程序?
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

并未说明/T0400B要不要替换成/T2300B,那么如何知道你要替换的是什么,需替换的内容有什么特征与其他内容区分开来
  1. rem 猜的。win7以上系统运行
  2. powershell -c "$a=gc '顶楼测试数据.txt';if($a -match 'CIRCLE\s+20.00'){$a -replace '\bT\d+\b','T23'}"
  3. pause
复制代码

TOP

也是猜的
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('findstr /i /r /m /c:"\<CIRCLE[ ][ ]*20\.00\>" *.txt') do (
  3.     (for /f "tokens=* usebackq" %%j in ("%%i") do (
  4.         set "s=%%j"
  5.         if /i "!s:~0,1!" == "T" (
  6.             for /f "tokens=*delims=0123456789" %%k in ("!s:~1!") do (
  7.                 if "%%k" == "" (echo;T23) else echo;!s!
  8.             )
  9.         ) else echo;!s!
  10.     ))>"%%i.Log"
  11. )
  12. pause
复制代码

TOP

好的,谢谢,T04只是举个例子,可以看作一个变量,因为有很多程序,能否加个判断,如果有CIRCLE    20.00,就把前面的T什么什么改成T23,如果有CIRCLE     6.40就把前面的T什么什么改成T24,如果有CIRCLE     7.20,就把前面的T什么什么改成T25,

TOP

本帖最后由 DiamondbacK 于 2016-10-11 20:35 编辑

回复 5# yujiaphf
  1. gawk "BEGIN { replacements[\"20\\.00\"] = \"T23\"; replacements[\"6\\.40\"] = \"T24\"; replacements[\"7\\.20\"] = \"T25\"; while (getline < ARGV[1]) for ( item in replacements ) if ( patterns[item] == nul && $0 ~ \"CIRCLE +\" item ) patterns[item] = substr($1, match($1, /T/), 3) } { for ( item in patterns ) gsub(patterns[item], replacements[item]); print }" "输入文件"
复制代码
  1. PowerShell -c "$replacements = @{'20\.00' = 'T23'; '6\.40' = 'T24'; '7\.20' = 'T25'}; $patterns = @{}; $text = (Get-Content \"输入文件\") -join \"`n\"; Foreach ($item in $replacements.keys) { if ($text -match '(T\d\d).+CIRCLE +' + $item) { $patterns[$item] = $matches[1] } }; Foreach ($item in $patterns.keys) { $text = $text -replace $patterns[$item], $replacements[$item] }; $text"
复制代码

TOP

返回列表