[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 19# qixiaobin0715


    感谢指导。看来是字体问题了。
换了自带记事本,依然混乱。

TOP

回复 19# qixiaobin0715


    显示宽度其实是取决于字体,等宽还是比例,全角和半角等,控制台一般是consoles字体,是等宽的,全角输入中英文字符也是相同宽度。

TOP

本帖最后由 qixiaobin0715 于 2024-7-19 12:47 编辑

回复 18# ppll2030
输出的txt文件你用“记事本”打开看看。
不同的文本编辑器,字符不同占用宽度可能会有区别。

TOP

回复 17# qixiaobin0715


    请问大佬,有没有办法输出到txt还能保持队形的。
上面的大佬们都是cmd下输出结果。
计算最大字符串并补齐空格,这个我也搞出来了。
就是不能输出到txt还保持不变形。

TOP

回复 12# 娜美
只要计算出每列的最大字节数,以及各列字节数与最大字节数的差值,然后用空格补齐即可。
可能会稍微复杂些,抽空试试。
1

评分人数

TOP

本帖最后由 newswan 于 2024-7-19 00:22 编辑

假如知道最大宽度是10
  1. awk '{ printf "%-10s %-10s %-10s\n", $1, $2, $3 }' a.txt
复制代码

TOP

回复 14# aloha20200628


    万分感谢,达到预期效果。

TOP

本帖最后由 aloha20200628 于 2024-7-18 12:25 编辑

回复 11# shenlong

参考12楼的经验,谢谢 重写了9楼代码,用以下1.txt示例文件测试效果明显 楼主可试试...
1.txt》
aa  自x车 1232   米
mm命名  abc 5555  米
bbbbb  密码可靠 66  米
同轴3xx   国产321   456 米

TOP

本帖最后由 qixiaobin0715 于 2024-7-18 12:54 编辑

这样可能要美观一些:
  1. @echo off
  2. for /f "tokens=1-3" %%i in (a.txt) do (
  3.     echo,%%i>>temp1
  4.     echo,%%j>>temp2
  5. )
  6. set /a n1=n2=0,y1=y2=0
  7. setlocal enabledelayedexpansion
  8. for %%a in (1 2) do (
  9.     echo,a>>temp%%a
  10.     for /f "delims=:" %%i in ('findstr /o .* temp%%a') do (
  11.         set /a x%%a=%%i-y%%a
  12.         if !n%%a! lss !x%%a! set /a n%%a=x%%a
  13.         set y%%a=%%i
  14.     )
  15.     del temp%%a
  16.     set /a n%%a+=4
  17. for /l %%i in (1,1,!n%%a!) do set BS%%a= !BS%%a!
  18. )
  19. (for /f "tokens=1-2*" %%i in (a.txt) do (
  20.     if "%%j"=="" (set f1=%%i) else (set f1=%%i!BS1!&set f1=!f1:~,%n1%!)
  21.     if "%%k"=="" (set f2=%%j) else (set f2=%%j!BS2!&set f2=!f2:~,%n2%!)
  22.     set f3=%%k
  23.     echo,!f1!!f2!!f3!
  24. ))>b.txt
  25. pause
复制代码
1

评分人数

TOP

字节不同 要对齐  似乎只能改用制表符
  1. awk  -v OFS="\t"  '{print $1,$2,$3}' a.txt
复制代码

TOP

回复 7# aloha20200628


    多谢帮助。

TOP

回复 8# qixiaobin0715


    多谢,效果可以,就用这个了。

TOP

本帖最后由 aloha20200628 于 2024-7-18 12:08 编辑

回复 1# shenlong
  1. @echo off &setlocal enabledelayedexpansion &set "maxZ=0"
  2. for /f "delims=" %%a in (1.txt) do for %%s in (%%a) do (
  3. set "s=%%s" & (call :_strLen s z)
  4. if !z! gtr !maxZ! set "maxZ=!z!"
  5. )
  6. set "ms=" &for /l %%n in (1,1,!maxZ!) do set "ms=!ms! "
  7. endlocal &set "maxZ=%maxZ%"&set "ms=%ms%"
  8. setlocal enabledelayedexpansion
  9. for /f "delims=" %%a in (1.txt) do (
  10. set "s="
  11. for %%s in (%%a) do (set "_s=%%s"&set "_s=!_s!%ms%"&set "s=!s! !_s:~0,%maxZ%!")
  12. echo,!s:~1!
  13. )
  14. endlocal&pause&exit/b
  15. :_strLen
  16.    set "_str=_!%~1!" &set "_Len=0"
  17.    for %%n in (64 32 16 8 4 2 1) do (
  18.       if "!_str:~%%n,1!" neq "" (set/a "_Len+=%%n"&set "_str=!_str:~%%n!")
  19.    )
  20.    set "%~2=!_Len!" &exit/b
复制代码

特此备注》重写了原代码,改用批处 ‘原装’ 的字符串长度计算方法,再请出制表符 ‘显灵’,似乎消除了以前格式化输出时中英文字符混合字段的占位问题...
1

评分人数

TOP

只能这样勉为其难了:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. type a.txt>temp
  4. echo,a>>temp
  5. set /a n=0,y=0
  6. for /f "delims=:" %%i in ('findstr /o .* temp') do (
  7.     set /a x=%%i-y
  8.     if !n! lss !x! set /a n=x
  9.     set y=%%i
  10. )
  11. del temp
  12. for /l %%i in (1,1,!n!) do set BS= !BS!
  13. for /f "tokens=1-2*" %%i in (a.txt) do (
  14.     set f1=%%i!BS!
  15.     set f2=%%j!BS!
  16.     echo,!f1:~,%n%!!f2:~,%n%!%%k
  17. )
  18. pause
复制代码
1

评分人数

TOP

本帖最后由 aloha20200628 于 2024-7-18 10:06 编辑

回复 1# shenlong

文本行的格式化输出,须确定最大列宽即最大字段长度。简单处理是由楼主预设一个最大列宽值,否则就要实时遍历整个文本文件获取其中最大字段长度...
给一个批处版本,代码如下》获取文本文件中的最大字段长度,假设字段分隔符是批处默认的空格、逗号、分号、等号和制表符。
  1. @echo off &setlocal enabledelayedexpansion &set "maxZ=0"
  2. for /f "delims=" %%a in (1.txt) do for %%s in (%%a) do (
  3. set/p="%%s"<nul>0.0
  4. for %%b in (0.0) do if %%~zb gtr !maxZ! set "maxZ=%%~zb"
  5. )
  6. echo,!maxZ!
  7. del/q "0.0"&endlocal&pause&exit/b
复制代码

TOP

返回列表