|
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
状态 离线
|
|
2008-5-12 01:12 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
|
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 |
|
|
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 |
|
|
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 ]
|
批处理之家新域名:www.bathome.net |
|
2008-5-12 02:13 |
|