中国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
状态 离线
『楼 主』:  也出一题,娱乐娱乐:以子串为分隔符现实字符串的内容

set "Str=bat1 ,1bbat;22     t2bat;3 ,3   3bat444babat"
要求以字符串bat为分割符,显示变量str的内容
变量str中bat的位置和数量都不确定。
如上面显示的结果是
1 ,1b
;22     t2
;3 ,3   3
444ba

前提:不允许把bat替换成某一单一字符后再用for截取。

───────────────── 版务记录 ─────────────────
执行:HAT
操作:[2008-11-09]在帖子标题中增加搜索关键字
说明:原标题"也出一题,娱乐娱乐。"不利于论坛搜索
───────────────── 版务记录 ─────────────────


[ Last edited by HAT on 2008-11-9 at 02:49 ]



致精致简!
2008-5-12 00:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

似乎有个帖子……

2008-5-12 01:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 3 楼』:  

把 bat  删除也不行吗?~

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

永远的学习者


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


@echo off
set "Str=bat1 ,1bbat;22     t2bat;3 ,3   3bat444babat"
:begin
set /a n+=1
for /f "tokens=%n% delims=bat" %%i in ("%str%") do echo %%i&goto begin
pause>nul




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





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

4 楼 zw19750516 兄弟,显示结果漏掉了不少字符啊。。
2楼  意在娱乐,动动脑筋,有没有过这个帖无所谓吧。
3楼  删除可以,只要达到效果。



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





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



  Quote:
Originally posted by zw19750516 at 2008-5-12 01:17 AM:
[code]
@echo off
set "Str=bat1 ,1bbat;22     t2bat;3 ,3   3bat444babat"
:begin
set /a n+=1
for /f "tokens=%n% delims=bat" %%i in ("%str%") do echo %%i&goto be ...

楼主发帖的意图就是为了告诉大家在for里面是不能直接用多个字符做分隔符的吧^_^

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

永远的学习者


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

有这个嫌疑,呵呵,不能把bat替换成单一字符,等于卡死了答题人的脖子。
本来是多么容易的事啊:
@echo off
set "str=bat1 ,1bbat;22     t2bat;3 ,3   3bat444babat"
set str=%str:bat=#%
:begin
set /a n+=1
for /f "tokens=%n% delims=#" %%i in ("%str%") do echo %%i&goto begin
pause>nul
[ Last edited by zw19750516 on 2008-5-12 at 01:38 AM ]



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





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

替换 #=bat  不允许吗



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





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



  Quote:
Originally posted by HAT at 2008-5-12 01:30:

楼主发帖的意图就是为了告诉大家在for里面是不能直接用多个字符做分隔符的吧^_^

这个相信大家都知道,只是想考考大家的思路,喜欢动脑筋的就动动脑筋,认为无聊的就全当是个水帖吧。。^_^。。



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





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



  Quote:
Originally posted by zw19750516 at 2008-5-12 01:34:
有这个嫌疑,呵呵,不能把bat替换成单一字符,等于卡死了答题人的脖子。

并非没有答案。。。。。



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





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

我的思路是先获取bat在str中的位置(这一步已经完成),然后依次截取就行了(思考中),不知是否和 26933062 兄的想法一样。

2008-5-12 01:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





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

@echo off&setlocal enabledelayedexpansion
set "var=bat1 ,1bbat;22     t2bat;3 ,3   3bat444babat"
set var=%var: =#%
set var=%var:;=`%
set var=%var:bat= %
call:lp "%var%"
pause
goto :eof
:lp
for /f "tokens=1* delims= " %%i in (%1) do (
        set var=%%i
        set var=!var:#= !
        set var=!var:`=;!
        echo !var!
        call :lp "%%j"
        )

[ Last edited by terse on 2008-5-12 at 01:58 AM ]



简单!简单!再简单!
2008-5-12 01:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by terse at 2008-5-12 01:56:
@echo off&setlocal enabledelayedexpansion
set "var=bat1 ,1bbat;22     t2bat;3 ,3   3bat444babat"
set var=%var: =#%
set var=%var:;=`%
set var=%var:bat= %
call:lp "%var%" ...

pause 应该放在:lp上面……而不是下面

而且还是违规替换了bat……

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





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

呵呵, terse 疯狂大替换,缺点是如果变量本身含有#号,则显示结果少字符。
并且将bat替换为空格,再用for以空格为分割符截取,属违规。。。



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

永远的学习者


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


@echo off&setlocal enabledelayedexpansion
set "str=bat1 ,1bbat;22     t2bat;3 ,3   3bat444babat"
:lp
if "%str:~,3%"=="bat" (
   set /a n+=1
   if !n! gtr 1 echo.!var!&set var=
   set str=%str:~3%
   ) else (
   set a=%str:~,1%&set var=!var!!a!
   set str=%str:~1%
)
if defined str goto lp
pause>nul
[ Last edited by zw19750516 on 2008-5-12 at 02:22 AM ]

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




批处理之家新域名:www.bathome.net
2008-5-12 02:13
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: