Board logo

标题: 又出文本输出加分题了(新手进): [打印本页]

作者: bat-zw     时间: 2008-5-24 00:42    标题: 又出文本输出加分题了(新手进):
如a.txt:

74x6oe9t0alev
y4y3cjm-2ung8
wvjrz2dauxp42
p-qidvm4f75k7
1111111111111
g5uoqztegt5pe
t-a8qtcfvipky
8545236972344
j-draqyqdxuq0
z6b712dvhnazw
hjiet9gzp6hwz
pmjfrlbuk-hig
sbffbmsrlcw17
l-1m1uqmwqcxl
q_6cxnx_2mylo
i9aceknisqetg
e7e_o76_-clwb
tmnerxm11jrhs
3333333333333
4562345811036
2lip_f01fz18c
uk33iipdgtv_9
bkfo5g-1lvb59
-yn9ds6p-p13s

问题一:写出生成文本a.txt的批处理(模式一样,每行13个随机字符,共20行,纯数字行是因题目要求加的不要生成)
问题二:用批处理找出a.txt中不含数字的行并输出
问题三:用批处理输出a.txt所有的行(但不输出每行的数字),如下:


xoetalev
yycjm-ung
wvjrzdauxp
p-qidvmfk

guoqztegtpe
t-aqtcfvipky

j-draqyqdxuq
zbdvhnazw
hjietgzphwz
pmjfrlbuk-hig
sbffbmsrlcw
l-muqmwqcxl
q_cxnx_mylo
iaceknisqetg
ee_o_-clwb
tmnerxmjrhs


lip_ffzc
ukiipdgtv_
bkfog-lvb
-yndsp-ps
要求:不生成任何其它(除a.txt外)的临时文件。
加分标准:第一个全写出来的加15分
其它酌情加分


Last edited by zw19750516 on 2008-5-24 at 01:26 AM ]

作者: 26933062     时间: 2008-5-24 00:44
问题一没看懂。

作者: 26933062     时间: 2008-5-24 00:53
提议:样本文件中应该再加几行纯数字的行,给问题三增加点难度。

作者: pusofalse     时间: 2008-5-24 02:25
不输出每行的数字。。。 貌似又要用到字符截取和移位了 感觉效率相当低下~

作者: pusofalse     时间: 2008-5-24 02:33
随机生成吗?~ 我生成的每一行中都有数字 ,那问题2不就没法做了~

作者: pusofalse     时间: 2008-5-24 02:35
1
@echo off&setlocal enabledelayedexpansion
set str=1234567890abcdefghijklmnopqrstuvwxyz
:1
set/a n=%random%%%36
call,set var=%%str:~%n%,1%%
set string=%string%%var%
set/a m+=1
if %m% lss 13 goto 1
echo %string%
set m=0
set string=
set/a y+=1
if %y% lss 20 goto 1
pause

作者: pusofalse     时间: 2008-5-24 02:38
2。。。
自己手动修改a.txt 使其中几行没有数字。。- -||
for /f "delims=" %%a in (a.txt) do echo %%a|findstr /v "[0-9]"
pause

作者: bat-zw     时间: 2008-5-24 02:45
第二、三题用我的例文就是的

作者: pusofalse     时间: 2008-5-24 02:47
3

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('findstr /n .* a.txt') do (
set str=%%a
set str=!str:*:=!
set string=
call :lp
echo.!string!
)
pause>nul&goto :eof

:lp
if defined str (
set var=!str:~,1!
for /l %%a in (0 1 9) do if !var! equ %%a set "var="
set string=!string!!var!
set str=!str:~1!
goto lp
)

作者: bat-zw     时间: 2008-5-24 02:47
Originally posted by pusofalse at 2008-5-24 02:38:
2。。。
自己手动修改a.txt 使其中几行没有数字。。- -||
for /f "delims=" %%a in (a.txt) do echo %%a|findstr /v ""
pause

效率是大问题,请修改。

作者: bat-zw     时间: 2008-5-24 02:49
Originally posted by pusofalse at 2008-5-24 02:47:
3

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('findstr /n .* a.txt') do (
set str=%%a
set str=!str:*:=!
set string=
call :lp
echo.!string!
)
pau ...

代码复杂,效率低,改!多用if少用findstr.

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

作者: pusofalse     时间: 2008-5-24 02:50
findstr /v "[0-9]" a.txt

整天都在用for 都思维定向了~~ 原来一句就OK

作者: bat-zw     时间: 2008-5-24 02:52
Originally posted by pusofalse at 2008-5-24 02:50:
findstr /v "" a.txt

整天都在用for 都思维定向了~~ 原来一句就OK

想想除了findstr还有什么别的不。不要还泡在findstr里。

作者: 26933062     时间: 2008-5-24 02:53
Originally posted by pusofalse at 2008-5-24 02:50:
findstr /v "" a.txt

整天都在用for 都思维定向了~~ 原来一句就OK

哈哈,终于开窍了。。。

作者: 26933062     时间: 2008-5-24 02:54
Originally posted by zw19750516 at 2008-5-24 02:52:

想想除了findstr还有什么别的不。不要还泡在findstr里。

findstr 是bat中唯一的正则,用的好,大有用处,并不是只要使用了findstr就会效率低的。关键看你怎么用。。。

作者: pusofalse     时间: 2008-5-24 02:56
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('findstr /n .* a.txt') do (
set str=%%a
for /l %%i in (0 1 9) do set str=!str:%%i=!
set str=!str:*:=!
echo.!str!
)
pause

Last edited by pusofalse on 2008-5-24 at 03:03 AM ]

作者: pusofalse     时间: 2008-5-24 02:58
Originally posted by zw19750516 at 2008-5-24 02:52 AM:

想想除了findstr还有什么别的不。不要还泡在findstr里。


