标题: [文本处理] [已解决]批处理如何将文本中的三列内容左右对齐? [打印本页]
作者: BHsolve 时间: 2014-1-21 22:39 标题: [已解决]批处理如何将文本中的三列内容左右对齐?
本帖最后由 pcl_test 于 2016-7-31 21:47 编辑
我想问下下面这段代码如何产生空格
http://www.bathome.net/redirect. ... =5932&ptid=1246
原文本:
111111111111111111111 98912 张三
222222222222222222 150020 李四四
333333333333333333333 360000 王五
444444444444444444 2332 赵六六
555555555555555555 222 田七
666666666666666666666 999999 舞吧
作者: apang 时间: 2014-1-22 10:35
本帖最后由 apang 于 2014-1-22 18:19 编辑
- @echo off & Setlocal Enabledelayedexpansion
- set /a Max1=Max2=0
- for /f "tokens=1-3" %%i in (1.txt) do (
- set /a n+=1
- set "_!n!_1=%%i" & set "_!n!_2=%%j" & set "_!n!_3=%%k"
- for %%a in (1 2) do (
- for %%b in (!n!) do (
- set "tmp=!_%%b_%%a!" & set "Len="
- for %%c in (2048 1024 512 256 128 64 32 16) do (
- if "!tmp:~%%c!" neq "" (
- set /a Len+=%%c & set "tmp=!tmp:~%%c!"
- )
- )
- set "tmp=!tmp!fedcba9876543210"
- set /a Len+=0x!tmp:~15,1! + 4
- if !Len! gtr !Max%%a! set "Max%%a=!Len!"
- )
- )
- )
- for %%a in (1 2) do (
- for /l %%b in (1 1 !Max%%a!) do set "sp%%a=!sp%%a! "
- )
- for /l %%a in (1 1 %n%) do (
- for %%b in (1 2) do (
- set "s=!_%%a_%%b!!sp%%b!"
- for %%c in (!Max%%b!) do set "str=!str!!s:~,%%c!"
- )
- echo,!str!!_%%a_3!&set "str="
- )
- pause
复制代码
如果存在中英文混合的列,那就对不齐
作者: BHsolve 时间: 2014-1-22 16:09
回复 2# apang
我不是来找解决方法的而是来学习的,想问的是上面增加空格的那个方式:
按逻辑不应该是 set "ke2= !ke2!"为什么它那样也能行得通?
你那段代码,我从第九行就开始晕了,你要是愿意解释的话我是很乐意听的。
作者: terse 时间: 2014-1-22 16:15
回复 2# apang
这里如果确认列数的话 应可忽略最后列的计算
作者: terse 时间: 2014-1-22 16:21
回复 3# BHsolve
如果这里KE2没有赋值
set "ke2= !ke2!" 等效于 set "ke2=!ke2! "
看你代码 你在前面已经赋值%%i于KE2
作者: BHsolve 时间: 2014-1-22 16:27
回复 5# terse
我眼睛拙计已经看明白哪里出问题了,谢谢两位了。
它的空格是加在后面的不是前面,郁闷
作者: apang 时间: 2014-1-22 17:36
回复 4# terse
嗯,考虑不周,已修改
作者: apang 时间: 2014-1-22 17:39
回复 3# BHsolve
二分法球字符串长度,你可以搜索下。可以减少循环次数,比call效率要高
作者: f0229f0229 时间: 2018-3-15 19:49
回复 2# apang
你好,请问
如果我要扩展到6列都要求左右对齐,该如何修改,谢谢
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |