返回列表 发帖
"""
#方法4 重用了方法3的上半部分代码算出列1列2最大长度,以此对齐顶点。
#这个方法的思路是不使用空格或者其它符号填充,而是在写入文件时,
#指针直接前移使字符对齐。空的字符位置会自动被\x00填充?
#
"""
def f4():
   
    f=open("1.txt","r")
    txt=f.readlines()
    maxa=0
    maxb=0
    for line in txt:
        line=line.rsplit()
        la=len(line[0])
        lb=len(line[1])
        if la >maxa:
            maxa=la
        if lb > maxb:
            maxb=lb
    w=open("temp.txt","w+")
    for line in txt:
        line=line.rsplit()
        la=len(line[0])
        lb=len(line[1])
        w.write(line[0])
        #算了半天
        tw=maxa+maxb+1-la-lb
        w.seek(tw+w.tell())
        w.write(line[1])
        w.seek(w.tell()+1)
        w.write(line[2]+"\n")
    w.flush()
    w.seek(0)
    txt=w.read()
    print(txt)
        
"""
输出:
111111111111111111111COPY
-_-!剪贴碰到00自动截断了。输出内容不能完全贴上来。

TOP

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

格式printf 字符串1 空格数 字符串2 空格数 ... 空格数 字符串n
代码:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,3" %%a in (1.txt) do (
    call:printf %%a 20 %%b 20 %%c
    echo;
)
exit /b
:printf
set /p "=%~1"<nul
set length=0
set "str=%~1"
:printf_0
if "!str:~%length%!" == "" (
for /l %%a in (%length%,1,%2) do set /p = <nul
shift
shift
if not "%~3" == "" goto printf
exit /b
)
set /a length+=1
goto printf_0COPY

TOP

回复 12# batman


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

如果第二列为空的话,生成的第三列就跑到了第二列去了,请问下怎么解决呢?

TOP

回复 1# pusofalse
::文本两端对齐
@echo off & setlocal enabledelayedexpansion
cd /d %~dp0
::将空格替换成#号,再在基础上进行切割,结合tab水平制作符。
for /f "delims=" %%i in (1.txt) do (
set "str=%%i"
set "str=!str: =#!"
rem echo;!str!
for /f "tokens=1-3 delims=#" %%a in ("!str!") do echo;%%a %%b %%c
)
pauseCOPY
我就是我,不一样的烟火!

TOP

就题解题,前2列字符目视不超过30个字符,KG30的值取30个空格:
@echo off
set KG30=                              
setlocal enabledelayedexpansion
for /f "tokens=1-3" %%a in (1.txt) do (
set str=%%a%%b%KG30%
set str=!str:~0,30!
set str=!str:%%b=!%%b %%c
echo !str!
)
pauseCOPY

TOP

根据3楼思路改写,实现列与列之间空格最少:
@echo off
setlocal enabledelayedexpansion
set n=0
for /f "tokens=1,2" %%i in (1.txt) do (
    set "var=%%i%%j"
    set m=0
    call :1
)
for /l %%x in (1,1,!n!) do set KG= !KG!
set /a n+=1
for /f "tokens=1-3" %%a in (1.txt) do (
    set str=%%a%%b%KG%
    for %%y in (!n!) do set str=!str:~0,%%y!
    set str=!str:%%b=!%%b %%c
    echo !str!
)
pause
goto :eof
:1
if not "!var:~%m%,1!"=="" set /a m+=1&goto 1
if %m% gtr %n% set n=%m%
goto :eofCOPY

TOP

返回列表