[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
我来个  补齐字符方法   效率不怎么样
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%i in (1.txt) do call :lp %%i
  3. for /l %%i in (1 1 %t%) do for /l %%j in (1 1 !%%il!) do set "%%iv=!%%iv! "
  4. for /f "tokens=*" %%i in (1.txt) do call :lp0 %%i
  5. pause&exit
  6. :lp0
  7. set/a n+=1
  8.     if "%1"=="" set n=& echo %str1%&set str1=&goto :eof
  9.     set "str=%1!%n%v!"
  10.     call set "str1=%str1%%%str:~,!%n%l!%%"
  11. shift
  12. goto lp0
  13. :lp
  14. set/a n+=1
  15. if not defined %n%l set %n%l=0
  16.     if "%1"=="" set n=&goto :eof
  17.     for /f "skip=1 delims=:" %%i in ('^(echo %1^&echo.^)^|findstr /o ".*"') do set m=%%i
  18.     set t=%n%
  19.     if %m% gtr !%n%l! set %n%l=%m%
  20. shift
  21. goto lp
复制代码

TOP

我稍微换一下思路,应该说是尽量的通用了……如果某文本太过畸形 那也是没办法的事了……
文本内容更新为:
  1. 111111111111111111111                                      98912 张三
  2. 222222222222222222    150020 李四四
  3.   333333333333333333333    360000 王五
  4. 4444444444444444444321542365445432453243243423432   11111143242342332 赵六六
  5.   555555555555555555    222 田七
  6. 666666666666666666666    999999                                   舞吧
复制代码
  1. @echo off
  2. mode con cols=100 lines=20
  3. setlocal enabledelayedexpansion
  4. for /l %%a in (1,1,80) do set kong= !kong!
  5. for /f "eol= tokens=1,2,3" %%a in ('type 1.txt') do (
  6. set lie1-2=%%a%%b%kong%
  7. set lie1-2=!lie1-2:~0,80!
  8. set lie1-2=%%a!lie1-2:%%a%%b=!%%b
  9. echo,!lie1-2!   %%c
  10. )
  11. pause
复制代码
原理:例如文本内容为:
ab******1*d
abc*************2********e
用for获得前面的两列
直接组合 则免去了中间的空格:
ab1
abc2
直接加上80个空格
ab1***************************……
abc2***************************……
然后保存前80位。
ab1*********……***
abc2********……***
把空格前移
ab*********……***1
abc********……***2
这样前面的就基本对齐了。后面的第三列 就不用说了…
我觉得应该可以了……至少我自己用不上太通用的,这个代码自己也没有当工具用过




忽忽……加了中文 或者字符……就被淘汰了……

[ 本帖最后由 523066680 于 2008-8-12 15:49 编辑 ]
2

评分人数

TOP

我也行!

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set a=0
  4. for /f "eol= tokens=1,2,3" %%a in ('type 1.txt') do (
  5. set /a a+=1
  6. set "lie1=%%a                                      "
  7. set lie1=!lie1:~0,30!
  8. set "lie2=%%b                                      "
  9. set lie2=!lie2:~0,20!
  10. echo,!lie1!!lie2:%%b=!%%b  %%c
  11. )
  12. pause
复制代码
1

评分人数

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2*" %%a in ('type temp.txt') do (
  4.    set "mo=%%a"&set "niu=%%b"&set "m=0"&set "n=0"&set "very="
  5.    call :ming0 %%a %%b %%c
  6. )
  7. echo.&pause&exit
  8. :ming0
  9. if not "!mo:~%m%,1!"=="" (set "momo=!mo:~%m%,1!"&set /a "m+=1"&goto :ming0)
  10. :ming1
  11. if not "!niu:~%n%,1!"=="" (set "niuniu=!niu:~%n%,1!"&set /a "n+=1"&goto :ming1)
  12. set /a "ming=30-%m%-%n%"
  13. for /l %%i in (1 1 %ming%) do set "very=!very! "
  14. echo %1 %very% %2 %3
复制代码
2

评分人数

TOP

  默认情况下,一个tab键产生的空格相当于8个空格键产生的空格,如果字符串少于8个字符,则一个tab键就足够排版;如果多于8个字符,那么,一个tab键就没法排版了,需要增加tab键的个数,以保证tab键产生的空格个数多于字符串长度。
