标题: [文本处理] BAT文本处理——排版求助 [打印本页]
作者: silience 时间: 2012-12-22 13:31 标题: 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个字符长度等等
求教了。还需要了解哪些信息随时来问。
作者: terse 时间: 2012-12-22 13:50
项目最长字符多少 如8个字符以内可考虑TAB键入
作者: silience 时间: 2012-12-22 13:56
回复 2# terse
最长的超过8个字符了 但只有一个项目超过8个字符了
作者: terse 时间: 2012-12-22 14:58
回复 3# silience
能确定那一项 超过8字符 可否准确字符数 记住一个TAB键针对8字符
作者: batman 时间: 2012-12-22 19:16
用,做分隔符输出为csv文件,轻松解决。。。
作者: CrLf 时间: 2012-12-23 02:54
本帖最后由 CrLf 于 2012-12-23 04:43 编辑
一直想用一次 more 命令的 /t 开关,终于让我碰上了,邪恶:- @echo off&setlocal enabledelayedexpansion
- set "文件名前缀=test_"
- ::上面这行设置处理后的文件所使用的前缀为 test_,如果无需前缀就删掉这行
- set "制表符= "
- ::这句设置制表符变量为制表符,如果被论坛处理为空格,请自行替换(建议不要选中复制,而使用复制代码可保留代码中的制表符)
- set "分隔符=@"
- ::这句设置临时的列分隔符为 @,可视情况设置为其他不存在于文本中的字符
- for %%a in (20 30 50 40 20) do set /a n+=1,m+=%%a&set "项目!n!=!m!"
- ::这句设置各个项目的长度,如例 20、30、50、40、20 分别对应5列(或6列的前五列)
- set /a n-=1
-
- setlocal disabledelayedexpansion
- (for /f "delims=" %%a in ("%~1
- ) do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- echo !str: =%分隔符%!
- endlocal
- ))>$1
- ::将文本中的空格处理为 @,用于逐列处理时加以区分
-
- for /l %%a in (1 1 %n%) do (
- (for /f "tokens=1* delims=%分隔符%" %%b in ($1) do echo %%b%制表符%%%c)>$2
-
- setlocal enabledelayedexpansion
- more>$1 /t!项目%%a! $2
- endlocal
- )
- endlocal
- ::逐列将分隔符替换为制表符,再用 more /tn 将制表符处理为一定长度的空格
-
- (move $1 "%~dp1%文件名前缀%%~nx1"&del $2)>nul
- ::收工
- pause
复制代码
作者: batman 时间: 2012-12-25 15:56
回复 6# CrLf
这都想得出,我不得不说你的确是个有才的骚年。。。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |