中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: [已结]字串替换请指教 上一主题 | 下一主题
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『楼 主』:  [已结]字串替换请指教

a.txt 文件内容如下,以下是一行,很长.里面随机的位置出现gif 链接。一行中大概多的有20多个这样的gif图片,数量不定。

李云龙已和张部长纠缠了{http://www.abc.com/image/234652.gif}多小时了,不为别的,就{http://www.abc.com/image/gif1/144652.gif}想多弄点“边区造”手榴弹。{http://www.abc.com/image/gif2/964673.gif}八路军太行兵工厂的土产。平心而论,李云龙一点儿也不认为这种土造手榴弹有什么好, 比起日军的那种柠檬式手榴弹差得太远啦,“边区造”的铸铁弹体质量太差,爆炸后有时只炸成两半,弹片的杀伤效果极糟糕,这种玩艺儿在战斗中常耽误事。可话又说回来了,就这种 “边区造”也不可能敞开了供应部队,用李云龙的话说:能拔脓就{http://www.abc.com/image/gif1/144652.gif}好膏药,有总比没有强 。


b.txt内容: 将gif下载分析出来的实际文字

两个 234652.gif
是  144652.gif
这是 964673.gif


请求:将a.txt中的gif链接 替换为b文件中的实际文字。要求不改变a.txt原有结构(不加换行符)。

看似很简单,虽然我也实现了,但采用的是很笨的方法。定义了30个变量才搞定,有没有更好的方法。查找了很多p.没有找到方法。(有很多列,列的个数也是随机的 )

[ Last edited by sady2009 on 2009-4-14 at 21:24 ]

2009-4-14 20:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 2 楼』:  

链接的地址一样,只是文件名不一样是吗?



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-14 20:19
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 3 楼』:  

回老大。链接地址不全一样。
http://www.abc.com/image/gif1/xxxxxx.img
http://www.abc.com/image/gif2/xxxxxx.img
http://www.abc.com/image/gif3/xxxxxx.img

类似如此, 但 xxxxxx.img在b.txt中都可以找到的. xxxxxx固定的,6个随机数字

[ Last edited by sady2009 on 2009-4-14 at 20:32 ]

2009-4-14 20:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 4 楼』:  好了

@echo off&SETLOCAL ENABLEDELAYEDEXPANSION
set n=0
for /f "tokens=1,2" %%a in (b.txt) do (set/a n+=1&set #!n!=%%a&set $%%b=$!n!&set $!n!=%%b)
(for /f "delims=" %%a in (a.txt) do (set "str=%%a"
    set var=!str:{= !
    call :sub !var:}= !
    for /l %%i in (1,1,%n%) do (call set "str=%%str:{!$%%i!}=!#%%i!%%")
    echo.!str!

))>c.txt
type c.txt
pause
goto :eof

:sub
if "%~1"=="" goto :eof
if /i "%~x1"==".gif" (set "!$%~nx1!=%1")
shift
goto :sub

   此帖被 +1 点积分    点击查看详情   
评分人:【 sady2009 分数: +1  时间:2009-4-14 21:24




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-14 21:11
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 5 楼』:  

老大的代码真是神奇.下来学习学习.

自以为自己不是菜鸟,但看了您的代码,我又回到了菜鸟的行列.

[ Last edited by sady2009 on 2009-4-14 at 21:39 ]

2009-4-14 21:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 6 楼』:  


@echo off&setlocal enabledelayedexpansion
set /p str=<a.txt
for /f "tokens=1,2" %%a in (b.txt) do set str=!str:%%b}=@.@" "%%a!
(for %%a in ("%str:{=" "%") do if "%%~nxa" neq "@.@" set/p=%%~a<nul)>a_new.txt


   此帖被 +10 点积分         点击查看详情   
评分人:【 netbenton 分数: +8  时间:2009-4-15 00:57
评分人:【 freeants001 分数: +2  时间:2009-4-15 09:56


2009-4-14 22:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by tireless at 2009-4-14 22:16:
[code]@echo off&setlocal enabledelayedexpansion
set /p str=<a.txt
for /f "tokens=1,2" %%a in (b.txt) do set str=!str:%%b}=@.@" "%%a!
(for %%a in ("%str:{=" & ...

您好,如果a.txt 不是一句子,还含有空行, 该怎么写呢?
自己加了for /f 后运行出错.

四楼的代码完全符合,如果有更简洁,运行更快的,求之不得了。

谢谢了!

2009-4-15 00:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 8 楼』:  

6楼的才方法才叫绝了。

替换加入标志并分段,判断把以\@.@为尾的段剔除,并把剩下的连接。

用得好巧呀,速度也快,开眼界了!

通常文件不文件不止一行,加个for就可以解决多行的问题了,

[ Last edited by netbenton on 2009-4-14 at 22:57 ]



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-15 00:53
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 9 楼』:  


@echo off&setlocal enabledelayedexpansion
(for /f "delims=" %%a in (a.txt) do (
  set str=%%a
  for /f "tokens=1,2" %%a in (b.txt) do set str=!str:%%b}=@.@" "%%a!
  for %%a in ("!str:{=" "!") do if "%%~nxa" neq "@.@" set/p=%%~a<nul
  echo.
))>a_new.txt


2009-4-15 01:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 10 楼』:  

真是太厉害了,文件名的扩展也能这样用。

各位老大的批处理真是出神入化。

2009-4-15 01:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 11 楼』:  取长补短为提速


@echo off&SETLOCAL ENABLEDELAYEDEXPANSION

for /f "tokens=1,2" %%a in (b.txt) do (set #%%b=%%a)
(for /f "delims=" %%a in (a.txt) do (
    set "str=%%a"
    set "str=!str:{=" "!"
    for %%i in ("!str:}=" "!") do if defined #%%~nxi (set/p=!#%%~nxi!<nul) else (set/p=%%i<nul)
    echo.
))>c.txt
type c.txt
pause

@echo off&setlocal enabledelayedexpansion
(for /f "delims=" %%a in (a.txt) do (
  set str=%%a
  for /f "tokens=1,2" %%a in (b.txt) do set "str=!str:%%b}=%%%%a!"
  call echo !str:{http:=%%!
))>a_new.txt
pause
[ Last edited by netbenton on 2009-4-15 at 23:11 ]



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-15 07:28
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 12 楼』:  

非常感谢, 速度感觉快一些。
但美中不足是会丢失一些空格,当 http前面是一个空格的时候。

2009-4-15 08:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
freeants001
中级用户




积分 330
发帖 244
注册 2006-4-14
来自 湖北
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by tireless at 2009-4-14 22:16:
[code]@echo off&setlocal enabledelayedexpansion
set /p str=<a.txt
for /f "tokens=1,2" %%a in (b.txt) do set str=!str:%%b}=@.@" "%%a!
(for %%a in ("%str:{=" & ...

妙~,

2009-4-15 10:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 14 楼』:  

楼主说的丢失空格问题似乎不存在吧。



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-15 12:46
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 15 楼』:  

回老大, 如果改成下边这样:

云龙已和张部长纠缠了       {http://www.abc.com/image/234652.gif}         多小时了,不为别的....

运行后结果是:

云龙已和张部长纠缠了       两个多小时了,不为别的....

前边的不丢,后边的会丢。tireless老大和您前面的代码的正常。


麻烦看一下。很喜欢这段代码,速度超快的。

[ Last edited by sady2009 on 2009-4-15 at 21:37 ]

2009-4-15 21:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: