本帖最后由 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
- )
- pause
复制代码 由于未及仔细考虑,代码存在以下缺点:
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; |