[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] BAT文本处理——排版求助

现有如下格式文本文件x.txt

=================================================================================
项目1 项目2 项目3 项目4 ..... 项目14
xxxx(对应项目1) xxxxxxxxxx(对应项目2) xxx(对应项目3) xxxxxxxxxxxxxxxxxxxxxx(对应项目4) ......(对应项目14)
xxxxxxx(对应项目1) xxx(对应项目2) xxxx.....................(对应项目n)
很多行....
==================================================================================
我想写一个批 当我拖动x.txt到批上 生成新文件 已整理x.txt
格式如下:

=================================================================================
项目a                                     项目b                                     项目c                          项目d                                      .....                             项目14
xxxx (对应项目1)                    xxxxxxxxxxxxxx                    xxx                             xxxxxxxxxxxxxxxxxxxxxx       .....                             xxxx
xx(对应项目1)                         xxxxxxxxxxxx                        xxxxxxxx                    xxxxxxxxx                              ....                              ....
...
...
很多行.....
=================================================================================
每一行有14个项目 没一个项目下对应的最长字符长度我这也有 就是不知道怎么写这个批
项目1 5个字符长度  项目2 8个字符长度等等
求教了。还需要了解哪些信息随时来问。

项目最长字符多少  如8个字符以内可考虑TAB键入

TOP

回复 2# terse


    最长的超过8个字符了 但只有一个项目超过8个字符了

TOP

回复 3# silience
能确定那一项 超过8字符 可否准确字符数 记住一个TAB键针对8字符

TOP

用,做分隔符输出为csv文件,轻松解决。。。
***共同提高***

TOP

本帖最后由 CrLf 于 2012-12-23 04:43 编辑

一直想用一次 more 命令的 /t 开关,终于让我碰上了,邪恶:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "文件名前缀=test_"
  3. ::上面这行设置处理后的文件所使用的前缀为 test_,如果无需前缀就删掉这行
  4. set "制表符= "
  5. ::这句设置制表符变量为制表符,如果被论坛处理为空格,请自行替换(建议不要选中复制,而使用复制代码可保留代码中的制表符)
  6. set "分隔符=@"
  7. ::这句设置临时的列分隔符为 @,可视情况设置为其他不存在于文本中的字符
  8. for %%a in (20 30 50 40 20) do set /a n+=1,m+=%%a&set "项目!n!=!m!"
  9. ::这句设置各个项目的长度,如例 20、30、50、40、20 分别对应5列(或6列的前五列)
  10. set /a n-=1
  11. setlocal disabledelayedexpansion
  12. (for /f "delims=" %%a in ("%~1
  13. ) do (
  14. set "str=%%a"
  15. setlocal enabledelayedexpansion
  16. echo !str: =%分隔符%!
  17. endlocal
  18. ))>$1
  19. ::将文本中的空格处理为 @,用于逐列处理时加以区分
  20. for /l %%a in (1 1 %n%) do (
  21. (for /f "tokens=1* delims=%分隔符%" %%b in ($1) do echo %%b%制表符%%%c)>$2
  22. setlocal enabledelayedexpansion
  23. more>$1 /t!项目%%a! $2
  24. endlocal
  25. )
  26. endlocal
  27. ::逐列将分隔符替换为制表符,再用 more /tn 将制表符处理为一定长度的空格
  28. (move $1 "%~dp1%文件名前缀%%~nx1"&del $2)>nul
  29. ::收工
  30. pause
复制代码
1

评分人数

TOP

回复 6# CrLf


    这都想得出,我不得不说你的确是个有才的骚年。。。
***共同提高***

TOP

返回列表