标题: [文本处理] 批处理实现文本左右对齐排版源代码的困惑 [打印本页]
作者: 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- @echo off
- Setlocal Enabledelayedexpansion
- set n=0
- for /f "tokens=1,2*" %%i in (1.txt) do (
- set "ke=%%i %%j"
- set m=0
- call :1
- )
- for /f "tokens=1,2*" %%i in (1.txt) do (
- set "ke1=%%i %%j"
- set ke2=%%i
- set m1=0
- call :2
- echo !ke2! %%j %%k
- )
- pause
- goto :eof
- :1
- if not "!ke:~%m%,1!"=="" set /a m+=1&goto 1
- rem 如果这行文本的前面有空格就跳过空格
- if %m% gtr %n% set n=%m%
- goto :eof
- :2
- if not "!ke1:~%m1%,1!"=="" set /a m1+=1&goto 2
- set /a dd=n-m1
- for /l %%a in (1,1,%dd%) do set "ke2=!ke2! "
- 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是每行的长度- @echo off&Setlocal Enabledelayedexpansion
- set n=0
- for %%a in (1 2) do for /f "tokns=1,2*" %%b in (1.txt) do (
- set "k=%%b %%c"&set "s=%%b"&set m=0
- call:a %%a
- if %%a==2 echo;!s! %%c %%d
- )
- pause&exit
- :a
- if not "!k:~%m%,1!"=="" set/a m+=1&goto:a
- if %1==1 (if %m% gtr %n% set n=%m%) else (
- set/a d=n-m
- for/l %%a in (1,1,!d!) do set "s=!s! "
- )
复制代码
[ 本帖最后由 hanyeguxing 于 2011-1-24 18:37 编辑 ]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |