返回列表 发帖

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

本帖最后由 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,那么如何知道你要替换的是什么,需替换的内容有什么特征与其他内容区分开来
rem 猜的。win7以上系统运行
powershell -c "$a=gc '顶楼测试数据.txt';if($a -match 'CIRCLE\s+20.00'){$a -replace '\bT\d+\b','T23'}"
pauseCOPY

TOP

也是猜的
@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%i in ('findstr /i /r /m /c:"\<CIRCLE[ ][ ]*20\.00\>" *.txt') do (
    (for /f "tokens=* usebackq" %%j in ("%%i") do (
        set "s=%%j"
        if /i "!s:~0,1!" == "T" (
            for /f "tokens=*delims=0123456789" %%k in ("!s:~1!") do (
                if "%%k" == "" (echo;T23) else echo;!s!
            )
        ) else echo;!s!
    ))>"%%i.Log"
)
pauseCOPY

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
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 }" "输入文件"COPY
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"COPY

TOP

返回列表