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

[文本处理] [已解决]如何用批处理删除文本多余字段?

T20120112113150 000046 850             850     5399200                    08 0.00   
T20120112113202 000122 807             807     2237887                    08 0.00   
T20120112113304 000024 810             810     6108331                    08 0.00   
T20120112113032 000310 812             812     5794878                    08 0.00   
T20120112113001 000417 833             833     5715156613              08 0.00

文本名为2012-01-12-1.TXT,上面是文本内容。
如何读取该文本,并限定第5列数值不超过7位,如果超出位数自动删除多余位数并保存。
把下面这一列
T20120112113001 000417 833             833     5715156613              08 0.00
变为
T20120112113001 000417 833             833     5715156                   08 0.00

谢谢

我算了一下,是从第47个字符开始的,截取48至71之间的数值,只要7位数。

5715156到08 0.00 之间是固定24格,从5-0是24格,从6至0是17格。

问题简化为如何用批处理读取文本,并删除每行从54到71之间的数字并填充为空。

谢谢各位。特别感谢applba和ivor
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2

哈哈,有人啦。。谢谢,我试下哈。

TOP

回复 2# ivor


    好像可以了哈,,非常感谢。。能不能帮我解释一下代码的意思呢。。
如果我要截取的位数是16位,是不是只要更改"tokens=1-7"和str:~0,7! 就可以了。

我刚改成10的会变成这样子的。后面的格式会乱掉,还请帮忙再调试一下,谢谢。

T20120112113121   000029  810  810  2367265  08  0.00
T20120112113104   000059  821  821  5530459#  08  0.00
T20120112112909   000325  808  808  153069828000  08  0.00
T20120112113150   000046  850  850  5399200  08  0.00
T20120112113202   000122  807  807  2237887  08  0.00
T20120112113304   000024  810  810  6108331  08  0.00
T20120112113032   000310  812  812  5794878  08  0.00
T20120112113001   000417  833  833  571515661300  08  0.00

TOP

哈哈,有趣的批处理。

TOP

收到,谢谢楼上两位哈。。
早上迟到了。。55

TOP

ivor 发表于 2012-1-12 21:13



    刚发现出来的间距改变了,可能跟tab有关系,研究代码ing

TOP

好纠结啊,为什么非要用复制的才能成功输出,很仔细的对了每个字符了啊,而且都是英文状态
附图
[attach]4860[/attach]

123.bat输出不了,ivor.bat是直接复制的代码可以运行。

求解如下问题:
token=1-7 指的是1到7列字符串是吗?以空格为分隔符。
%%e对应的是!str:~0,7!(偏移0,截取第5列从左到右7个字符)
%%a、%%b、%%c、%%d、%%f、%%g对应的是第1、2、3、4、6、7列
他们之间的间隔是多少呢?对应要提取的文本里面的实际间距吗?
最后代码写成6行,只是为了好看吗?可不可以写成2行。
如:
@echo off & setlocal enabledelayedexpansion
for /f "tokens=1-7" %%a in (tel.txt) do (set str=%%e echo %%a        %%b        %%c              %%d         !str:~0,7!           %%f              %%g >>c.txt)

再附张图说明
[attach]4863[/attach]

附代码
[attach]4864[/attach][attach]4865[/attach]

我重打了一遍代码就可以了,唉。。
不知道有没有什么工具可以查询看是哪个字符出错的。。

那个间距差不多搞明白了,set str=%%e之后是要回车,echo不能同行,不然输出为空。
%%a %%b之间输出的间距是对应实际要输出的。
%%a空一格%%b空一格%%c空13格%%d以此类推。

现在的问题是截取的字符会影响到后面输出的格式,如图。
[attach]4866[/attach]

我觉得应该要对第6列的输出做下处理,要怎么写呢??

TOP

本帖最后由 skywarden 于 2012-1-19 16:20 编辑
悲剧的楼主,居然用记事本写代码~
applba 发表于 2012-1-19 16:05


哈哈 ~ ~

notepad++ 可以不?下次复杂的命令就用这个了。。

帮我解决一下第二个问题吧。

TOP

回复 16# applba


    我看到了哈,,非常感谢,,有事要晚点才能测试了。。

TOP

回复 16# applba


    哇噻。。这代码太给力了。。谢谢哈~ ~

TOP

返回列表