中国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
状态 离线
『楼 主』:  出题:按特定条件查找文本内容(新手进)

a.txt 内容
sdfgsdfgsdfg
上正确
abcddfja;正确
下正确
sdfgsdgs
sdfgsdgsdg
55555555555
上正确
abcd正确
下正确
fgfdgsdfg
77777777777
上正确
abcddkfja
下正确
tuytutyuy
gfhgfh
上正确
abcd正确
下正确
要求一:显示a.txt中以 abcd 开头的行和它的上一行。
要求二:显示a.txt中以 abcd 开头的行和它的上一行及下一行。

为方便验证,在abcd开头的行的上下行分别以上正确、和下正确标明,所以不能以这些内容为判断基准。即:只能以是否 abcd 开头来判断



...

[ Last edited by 26933062 on 2008-5-24 at 01:46 AM ]



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




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

一句完成?



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-5-24 01:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





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



  Quote:
Originally posted by pusofalse at 2008-5-24 01:32:
一句完成?

两个要求,两个代码,
一句肯定不能完成啊。。。



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

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 4 楼』:  呵呵,还是我先来抛个石头吧:

第二题就留给大家了,第一题如下(为开拓一下思路):
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
    set str=%%i&set /a n+=1
    set _!n!=%%i
    if "!str:~,4!"=="abcd" call :lp
)
pause>nul&goto :eof
:lp
set b=%n%&set /a a=b-1
echo !_%a%!&echo !_%b%!
[ Last edited by zw19750516 on 2008-5-24 at 02:05 AM ]



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




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

1
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do (
        set/a n+=1
        set !n!=%%a
)
for /l %%a in (1 1 %n%) do if "!%%a:~0,4!" equ "abcd" call :lp %%a

pause&goto :eof


:lp
set/a x=%1-1
echo !%x%!
echo !%1!
2.
@echo off&setlocal enabledelayedexpansion
for /f "delims=:" %%a in ('findstr /n .* a.txt') do set end=%%a
for /f "delims=" %%a in (a.txt) do (
        set/a n+=1
        set !n!=%%a
)
for /l %%a in (1 1 %n%) do if "!%%a:~0,4!" equ "abcd" call :lp %%a

pause&goto :eof


:lp
set/a x=%1-1
set/a m=%1+1
echo !%x%!
echo !%1!
if %m% lss %end% echo !%m%!


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




心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-5-24 02:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





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

虽达到效果,但代码不够简洁,不够效率,加2分鼓励!继续努力,争取在一个for里完成。



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




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



  Quote:
Originally posted by 26933062 at 2008-5-24 02:14 AM:
虽达到效果,但代码不够简洁,不够效率,加2分鼓励!继续努力,争取在一个for里完成。

谢谢鼓励。。。 完全彼此误解了啊,我问是不是一句完成,是问是不是在一句for中完成。。。 而你理解的貌似是两个问题,两段代码 - -||||||
谢谢。。。



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-5-24 02:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


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

第二题其实只要稍改下我前面的代码就可以了:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
    set str=%%i&set /a n+=1
    set _!n!=%%i
    if "!str:~,4!"=="abcd" call :lp
)
pause>nul&goto :eof
:lp
if defined c echo !_%c%!
set b=%n%
set /a a=b-1,c=b+1
echo !_%a%!&echo !_%b%!
ps:我也是新手,加分不,呵呵。

[ Last edited by zw19750516 on 2008-5-24 at 02:25 AM ]

   此帖被 +8 点积分      点击查看详情   
评分人:【 26933062 分数: +5  时间:2008-5-24 02:29
评分人:【 pusofalse 分数: +3  时间:2008-5-24 02:30




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





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

利用 set /a n+=1 来记录每一行,不失为一个办法,但似乎还可以更简洁。
也许谈不上更简洁,但还有其它办法,支持一题多解。。继续。。



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





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

你还是新手啊?
老鸟了。。。



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




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



  Quote:
Originally posted by zw19750516 at 2008-5-24 02:23 AM:
第二题其实只要稍改下我前面的代码就可以了:
[code]
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
    set str=%%i&set /a n+ ...

厉害~~~



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-5-24 02:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





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

稀里糊涂就给你加分了,你的代码结果不正确。。。



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

永远的学习者


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

还想到个利用for /l %%i in 。。。 的,我就不再写了,留给pusofalse兄弟多多思考了。



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

永远的学习者


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



  Quote:
Originally posted by 26933062 at 2008-5-24 02:33:
稀里糊涂就给你加分了,你的代码结果不正确。。。

怎么不正确了,晕。。。
运行结果:
sdfjafj2上
abcddfja;
dfaf下
asdfj;af7上
abcd
dsfajfa下
ajdfa9djf上
abcddkfja
adfie下
djf;3a上
abcd未行
[ Last edited by zw19750516 on 2008-5-24 at 02:40 AM ]



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





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



  Quote:
Originally posted by zw19750516 at 2008-5-24 02:36:

怎么不正确了,晕。。。

最后一行没有显示出来。



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


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



论坛跳转: