中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 条件文本文件替换[已解答]
<   <<   [1] [2] [3] [4]  >>   >
作者:
标题: 条件文本文件替换[已解答] 上一主题 | 下一主题
yoyodos
初级用户




积分 128
发帖 59
注册 2007-9-15
状态 离线
『第 16 楼』:  

很容易了,把echo 变量 改为echo 到文件就行了


2007-9-24 13:00
查看资料  发送邮件  发短消息 网志  OICQ (52721292)  编辑帖子  回复  引用回复
123cainiao
初级用户





积分 97
发帖 41
注册 2007-8-30
状态 离线
『第 17 楼』:  

Originally posted by yoyodos at 2007-9-24 01:00 PM: 很容易了,把echo 变量 改为echo 到文件就行了
 呵呵,谢谢你.我明白了.


2007-9-24 13:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yoyodos
初级用户




积分 128
发帖 59
注册 2007-9-15
状态 离线
『第 18 楼』:  

一起学习。。哈哈


2007-9-24 13:08
查看资料  发送邮件  发短消息 网志  OICQ (52721292)  编辑帖子  回复  引用回复
yoyodos
初级用户




积分 128
发帖 59
注册 2007-9-15
状态 离线
『第 19 楼』:  

我也贴一个,哈哈
@echo off
setlocal enabledelayedexpansion
cd.>tmp.txt
set /a x=0

for /f "tokens=1 delims=姓名," %%r in (ab.txt) do echo %%r>>tmp.txt
for /f "delims=" %%a in (ab.txt) do (
    set /a x+=1
    set str=%%a
    for /f "tokens=1* delims=:" %%h in ('findstr /n "." tmp.txt') do (
        set n1=%%h
            if !n1!==!x! (
                set replaced=%%i
        )
    )
    for /f "tokens=1* delims=:" %%m in ('findstr /n "." cd.txt') do (
        set n2=%%m
            if !n2!==!x! (
                set new="%%n"
            )
    )
    call :replace
)
del /q tmp.txt
pause

:replace
    set str=!str:%replaced%=%new%!
    echo !str!
[ Last edited by yoyodos on 2007-9-24 at 03:02 PM ]


   此帖被 +2 点积分    点击查看详情   
评分人:【 123cainiao 分数: +2  时间:2007-9-24 15:51


2007-9-24 15:01
查看资料  发送邮件  发短消息 网志  OICQ (52721292)  编辑帖子  回复  引用回复
123cainiao
初级用户





积分 97
发帖 41
注册 2007-8-30
状态 离线
『第 20 楼』:  

Originally posted by yoyodos at 2007-9-24 03:01 PM: 我也贴一个,哈哈 [code] @echo off setlocal enabledelayedexpansion cd.>tmp.txt set /a x=0 for /f "tokens=1 delims=姓名," %%r in (ab.txt) do echo %%r>>tmp.txt fo ...
总体来说主要有2个关键点值得学习 1、是 "tokens=1 delims=“的用法,这一点很多时候非常容易弄错 2、是变量替换提取 如果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 rster_www_er 姓 名 "李似答",ID'102' ,tel'0202211',0,25,11 abcd rster_www_er 姓 名 "王二",ID'102' ,tel'01023311',0,25,11 .... 那么以上的参考答案代码都需要做适当的修改。 从这里可以知道,如果是编辑一个通用性强的代码,最好能够采用模糊查找定位的方法,比如本例,即使ab.txt文件每行的长度和里面其它内容变化,只要含有 [姓 名 "王二"]这样的字段,就可以查到,并替换. 请问是否可以实现?


2007-9-24 15:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yoyodos
初级用户




积分 128
发帖 59
注册 2007-9-15
状态 离线
『第 21 楼』:  

不太明白你的意思, 思路就是将每一行字符串的 “姓名” 替换成 "abcd rster_www_er 姓 名" 是不是就可以呢? 哈哈


2007-9-24 16:10
查看资料  发送邮件  发短消息 网志  OICQ (52721292)  编辑帖子  回复  引用回复
123cainiao
初级用户





积分 97
发帖 41
注册 2007-8-30
状态 离线
『第 22 楼』:  

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 ]


2007-9-24 16:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yoyodos
初级用户




积分 128
发帖 59
注册 2007-9-15
状态 离线
『第 23 楼』:  

晕,以姓名作分隔符不就行了吗 在delims=后面写姓名,姓 名,姓 名。。。。就能得到后面的名字了啊


2007-9-24 17:18
查看资料  发送邮件  发短消息 网志  OICQ (52721292)  编辑帖子  回复  引用回复
123cainiao
初级用户





积分 97
发帖 41
注册 2007-8-30
状态 离线
『第 24 楼』:  

Originally posted by yoyodos at 2007-9-24 05:18 PM: 晕,以姓名作分隔符不就行了吗 在delims=后面写姓名,姓 名,姓 名。。。。就能得到后面的名字了啊
谢谢你回答,经过反复测试,做了适当调整,可以了。 你的代码适用性能是非常好的。再次感谢!


2007-9-24 18:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 25 楼』:  

我也来一段学习 @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


   此帖被 +2 点积分    点击查看详情   
评分人:【 123cainiao 分数: +2  时间:2007-9-25 16:32


2007-9-24 19:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
123cainiao
初级用户





积分 97
发帖 41
注册 2007-8-30
状态 离线
『第 26 楼』:  

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


2007-9-25 13:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
123cainiao
初级用户





积分 97
发帖 41
注册 2007-8-30
状态 离线
『第 27 楼』:  问题的延伸,看看下面的情况会用到很多

如果把问题延伸,比如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 ........ 这里问题就不单单是对等行替换了,需要涉及复制,想来还是会复杂一些。


2007-9-25 13:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 28 楼』:  

@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


   此帖被 +2 点积分    点击查看详情   
评分人:【 123cainiao 分数: +2  时间:2007-9-25 16:31


2007-9-25 14:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yoyodos
初级用户




积分 128
发帖 59
注册 2007-9-15
状态 离线
『第 29 楼』:  

terse回答的很好呀,哈,123cainiao还有问题没??我也练练


2007-9-25 14:29
查看资料  发送邮件  发短消息 网志  OICQ (52721292)  编辑帖子  回复  引用回复
123cainiao
初级用户





积分 97
发帖 41
注册 2007-8-30
状态 离线
『第 30 楼』:  

Originally posted by yoyodos at 2007-9-25 02:29 PM: terse回答的很好呀,哈,123cainiao还有问题没??我也练练
呵呵,谢谢各位回答,不同的程序表达方式,达到相同的目的,值得好好研究.    顺祝大家中秋快乐,合家幸福!


2007-9-25 16:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
<   <<   [1] [2] [3] [4]  >>   >
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: