Board logo

标题: [文本处理] [已解决]批处理如何将文本中的三列内容左右对齐? [打印本页]

作者: 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 编辑
  1. @echo off & Setlocal Enabledelayedexpansion
  2. set /a Max1=Max2=0
  3. for /f "tokens=1-3" %%i in (1.txt) do (
  4.     set /a n+=1
  5.     set "_!n!_1=%%i" & set "_!n!_2=%%j" & set "_!n!_3=%%k"
  6.     for %%a in (1 2) do (
  7.         for %%b in (!n!) do (
  8.             set "tmp=!_%%b_%%a!" & set "Len="
  9.             for %%c in (2048 1024 512 256 128 64 32 16) do (
  10.                 if "!tmp:~%%c!" neq "" (
  11.                     set /a Len+=%%c & set "tmp=!tmp:~%%c!"
  12.                 )
  13.             )
  14.             set "tmp=!tmp!fedcba9876543210"
  15.             set /a Len+=0x!tmp:~15,1! + 4
  16.             if !Len! gtr !Max%%a! set "Max%%a=!Len!"
  17.         )
  18.     )
  19. )
  20. for %%a in (1 2) do (
  21.     for /l %%b in (1 1 !Max%%a!) do set "sp%%a=!sp%%a! "
  22. )
  23. for /l %%a in (1 1 %n%) do (
  24.     for %%b in (1 2) do (
  25.         set "s=!_%%a_%%b!!sp%%b!"
  26.         for %%c in (!Max%%b!) do set "str=!str!!s:~,%%c!"
  27.     )
  28.     echo,!str!!_%%a_3!&set "str="
  29. )
  30. pause
复制代码
如果存在中英文混合的列,那就对不齐
作者: BHsolve    时间: 2014-1-22 16:09

回复 2# apang


    我不是来找解决方法的而是来学习的,想问的是上面增加空格的那个方式:
set "ke2=!ke2!"

按逻辑不应该是 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