find

作者: terse     时间: 2008-5-24 02:59
替换 替换 再替换

作者: bat-zw     时间: 2008-5-24 03:04
Originally posted by pusofalse at 2008-5-24 02:58:


find

第二题:
delims=0123456789

Last edited by zw19750516 on 2008-5-24 at 03:12 AM ]

作者: pusofalse     时间: 2008-5-24 03:06
Originally posted by zw19750516 at 2008-5-24 03:04 AM:

第二题:
delims=0123456789


你改。。。我也实时在改 。。
果然第三题不能这样做。

Last edited by pusofalse on 2008-5-24 at 03:11 AM ]

作者: 26933062     时间: 2008-5-24 03:10
Originally posted by zw19750516 at 2008-5-24 03:04:

第二题:
delims=0123456789

Last edited by zw19750516 on 2008-5-24 at 03:06 AM ]

确实巧妙,我怎么没想到呢。。。

作者: bat-zw     时间: 2008-5-24 03:11
Originally posted by pusofalse at 2008-5-24 02:56:
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('findstr /n .* a.txt') do (
set str=%%a
for /l %%i in (0 1 9) do set str=!str:%%i=!
set str=!str:*:=!
echo.!st ...

怎么老用findstr /n啊,晕。。。

作者: pusofalse     时间: 2008-5-24 03:18
Originally posted by zw19750516 at 2008-5-24 03:11 AM:

怎么老用findstr /n啊,晕。。。


实在是想不出别的方法了~ 请前辈指点`~

作者: 26933062     时间: 2008-5-24 03:19
用 delims=0123456789 还真不好弄哦?岂不是还要判断每行有几列?
哦! 原来你是第二题这样用,我还以为是第三题呢。。。。

Last edited by 26933062 on 2008-5-24 at 03:21 AM ]

作者: bat-zw     时间: 2008-5-24 03:20
Originally posted by 26933062 at 2008-5-24 03:19:
用 delims=0123456789 还真不好弄哦?岂不是还要判断每行有几列?


@echo off&setlocal enabledelayedexpansion
for /f "delims=0123456789" %%i in (a.txt) do (
set str=%%i
if not "!str:~12!"=="" echo !str!
)
pause>nul

作者: bat-zw     时间: 2008-5-24 03:23
Originally posted by pusofalse at 2008-5-24 03:18:


实在是想不出别的方法了~ 请前辈指点`~


@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
set str=%%i
for /l %%a in (0,1,9) do if defined str set str=!str:%%a=!
echo.!str!
)
pause>nul

作者: 26933062     时间: 2008-5-24 03:23
原来你是第二题这样用,我还以为是第三题呢。。。。
你这样还要事先知道每行有多少个字符,那还不如这样。
问题二:用批处理找出a.txt中不含数字的行并输出
:

@echo off
for /f "tokens=1* delims=0123456789" %%a in (a.txt) do (
if "%%b"=="" echo %%a
)
pause

作者: bat-zw     时间: 2008-5-24 03:25
Originally posted by 26933062 at 2008-5-24 03:19:
用 delims=0123456789 还真不好弄哦?岂不是还要判断每行有几列?
哦! 原来你是第二题这样用,我还以为是第三题呢。。。。

Last edited by 26933062 on 2008-5-24 at 03:21 AM ]

第三题也应该可以的,就是我还没想到好点的办法。

作者: pusofalse     时间: 2008-5-24 03:30
Originally posted by 26933062 at 2008-5-24 03:23 AM:
原来你是第二题这样用,我还以为是第三题呢。。。。
你这样还要事先知道每行有多少个字符,那还不如这样。
问题二:用批处理找出a.txt中不含数 ...


如果一行中的数字都在行末 那也会输出有数字的这行啊~

Last edited by pusofalse on 2008-5-24 at 03:33 AM ]

作者: 26933062     时间: 2008-5-24 03:38
Originally posted by pusofalse at 2008-5-24 03:30:


如果一行中的数字都在行末 那也会输出有数字的这行啊~

Last edited by pusofalse on 2008-5-24 at 03:33 AM ]

确实,
我欠考虑。。。

作者: bat-zw     时间: 2008-5-24 03:38
Originally posted by 26933062 at 2008-5-24 03:23:
原来你是第二题这样用,我还以为是第三题呢。。。。
你这样还要事先知道每行有多少个字符,那还不如这样。
问题二:用批处理找出a.txt中不含数 ...

晕,结果不对,呵呵。
第二题的解看来还是findstr /v最通用。

Last edited by zw19750516 on 2008-5-24 at 03:41 AM ]

作者: 26933062     时间: 2008-5-24 03:45
Originally posted by zw19750516 at 2008-5-24 03:38:

晕,结果不对,呵呵。
第二题的解看来还是findstr /v最通用。

Last edited by zw19750516 on 2008-5-24 at 03:41 AM ]



首选当然是 findstr /v
当然非要用for也不是不可以。

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
set str=%%i
for /l %%a in (0 1 9) do set str=!str:%%a=!
if "!str!"=="%%i" echo %%i
)
pause


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

作者: pusofalse     时间: 2008-5-24 03:53
水一下。。。^_^
貌似26933062前辈以前在百度知道上解答过我的一个关于for的问题,没想到现在又能遇见~

作者: 26933062     时间: 2008-5-24 03:55
哦?
看见雷同的代码了? ^_^

作者: pusofalse     时间: 2008-5-24 03:57
Originally posted by 26933062 at 2008-5-24 03:55 AM:
哦?
看见雷同的代码了? ^_^




没。。。只是前天时看到有前辈称呼你。。。 就一下想起来了。。。

我现在还记得我问的那个问题是
reply from 192.168.18.7:


如何提取出 192.168.18.7 不要":"