返回列表 发帖

【练习-002】批处理查找字符数最多的文本行


有文本a.txt如下:
aaaaaaa                                 aaaa bbbbbb ccccccccccc dddd
aa  aaaaaaa bbbbbbbb cccccccccc ddddddddddddd eeeeeee
     aaaaaaaaaaaa bbbbbbbbbbb cccccccccccccccccccc
                aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aa
                    aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb
aaaaaaaaa        ccccccccc bbbbbbbbbbbbb               dddddddddddddddddCOPY
通过批处理查找出文本中字符数(不含空格)最多的行并输出,很明显就是
aaaaaaaaa        ccccccccc bbbbbbbbbbbbb               dddddddddddddddddCOPY
要求:
1 不生成临时文件
2 代码简洁,高效,通用性好
3 加分仍以思路为重

----------------------------------------------------------------------------------------------------------------------------------------------------
至目前已有解决方案:见3楼浅默和4楼本人的方案,期待更多方案的出现。







[ 本帖最后由 batman 于 2008-7-27 23:58 编辑 ]
***共同提高***

下面给出本人的方案一:
@echo off
set num=0
for /f "delims=" %%i in (a.txt) do  set "str=%%i"&call,set "str=%%str: =%%"&call :lp "%%i"
call,echo %%_%num%%% %num%个字符
pause>nul&goto :eof
:lp
set "str=%str:~1%"&set /a n+=1
if defined str goto lp
if %n% geq %num% set "num=%n%"&set "_%num%=%~1"
set "n=0"COPY

[ 本帖最后由 batman 于 2008-7-26 18:25 编辑 ]
1

评分人数

***共同提高***

TOP

确实如此,粗心了,谢谢兄弟指出。
***共同提高***

TOP

原帖由 namejm 于 2008-7-30 10:59 发表
  可以考虑 findstr /o 方案。

思路是对的,但实施起来还真的有点麻烦:
@echo off&setlocal enabledelayedexpansion
set "max=0"
for /f "delims=" %%i in (1.txt) do set "str=%%i"&echo !str: =!>>2.txt
echo end>>2.txt
for /f "tokens=1* delims=: " %%i in ('findstr /o .* 2.txt') do (
    set /a n+=1&set "_!n!=%%i"&set ".!n!=%%j"
    set /a m=n-1
  if !m! geq 1 call :lp
)
echo.&echo 字符数最多的行为:!a%max%!
echo.&echo     字符数为:%max%个   
del /q 2.txt&pause>nul&goto :eof
:lp
set /a num=_%n%-_%m%-2
if %num% gtr %max% set "max=%num%"&set "a!max!=!.%m%!"COPY
***共同提高***

TOP

回复楼上:
兄弟看来是特有求知欲和动手欲的,这么老的练习贴子也让你翻到了,还做了解答,呵呵,加油。。。
***共同提高***

TOP

呵呵,这块确实是很多人没有注意到的,如果说学批处理有速成班的话,这块就算是的吧。。。
祝兄弟学得开心并学有所成,本人将尽一切能力帮助学习批处理的新人们。
***共同提高***

TOP

如果文本行都在80个字符以内的话,可用以下这种高效的办法:
@echo off&setlocal enabledelayedexpansion
for /l %%a in (1,1,80) do set "k=!k!0"
for /f "delims=" %%a in (a.txt) do (
    set "str=%%a"&set "str=%k% !str: =!"
    set "str=!str:~-80!"&set /a n+=1
    for /f %%b in ("!str!") do set "_%%b=%%a"&set ".%%a=!n!"
)
for /f "tokens=1,2 delims==_" %%a in ('set _') do (
    set "str=%%a"&set "var=%%b"
    for /l %%i in (1,1,80) do if "!str:~%%i!" equ "" set /a num=79-%%i&goto next
)
:next
echo 字符数是多的是!.%var%!行,共有%num%个字符。
pause>nulCOPY
***共同提高***

TOP

返回列表