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

回复 10楼 的帖子

我是新手,刚从新手训练营出来。
我从新手训练营出来后,就迷失方向了,不知道怎么继续学批处理了,我把论坛挨个翻了一遍,又发现在这一块,有好多题。
我就继续练下去。
请batman多多指教!
(*^_^*)

TOP

只能优化成3楼的了:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set v=%%i
  4.     set /a max=0,n=0,m+=1
  5.     call :lp
  6.     if !n! gtr !max! set max=!n!&set xx=%%i
  7. )
  8. echo %xx%&pause&exit/b
  9. :lp
  10.     if "!v:~0,1!" neq " " set /a n+=1
  11.     set v=!v:~1!
  12.     if "!v!" neq "" goto lp
  13. goto :eof
复制代码
(*^_^*)

TOP

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

TOP

太复杂了,想办法优化:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set v=%%i
  4.     set n=0
  5.     set /a m+=1
  6.     call :lp
  7.     set _!m!=!n!#%%i
  8. )
  9. set max=0
  10. call :next
  11. for /f "tokens=1 delims=#" %%a in ("!var!") do (
  12.         set s=%%a
  13.         if !s! gtr %max% set max=!s!
  14. )
  15. call :next
  16. for /f "tokens=1,2 delims=#" %%a in ("!var!") do (
  17.         if %%a==%max% echo %%b
  18. )
  19. pause&exit/b
  20. :next
  21. for /l %%i in (1 1 %m%) do (
  22.     set c=%%i
  23.     call,set var=%%_!c!%%
  24. )
  25. goto :eof
  26. :lp
  27.     if "!v:~0,1!" neq " " set /a n+=1
  28.     set v=!v:~1!
  29.     if "!v!" neq "" goto lp
  30. goto :eof
复制代码
1

评分人数

    • batman: 为学习的精神加分PB + 3
(*^_^*)

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

  可以考虑 findstr /o 方案。
/O        在每个匹配行前打印字符偏移量。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

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

TOP

原帖由 batman 于 2008-7-26 08:19 发表
下面给出本人的方案一:@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  ...


有一点小错误,加完分才看出来。变量%%_%num%%是字符数最多的行,没有进行条件约束而每次都赋值给它,导致输出的字符数正确,行的内容却每次都是最后的那一行。
心绪平和,眼藏静谧。

TOP

下面给出本人的方案一:
  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

@echo off
Setlocal Enabledelayedexpansion
set n=0
for /f "delims=" %%i in (a.txt) do (
      set "ke=%%i"
      set ke1=!ke: =!
      set m=0
      call :1                  
)
echo %wang%
pause
goto :eof
:1
  if not "!ke1:~%m%,1!"=="" set /a m+=1&goto 1
  if %m% gtr %n% set n=%m%&set wang=%ke%
  goto :eof
4

评分人数

TOP

这题还要输出最多的字符在第几行吗?
如果是,包含空行吗?
心绪平和,眼藏静谧。

TOP

返回列表