中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 也出一题,娱乐娱乐:以子串为分隔符现实字符串的内容
« [1] [2] »
作者:
标题: 也出一题,娱乐娱乐:以子串为分隔符现实字符串的内容 上一主题 | 下一主题
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 16 楼』:  

没注意 11 楼 HAT 兄的回帖,抱歉。。。
我的思路与你不一样,兴许你的代码更高效简洁,期待你的结果。。。



致精致简!
2008-5-12 02:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 17 楼』:  回复 15 楼



  Quote:
Originally posted by zw19750516 at 2008-5-12 02:13:
[code]
@echo off&setlocal enabledelayedexpansion
set "str=bat1 ,1bbat;22     t2bat;3 ,3   3bat444babat"
:lp
if "%str:~,3%"=="bat" (
   echo.!var!&set var= ...

不错,但还有个bug 若str结尾不是bat时,会丢失最后的字符。

[ Last edited by 26933062 on 2008-5-12 at 02:23 AM ]



致精致简!
2008-5-12 02:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 18 楼』:  



  Quote:
Originally posted by 26933062 at 2008-5-12 02:20:

不错,但还有个bug 若str结尾不是bat时,会丢失最后的字符。

[ Last edited by 26933062 on 2008-5-12 at 02:23 AM ]

再改:
@echo off&setlocal enabledelayedexpansion
set "str=1ba2bat1 ,1bbat;22     t2bat;3 ,3   3bat444babat9999"&set n=0
:lp
if "%str:~,3%"=="bat" (
   set /a n+=1
   set str=%str:~3%
   ) else (
   set a=%str:~,1%&set var!n!=!var%n%!!a!
   set str=%str:~1%
)
if defined str goto lp
for /l %%i in (0,1,!n!) do echo.!var%%i!
pause>nul
[ Last edited by zw19750516 on 2008-5-12 at 02:31 AM ]

   此帖被 +5 点积分      点击查看详情   
评分人:【 26933062 分数: +5  时间:2008-5-12 02:35




批处理之家新域名:www.bathome.net
2008-5-12 02:28
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 19 楼』:  

刚才粘错了,再测试看



批处理之家新域名:www.bathome.net
2008-5-12 02:32
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 20 楼』:  18 楼

不错不错,提两个建议:
set a=%str:~,1%&set var!n!=!var%n%!!a!
可改为 set var!n!=!var%n%!%str:~,1%

加一个判断,可避免连续batbat时显示的空行。
for /l %%i in (0,1,!n!) do if defined var%%i echo.!var%%i!



致精致简!
2008-5-12 02:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 21 楼』:  

zw19750516 兄的方法比我的要简洁,学习了,我的还是放弃算了。

2008-5-12 02:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 22 楼』:  

20楼
高见,兄弟考虑问题比我全面啊。



批处理之家新域名:www.bathome.net
2008-5-12 02:46
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
terse
银牌会员





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

其实开始我想的就是逐字判断  后来看可以删 我就用替换了  呵呵  考试老不及格哦  补上一个 算练习吧
@echo off&setlocal enabledelayedexpansion
set "str=bats afi/ ouy#ewbattnvbib atcghbat ret,yre;wih9  %bat"
:lp
if not "!str:~,3!"=="bat" (set var=!var!!str:~,1!) else (
      if not "!var!"=="" echo !var!&set var=
      set str=!str:~2!
      )
      set str=!str:~1!
      if defined str goto lp
      if not "!var!"=="" echo !var!
pause




简单!简单!再简单!
2008-5-12 12:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 24 楼』:  

贴一个我的,效率应该比逐字判断要快点吧?
@echo off
set "Str=bat1 ,1bbatbatbat;22     t2bat;3 ,3   3batbat444babat"
:loop
   set "num=%str:*bat=%"
   call set "var=a%%str:bat%num%=%%a"
   if not "%var%"=="aa" echo.%var:~1,-1%
   set "str=%num%"
   if "%str%"=="%var:~1,-1%" set "num="
   if defined num goto loop
pause




致精致简!
2008-5-12 13:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
FQ
社区乞丐





积分 -61
发帖 37
注册 2008-4-19
状态 离线
『第 25 楼』:  

为何不能用替换呢?其实替换是很简单的啊
@echo off&setlocal
set "str=bat1 ,1bbat;22     t2bat;3 ,3   3bat444babat999999999"
for %%a in ("%str:bat=" "%") do echo/%%~a


2008-5-12 13:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 26 楼』:  

高手啊!!

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


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



论坛跳转: