[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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


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

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







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

下面给出本人的方案一:
  1. @echo off
  2. set num=0
  3. for /f "delims=" %%i in (a.txt) do  set "str=%%i"&call,set "str=%%str: =%%"&call :lp "%%i"
  4. call,echo %%_%num%%% %num%个字符
  5. pause>nul&goto :eof
  6. :lp
  7. set "str=%str:~1%"&set /a n+=1
  8. if defined str goto lp
  9. if %n% geq %num% set "num=%n%"&set "_%num%=%~1"
  10. set "n=0"
复制代码

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

评分人数

***共同提高***

TOP

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

TOP

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

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

TOP

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

TOP

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

TOP

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

TOP

返回列表