[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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

回复 16# applba


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

TOP

回复 16# applba


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

TOP

本帖最后由 applba 于 2012-1-19 18:57 编辑

回复 15# skywarden
  1. @echo off
  2. SETLOCAL EnablEdElayEdExpansion
  3. rem 下面这句定义两列之间的空格数
  4. set "sp=                 "
  5. (for /f "delims=" %%i in (tel.txt) do (
  6.   set "a=%%i"
  7.   echo !a:~0,54!!sp!!a:~71!
  8. ) )>new.txt
  9. pause
复制代码
1

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

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


哈哈 ~ ~

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

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

TOP

悲剧的楼主,居然用记事本写代码~

TOP

回复 12# skywarden


图没用,你把两个bat文件压缩一下传上来看看。

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

回复 10# skywarden


论坛程序会把tab转换成空格

TOP

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



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

TOP

回复 2# ivor


    !str:~0,7! 可以写成!str:~,7!
1

评分人数

    • CrLf: 乐于助人PB + 3

TOP

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

TOP

TOP

  1. @echo off & setlocal enabledelayedexpansion
  2. ::关闭回显  and  开启变量延迟扩展为了!str!
  3. for /f "tokens=1-7" %%a in (2012-01-12-1.TXT) do (
  4.         set str=%%e
  5. echo %%a %%b %%c %%d !str:~0,10! %%f %%g >>b.txt
  6. )
  7. ::把%%e的值传给环境变量str,以便后边可以用!str:~0,7!
  8. ::!str:~0,7!的意思是 从0位开始到第七位的字符串,后面的就不要了,可以set /?看详细解释
  9. :: 如果想改成10,改变  !str:~0,10! 就可以了,注意输出的格式。字符串之间我已经用TAB填充了,但是也有一些纰漏
复制代码

TOP

哈哈,有趣的批处理。

TOP

返回列表