中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-26 02:59
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,275 会员排行
DOS批处理 & 脚本技术(批处理室) » 条件文本文件替换[已解答]
可打印版本  3,731 / 45
第16楼 yoyodos 发表于 2007-09-24 13:00
初级用户 发帖 59 积分 128
很容易了,把echo 变量 改为echo 到文件就行了
第17楼 123cainiao 发表于 2007-09-24 13:02
初级用户 发帖 41 积分 97
Originally posted by yoyodos at 2007-9-24 01:00 PM:
很容易了,把echo 变量 改为echo 到文件就行了


 呵呵,谢谢你.我明白了.
第18楼 yoyodos 发表于 2007-09-24 13:08
初级用户 发帖 59 积分 128
一起学习。。哈哈
第19楼 yoyodos 发表于 2007-09-24 15:01
初级用户 发帖 59 积分 128
我也贴一个,哈哈


[ Last edited by yoyodos on 2007-9-24 at 03:02 PM ]
第20楼 123cainiao 发表于 2007-09-24 15:51
初级用户 发帖 41 积分 97
Originally posted by yoyodos at 2007-9-24 03:01 PM:
我也贴一个,哈哈
第21楼 yoyodos 发表于 2007-09-24 16:10
初级用户 发帖 59 积分 128
不太明白你的意思,
思路就是将每一行字符串的 “姓名” 替换成 "abcd rster_www_er 姓 名"
是不是就可以呢?
哈哈
第22楼 123cainiao 发表于 2007-09-24 16:40
初级用户 发帖 41 积分 97
Originally posted by yoyodos at 2007-9-24 04:10 PM:
不太明白你的意思,
思路就是将每一行字符串的 “姓名” 替换成 "abcd rster_www_er 姓 名"
是不是就可以呢?
哈哈

不是的,我的意思是作为通用性强的搜索语句,采用模糊定位查找,比采用按照分割符号来查找的方式更加实用。
比如最开始的ab.txt文件里的内容:
姓名"张三",ID'102' ,tel'0102211',0,25,11
姓名"李似答",ID'102' ,tel'0202211',0,25,11
姓名"王二",ID'102' ,tel'01023311',0,25,11
这是非常工整的
要是不工整的,变为:
abcd rster_www_er 姓 名 "张三",ID'102' ,tel'0102211',0,25,11
abcd ,er 姓 名 "李似答",ID'102' ,tel'0202211',0,25,11
abcd rster,www,r 姓 名 "王二",ID'102' ,tel'01023311',0,25,11
这样的格式,严格以分割符查找的设计思路,几乎用不成,而采用模糊查找才能实现。
总的来说就是无论你每行文字变成什么样,在每行任何不同位置变换,都能实现替换功能。

[ Last edited by 123cainiao on 2007-9-24 at 04:43 PM ]
第23楼 yoyodos 发表于 2007-09-24 17:18
初级用户 发帖 59 积分 128
晕,以姓名作分隔符不就行了吗
在delims=后面写姓名,姓 名,姓 名。。。。就能得到后面的名字了啊
第24楼 123cainiao 发表于 2007-09-24 18:49
初级用户 发帖 41 积分 97
Originally posted by yoyodos at 2007-9-24 05:18 PM:
晕,以姓名作分隔符不就行了吗
在delims=后面写姓名,姓 名,姓 名。。。。就能得到后面的名字了啊

谢谢你回答,经过反复测试,做了适当调整,可以了。
你的代码适用性能是非常好的。再次感谢!
第25楼 terse 发表于 2007-09-24 19:13
银牌会员 发帖 946 积分 2,404
我也来一段学习
@echo off
setlocal enabledelayedexpansion
set mn=0
for /f "tokens=1* delims=," %%i in (ab.txt) do (
set data=%%i%%j
set /a mn+=1
for /f "tokens=1* delims=:" %%a in ('findstr /n .* cd.txt') do (
if !mn! EQU %%a set data=!data:%%i=姓名"%%b",!
)
echo !data!>>c12.txt
)
pause
第26楼 123cainiao 发表于 2007-09-25 13:25
初级用户 发帖 41 积分 97
Originally posted by terse at 2007-9-24 07:13 PM:
我也来一段学习
@echo off
setlocal enabledelayedexpansion
set mn=0
for /f "tokens=1* delims=," %%i in (ab.txt) do (
set data=%%i%%j
set /a mn+=1
for ...

以上所有回复的参考答案中terse给的适应性能最强,可以不加修改完全适应通用性文件的查找替换,只许需要把 姓名 字段替换为你要查找的即可.
谢谢terse
第27楼 123cainiao 发表于 2007-09-25 13:43
初级用户 发帖 41 积分 97
问题的延伸,看看下面的情况会用到很多
如果把问题延伸,比如ab.txt文件只有这么一行
姓名"张三",ID'102' ,tel'0102211',0,25,11
现在cd.txt文件还是不变:
赵括
王彬
李铃
。。。。。
可否做到从ab.txt文件里替换第一行后的姓名后,直接可以复制这种格式,生成一个完全和cd.txt文件行数一致的文件ef.txt:
姓名"赵括",ID'102' ,tel'0102211',0,25,11
姓名"王彬",ID'102' ,tel'0102211',0,25,11
姓名"李铃",ID'102' ,tel'0102211',0,25,11
........

这里问题就不单单是对等行替换了,需要涉及复制,想来还是会复杂一些。
第28楼 terse 发表于 2007-09-25 14:23
银牌会员 发帖 946 积分 2,404
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1* delims=," %%i in (ab.txt) do (
set data=%%j
)
for /f "tokens=1* delims=:" %%a in (cd.txt) do (
>>c12.txt echo 姓名"%%a",!data!
)
pause
第29楼 yoyodos 发表于 2007-09-25 14:29
初级用户 发帖 59 积分 128
terse回答的很好呀,哈,123cainiao还有问题没??我也练练
第30楼 123cainiao 发表于 2007-09-25 16:37
初级用户 发帖 41 积分 97
Originally posted by yoyodos at 2007-9-25 02:29 PM:
terse回答的很好呀,哈,123cainiao还有问题没??我也练练


呵呵,谢谢各位回答,不同的程序表达方式,达到相同的目的,值得好好研究.
   顺祝大家中秋快乐,合家幸福!
上一页  1 2 3 4  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023