Board logo

标题: [文本处理] [已解决批处理怎样对齐文本内容? [打印本页]

作者: daohe    时间: 2010-4-29 19:39     标题: [已解决批处理怎样对齐文本内容?

以第一行为标准对齐文本内容,例如a.txt内容
1111,0,S,0,M,0,L,0,XL,0,XXL
2222,S,M
2323,M,XXL
4444,S,XL
对齐后得到b.txt内容
1111,0,S,0,M,0,L,0,XL,0,XXL
2222,  ,S,  ,M,  ,  ,  ,   ,  ,
2323,  ,  ,  ,M,  ,  ,  ,   ,  ,XXL
4444,  ,S,  ,  ,  ,  ,  ,XL,  ,
然后再对齐内容的前两个逗号间加上0,如第二行,s对齐后,在他的前面加0,得到c.txt
1111,0,S,0,M,0,L,0,XL,0,XXL
2222,0,S,0,M,  ,  ,  ,   ,  ,
2323,  ,  ,0,M,  ,  ,  ,   ,0,XXL
4444,0,S,  ,  ,  ,  ,0,XL,  ,
注:b,c文本中逗号间的空格是可以不用保留的,最后c.txt改扩展名为c.csv后得到
作者: hanyeguxing    时间: 2010-4-29 19:52

1,其他行内容是否必定按顺序包含在第一(1111行)行内?例如2222行中的S和M
2,总列数是否为固定值

[ 本帖最后由 hanyeguxing 于 2010-4-29 19:54 编辑 ]
作者: daohe    时间: 2010-4-30 13:15     标题: 回复 2楼 的帖子

1.其他行内容必定按顺序包含在第一(1111行)行内
2.总列数不固定,但其他行列数不会超过第一行列数
作者: hanyeguxing    时间: 2010-4-30 14:41

以下代码按楼主提供的示例测试通过:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "han=a.txt"&set "ye=c.csv"
  3. set/p xing=<"%han%"&>"%ye%" echo.!xing!
  4. for /F "tokens=1* delims=," %%a in ("%xing%") do set "gu=,%%b"
  5. for /F "tokens=1,2* delims=:," %%a in ('findstr /n .* "%han%"') do if not %%a==1 (
  6.         set a=%gu%
  7.         for %%d in (%%c) do set "a=!a:,%%d=,#%%d!"
  8.         for %%d in (!a!) do set b=%%d&if not "!b:~0,1!"=="#" (set "c=!c!,") else set "c=!c!,%%d"
  9.         set "c=!c:,,#=,0,!"
  10.         >>"%ye%" echo.%%b!c!
  11.         set c=
  12. )
  13. start "" "%ye%"
复制代码

[ 本帖最后由 hanyeguxing 于 2010-4-30 18:55 编辑 ]
作者: daohe    时间: 2010-4-30 14:58     标题: 回复 4楼 的帖子

太感谢了,测试成功!!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2