Board logo

标题: [文本处理] 批处理实现文本左右对齐排版源代码的困惑 [打印本页]

作者: Hello123World    时间: 2011-1-24 11:58     标题: 批处理实现文本左右对齐排版源代码的困惑

这是源代码,是批处理之家以前的练习题
http://bbs.bathome.net/viewthread.php?tid=1246&extra=&highlight=%CE%C4%B1%BE%D7%F3%D3%D2%B6%D4%C6%EB%C5%C5%B0%E6&page=1
  1. @echo off
  2. Setlocal Enabledelayedexpansion
  3. set n=0
  4. for /f "tokens=1,2*" %%i in (1.txt) do (
  5.       set "ke=%%i %%j"
  6.       set m=0
  7.       call :1              
  8. )
  9. for /f "tokens=1,2*" %%i in (1.txt) do (
  10.       set "ke1=%%i %%j"
  11.       set ke2=%%i            
  12.       set m1=0
  13.       call :2
  14.       echo !ke2! %%j %%k         
  15. )
  16. pause
  17. goto :eof
  18. :1
  19.   if not "!ke:~%m%,1!"=="" set /a m+=1&goto 1
  20. rem 如果这行文本的前面有空格就跳过空格
  21.   if %m% gtr %n% set n=%m%
  22.   goto :eof  
  23. :2
  24.   if not "!ke1:~%m1%,1!"=="" set /a m1+=1&goto 2
  25.   set /a dd=n-m1
  26.   for /l %%a in (1,1,%dd%) do set "ke2=!ke2! "     
  27.   goto :eof
复制代码
set "ke=%%i %%j"
set "ke1=%%i %%j"
的意义我没看出区别,
if not "!ke:~%m%,1!"=="" set /a m+=1&goto 1
if not "!ke1:~%m1%,1!"=="" set /a m1+=1&goto 2
如果上句没有区别,那么这两句的意思都是得到字符串长度的意思。
那么set /a dd=n-m1不管我怎么看都是等于零,因为n==m==m1。
究竟我的思路哪里出问题了,请大神指教。
作者: hanyeguxing    时间: 2011-1-24 17:30

第一个for 用来计算n,n 不是每行字符的长度,而是长度的最大值
第一个for 用来计算m1,m1是每行的长度
  1. @echo off&Setlocal Enabledelayedexpansion
  2. set n=0
  3. for %%a in (1 2) do for /f "tokns=1,2*" %%b in (1.txt) do (
  4.       set "k=%%b %%c"&set "s=%%b"&set m=0
  5.       call:a %%a
  6.       if %%a==2 echo;!s! %%c %%d
  7. )
  8. pause&exit
  9. :a
  10. if not "!k:~%m%,1!"=="" set/a m+=1&goto:a
  11. if %1==1 (if %m% gtr %n% set n=%m%) else (
  12.       set/a d=n-m
  13.       for/l %%a in (1,1,!d!) do set "s=!s! "
  14. )
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-24 18:37 编辑 ]




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2