[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程批处理在线视频分享
返回列表 发帖
  1. """
  2. #方法4 重用了方法3的上半部分代码算出列1列2最大长度,以此对齐顶点。
  3. #这个方法的思路是不使用空格或者其它符号填充,而是在写入文件时,
  4. #指针直接前移使字符对齐。空的字符位置会自动被\x00填充?
  5. #
  6. """
  7. def f4():
  8.    
  9.     f=open("1.txt","r")
  10.     txt=f.readlines()
  11.     maxa=0
  12.     maxb=0
  13.     for line in txt:
  14.         line=line.rsplit()
  15.         la=len(line[0])
  16.         lb=len(line[1])
  17.         if la >maxa:
  18.             maxa=la
  19.         if lb > maxb:
  20.             maxb=lb
  21.     w=open("temp.txt","w+")
  22.     for line in txt:
  23.         line=line.rsplit()
  24.         la=len(line[0])
  25.         lb=len(line[1])
  26.         w.write(line[0])
  27.         #算了半天
  28.         tw=maxa+maxb+1-la-lb
  29.         w.seek(tw+w.tell())
  30.         w.write(line[1])
  31.         w.seek(w.tell()+1)
  32.         w.write(line[2]+"\n")
  33.     w.flush()
  34.     w.seek(0)
  35.     txt=w.read()
  36.     print(txt)
  37.         
  38. """
  39. 输出:
  40. 111111111111111111111
复制代码
-_-!剪贴碰到00自动截断了。输出内容不能完全贴上来。

TOP

本帖最后由 ShenMian 于 2018-1-20 22:52 编辑

格式:call:printf 字符串1 空格数 字符串2 空格数 ... 空格数 字符串n
代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2,3" %%a in (1.txt) do (
  4.     call:printf %%a 20 %%b 20 %%c
  5.     echo;
  6. )
  7. exit /b
  8. :printf
  9. set /p "=%~1"<nul
  10. set length=0
  11. set "str=%~1"
  12. :printf_0
  13. if "!str:~%length%!" == "" (
  14. for /l %%a in (%length%,1,%2) do set /p = <nul
  15. shift
  16. shift
  17. if not "%~3" == "" goto printf
  18. exit /b
  19. )
  20. set /a length+=1
  21. goto printf_0
复制代码

TOP

回复 12# batman


    版主,您好,看了您的代码很实用,但是如果有一种情况就是第二列有空的,怎么处理呢?
例如原文本:
111111111111111111111    98912 张三
222222222222222222    150020 李四四
  333333333333333333333    360000 王五
444444444444444444         赵六六
  555555555555555555        田七
666666666666666666666    999999 舞吧


如果第二列为空的话,生成的第三列就跑到了第二列去了,请问下怎么解决呢?
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

TOP

本帖最后由 ai20110304 于 2018-9-4 15:45 编辑

回复 1# pusofalse
  1. ::文本两端对齐
  2. @echo off & setlocal enabledelayedexpansion
  3. cd /d %~dp0
  4. ::将空格替换成#号,再在基础上进行切割,结合tab水平制作符。
  5. for /f "delims=" %%i in (1.txt) do (
  6. set "str=%%i"
  7. set "str=!str: =#!"
  8. rem echo;!str!
  9. for /f "tokens=1-3 delims=#" %%a in ("!str!") do echo;%%a %%b %%c
  10. )
  11. pause
复制代码
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
我就是我,不一样的烟火!

TOP

返回列表