Board logo

标题: [文本处理] 从一个TXT文本读取字符串替换另外一个TXT文本中对应的字符串 [打印本页]

作者: TXTUSER    时间: 昨天 21:11     标题: 从一个TXT文本读取字符串替换另外一个TXT文本中对应的字符串

从《字典》TXT文本中读取字符串替换《原文》TXT文本中对应的字符串;
字典TXT
A=SIN(Y)
B=LOG(100)
C=TAN(Z)
D=COS(X)

以下N行省略...
原文TXT
AD=MAX(A,B)+MAX(C,D)

.....以下N行省略
结果的例子
AD=MAX(SIN(Y),LOG(100))+MAX(TAN(Z),COS(X))
作者: aloha20200628    时间: 昨天 22:43

本帖最后由 aloha20200628 于 2024-10-31 23:24 编辑

回复 1# TXTUSER

匹配范围》原文.txt 每行可能出现的两种类型函数表达式中的一种,如下示例:
      AD=MAX(A,B)+MAX(C,D)
      XY=MIN(A,C)
  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f "tokens=1-6 delims=(,)" %%a in (
  3.    'findstr /i "([a-z][a-z]*,[a-z][a-z]*)" 原文.txt') do (
  4.    set "s=%%a(_%%b,_%%c)" &if "%%d" neq "" set "s=!s!%%d(_%%e,_%%f)"
  5.    for /f "tokens=1-2 delims==" %%x in (
  6.       'findstr /i "%%b= %%c= %%e= %%f=" 《字典》.txt') do set "s=!s:_%%x=%%y!"
  7.    echo,!s!
  8. ))>"原文.new.txt" 2>nul
  9. type "原文.new.txt"
  10. endlocal&pause&exit/b
复制代码

作者: TXTUSER    时间: 昨天 23:44

回复  TXTUSER

匹配范围》原文.txt 每行可能出现的两种类型函数表达式中的一种,如下示例:
      AD= ...
aloha20200628 发表于 2024-10-31 22:43


原文不是单一的一行,有很多行算式
AD=MAX(A,B)+MAX(C,D)
SU=DC(OE+FC)
HI=SUM(A*OE)
文本内容很多,每行都是一个算式

字典业有很多条
A=SIN(Y)
B=LOG(100)
C=TAN(Z)
D=COS(X)
OE=POW(3)
FC=SQRT(6)
以下N行省略...
请老师再优化一下
作者: qixiaobin0715    时间: 3 小时前

本帖最后由 qixiaobin0715 于 2024-11-1 09:30 编辑

回复 1# TXTUSER
你把原文txt放到网盘上,让大家帮你参谋参谋。
举例示范规律性不强,你自己又没说清楚。
作者: TXTUSER    时间: 2 小时前

回复 4# qixiaobin0715 提示
附件上传不成功
作者: qixiaobin0715    时间: 1 小时前

回复 5# TXTUSER
本论坛关闭了附件上传功能,我说的是网盘
作者: aloha20200628    时间: 1 小时前

本帖最后由 aloha20200628 于 2024-11-1 11:10 编辑

回复 3# TXTUSER

二楼代码已订正如下,可以匹配3楼的示例样本了...
  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f "delims=" %%s in (原文.txt) do (
  3.    set "s=%%s"
  4.    for /f "tokens=1-4 delims=()" %%a in ("%%s") do (
  5.       for /f "tokens=1-2 delims=,+-/*" %%1 in ("%%b") do (
  6.          for /f "tokens=1-2 delims==" %%x in (
  7.             'findstr /i "%%1= %%2=" 《字典》.txt'
  8.          ) do set "s=!s:(%%x=(%%y!" &set "s=!s:%%x)=%%y)!")
  9.       if "%%d" neq "" for /f "tokens=1-2 delims=,+-/*" %%1 in ("%%d") do (
  10.          for /f "tokens=1-2 delims==" %%x in (
  11.             'findstr /i "%%1= %%2=" 《字典》.txt'
  12.          ) do set "s=!s:(%%x=(%%y!" &set "s=!s:%%x)=%%y)!")
  13.    )
  14.    if "%%s" neq "!s!" echo,!s!
  15. ))>"原文.new.txt" 2>nul
  16. type "原文.new.txt"
  17. endlocal&pause&exit/b
复制代码





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