标题: 出题:按特定条件查找文本内容(新手进)
[打印本页]
作者: 26933062
时间: 2008-5-24 01:20
标题: 出题:按特定条件查找文本内容(新手进)
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 ]
作者: pusofalse
时间: 2008-5-24 01:32
一句完成?
作者: 26933062
时间: 2008-5-24 01:34
Quote: |
Originally posted by pusofalse at 2008-5-24 01:32:
一句完成? |
|
两个要求,两个代码,
一句肯定不能完成啊。。。
作者: bat-zw
时间: 2008-5-24 02:04
标题: 呵呵,还是我先来抛个石头吧:
第二题就留给大家了,第一题如下(为开拓一下思路):
@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 ]
作者: pusofalse
时间: 2008-5-24 02:10
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%!
作者: 26933062
时间: 2008-5-24 02:14
标题: 5 楼
虽达到效果,但代码不够简洁,不够效率,加2分鼓励!继续努力,争取在一个for里完成。
作者: pusofalse
时间: 2008-5-24 02:18
Quote: |
Originally posted by 26933062 at 2008-5-24 02:14 AM:
虽达到效果,但代码不够简洁,不够效率,加2分鼓励!继续努力,争取在一个for里完成。 |
|
谢谢鼓励。。。 完全彼此误解了啊,我问是不是一句完成,是问是不是在一句for中完成。。。 而你理解的貌似是两个问题,两段代码 - -||||||
谢谢。。。
作者: bat-zw
时间: 2008-5-24 02:23
标题: 我再来抛:
第二题其实只要稍改下我前面的代码就可以了:
@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 ]
作者: 26933062
时间: 2008-5-24 02:26
利用 set /a n+=1 来记录每一行,不失为一个办法,但似乎还可以更简洁。
也许谈不上更简洁,但还有其它办法,支持一题多解。。继续。。
作者: 26933062
时间: 2008-5-24 02:27
标题: 回 8 楼
你还是新手啊?
老鸟了。。。
作者: pusofalse
时间: 2008-5-24 02:31
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+ ... |
|
厉害~~~
作者: 26933062
时间: 2008-5-24 02:33
标题: 回 8 楼
稀里糊涂就给你加分了,你的代码结果不正确。。。
作者: bat-zw
时间: 2008-5-24 02:34
还想到个利用for /l %%i in 。。。 的,我就不再写了,留给pusofalse兄弟多多思考了。
作者: bat-zw
时间: 2008-5-24 02:36
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 ]
作者: 26933062
时间: 2008-5-24 02:37
Quote: |
Originally posted by zw19750516 at 2008-5-24 02:36:
怎么不正确了,晕。。。 |
|
最后一行没有显示出来。
作者: bat-zw
时间: 2008-5-24 02:41
Quote: |
Originally posted by 26933062 at 2008-5-24 02:37:
最后一行没有显示出来。 |
|
abcd不是最后一行?
作者: 26933062
时间: 2008-5-24 02:50
看我的样本,最后一行是 “下正确”
作者: terse
时间: 2008-5-24 03:00
报到
作者: bat-zw
时间: 2008-5-24 03:01
标题: 这样可以不:
加个abcd是不是倒数第二行判断:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (b.txt) do (
set str=%%i&set /a n+=1
set _!n!=%%i
if "!str:~,4!"=="abcd" call :lp
)
set /a m=n-1
set str=!_%m%!
if "!str:~,4!"=="abcd" echo !_%n%!
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%!
作者: 26933062
时间: 2008-5-24 03:07
还要考虑 简洁和效率
作者: terse
时间: 2008-5-24 10:20
发一个 这样处理行不
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
set str=%%i
if "!str:~,4!"=="abcd" echo !var!&echo %%i
set var=%%i
)
pause
我也要分
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
if defined str1 echo !str1!&echo !var!&echo %%i&set str1=
set str=%%i
if "!str:~,4!"=="abcd" set str1=!var!
set var=%%i
)
pause
[
Last edited by terse on 2008-5-24 at 10:33 AM ]
作者: bat-zw
时间: 2008-5-24 11:16
标题: 这下可以了吧:
昨晚思路卡住了:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (b.txt) do (
set /a n+=1
set _!n!=%%i
if !n! geq 3 call :lp
)
pause>nul&goto :eof
:lp
set c=%n%
set /a b=c-1,a=c-2
set str=!_%b%!
if "!str:~,4!"=="abcd" echo !_%a%!&echo !_%b%!&echo !_%c%!
[
Last edited by zw19750516 on 2008-5-24 at 11:18 AM ]
作者: bat-zw
时间: 2008-5-24 11:26
Quote: |
Originally posted by terse at 2008-5-24 10:20:
发一个 这样处理行不
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
set str=%%i
if "!str:~,4!"=="abcd" echo !var!& ... |
|
高。。。