|
yoyodos
初级用户
积分 128
发帖 59
注册 2007-9-15
状态 离线
|
『第
16 楼』:
很容易了,把echo 变量 改为echo 到文件就行了
|
|
2007-9-24 13:00 |
|
|
123cainiao
初级用户
积分 97
发帖 41
注册 2007-8-30
状态 离线
|
『第
17 楼』:
Quote: | Originally posted by yoyodos at 2007-9-24 01:00 PM:
很容易了,把echo 变量 改为echo 到文件就行了 |
|
呵呵,谢谢你.我明白了.
|
|
2007-9-24 13:02 |
|
|
yoyodos
初级用户
积分 128
发帖 59
注册 2007-9-15
状态 离线
|
|
2007-9-24 13:08 |
|
|
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 ]
|
|
2007-9-24 15:01 |
|
|
123cainiao
初级用户
积分 97
发帖 41
注册 2007-8-30
状态 离线
|
『第
20 楼』:
Quote: | 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 |
|
|
123cainiao
初级用户
积分 97
发帖 41
注册 2007-8-30
状态 离线
|
『第
22 楼』:
Quote: | 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 |
|
|
123cainiao
初级用户
积分 97
发帖 41
注册 2007-8-30
状态 离线
|
『第
24 楼』:
Quote: | 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
|
|
2007-9-24 19:13 |
|
|
123cainiao
初级用户
积分 97
发帖 41
注册 2007-8-30
状态 离线
|
『第
26 楼』:
Quote: | 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
|
|
2007-9-25 14:23 |
|
|
yoyodos
初级用户
积分 128
发帖 59
注册 2007-9-15
状态 离线
|
『第
29 楼』:
terse回答的很好呀,哈,123cainiao还有问题没??我也练练
|
|
2007-9-25 14:29 |
|
|
123cainiao
初级用户
积分 97
发帖 41
注册 2007-8-30
状态 离线
|
『第
30 楼』:
Quote: | Originally posted by yoyodos at 2007-9-25 02:29 PM:
terse回答的很好呀,哈,123cainiao还有问题没??我也练练 |
|
呵呵,谢谢各位回答,不同的程序表达方式,达到相同的目的,值得好好研究.
顺祝大家中秋快乐,合家幸福!
|
|
2007-9-25 16:37 |
|
|