本帖最后由 qixiaobin0715 于 2024-7-19 14:54 编辑
按照各列字节数与最大字节数的差值,然后用空格补齐的方法,适用含有中文字符的列: | @echo off | | set colsn=4 | | set /a colsn-=1 | | for /f "tokens=1-%colsn%" %%1 in (a.txt) do ( | | echo,%%1>>temp1 | | echo,%%2>>temp2 | | echo,%%3>>temp3 | | ) | | setlocal enabledelayedexpansion | | for /l %%a in (1,1,%colsn%) do ( | | echo,a>>temp%%a | | set /a x=n%%a=0 | | for /f "tokens=1,2 delims=:" %%i in ('findstr /n /o .* temp%%a') do ( | | set /a "x%%a=%%j-x" | | set /a "m=%%i-1" | | set "n%%a#!m!=!x%%a!" | | if !n%%a! lss !x%%a! set /a "n%%a=x%%a" | | set "x=%%j" | | ) | | del temp%%a | | ) | | for /f "tokens=1-%colsn%*" %%1 in (a.txt) do ( | | set /a "n+=1" | | set f= | | set "f1=%%1" | | set "f2=%%2" | | set "f3=%%3" | | for /l %%x in (1,1,%colsn%) do ( | | set /a "m%%x=n%%x-n%%x#!n!" | | for /l %%y in (1,1,!m%%x!) do set "f%%x=!f%%x! " | | set "f=!f!!f%%x! " | | ) | | echo,!f!%%4 | | ) | | pauseCOPY |
由于未及仔细考虑,代码存在以下缺点:
1.代码过于复杂,可读性差;
2.除最后一列外,其余各行各列字节数均预先设置变量,处理较大文件时,速度可能会比较慢,甚至超出变量设置的上限而出错;
3.上面代码是按4列文本来处理的,如果列数有变化,需要对以上代码进行修改(虽然写代码时,考虑到了列数变化时,尽量减少修改量),通用性不是太好。
下面举例说明列数变化时,代码调整的方法:
1.如果文本内容的列数为3列,代码做如下调整:
第2行变量值修改为3;
删除第7行;
删除第27行;
将第33行的%%4改为%%3;
2.如果文本内容的列数为5列,代码做如下调整:
第2行变量值修改为5;
第7行下面增加一行:echo,%%4>>temp4
第27行下面增加一行:set "f4=%%4"
将第33行的%%4改为%%5; |