1

评分人数

    • 浅默: 不知最多能给几分PB + 4
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

使用tab键的都有哪些条件呢?11楼的测试文件不能成功,如果两行差距太大也不成功.

TOP

原帖由 风行者 于 2008-7-26 20:03 发表
@echo off & setlocal enabledelayedexpansion
for /f "tokens=1-3 delims= " %%a in (1.txt) do (
set /a n+=1
if !n!==1 echo %%a      %%b   %%c
if !n!==2 echo %%a         %%b  %%c
if !n!==3 echo %%a   ...

这种解法的确是太可爱了,100%的就题解题!
***共同提高***

TOP

可以直接这样。。
echo 111111111111111111111      98912 张三
echo 222222222222222222        150020 李四四
echo 333333333333333333333     360000 王五
...
...
加分鼓励!一同进步!
心绪平和,眼藏静谧。

TOP

我是最最新手,向你们学习

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=1-3 delims= " %%a in (1.txt) do (
  3. set /a n+=1
  4. if !n!==1 echo %%a      %%b   %%c
  5. if !n!==2 echo %%a         %%b  %%c
  6. if !n!==3 echo %%a      %%b  %%c
  7. if !n!==4 echo %%a         %%b    %%c
  8. if !n!==5 echo %%a         %%b     %%c
  9. if !n!==6 echo %%a      %%b  %%c
  10. )
  11. pause
复制代码
1

评分人数

TOP

原帖由 fastslz 于 2008-7-26 18:35 发表
是论坛字符问题
方法其实很简单call标签删除前面及后面的空格字符,替换空格字符为Tab键字符set "str=%str: =这里是Tab键字符%"
附上附件

使用制表符是默认的左对齐分列,主要用来从文本向excel中导数据。
***共同提高***

TOP

就题解题

个人认为如本题要充分考虑代码通用性的话,就会是一个相当复杂的过程,
于是,就题解题:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "kong=           "
  3. for /f "delims=" %%a in (1.txt) do (
  4.     for %%i in (%%a) do (
  5.         set "str=%%i"&set /a n+=1
  6.         if !n! equ 2 (
  7.            set "str=%kong%!str!"
  8.            set /p=!str:~-10! <nul
  9.            ) else (
  10.            set "str=!str!%kong%"
  11.            set /p=!str:~,20! <nul
  12.     ))
  13.     set "n=0"&echo.
  14. )
  15. pause>nul
复制代码
1

评分人数

***共同提高***

TOP

原帖由 fastslz 于 2008-7-26 18:35 发表
是论坛字符问题
方法其实很简单call标签删除前面及后面的空格字符,替换空格字符为Tab键字符set "str=%str: =这里是Tab键字符%"
附上附件

测试文本:
  1. 1111111    aaaaaaaaaaaa 张三
  2. 222222sdf222222222222    150020 李四四
  3.   3333333sfd33333333333333    0 王五
  4. 44444444444aa4444444    2332 赵sdfafa六六
  5.   555555555    222 田七
  6. 666666666666666666666asaaaaaaaaa    9999999999999 舞
复制代码
心绪平和,眼藏静谧。

TOP

是论坛字符问题
方法其实很简单call标签删除前面及后面的空格字符,替换空格字符为Tab键字符set "str=%str: =这里是Tab键字符%"
附上附件
2

评分人数

TOP

原帖由 fastslz 于 2008-7-26 18:11 发表
这个是潜规则默认排版方式
@echo off
for /f "delims=*" %%a in (1.txt) do call :xxx %%a
pause&exit

:xxx
    set "str=%*"
    set "str=%str: =        %"
    echo.%str%
goto:eof


第一次看到如此的方法,还没弄明白怎么回事,在我电脑上测试着不正确。但仍旧学习了!~
心绪平和,眼藏静谧。

TOP

这个是潜规则默认排版方式
  1. @echo off
  2. for /f "delims=*" %%a in (1.txt) do call :xxx %%a
  3. pause&exit
  4. :xxx
  5.     set "str=%*"
  6.     REM 注意:等号左侧是制表符
  7.     set "str=%str: = %"
  8.     echo.%str%
  9. goto:eof
复制代码
1

评分人数

TOP

返回列表