Board logo

标题: [文本处理] 批处理如何将若干个文件中特定字符乘以100后重新排列再生成新文件? [打印本页]

作者: 大大火凤凰    时间: 2011-9-14 19:23     标题: 批处理如何将若干个文件中特定字符乘以100后重新排列再生成新文件?

本帖最后由 大大火凤凰 于 2011-9-15 09:26 编辑

有以下N个文件 格式相同,数值不同,每个文件的3,5,6行特定位置的数据乘以100后重新排列,在新生成的文件中形成一行,每个数据之间用一个空格分开。以后每个文件的数据在新文件中逐行递增。

100.txt
aaa09aa
sss10ss
aaa11aa
aaa12aa
aaa13aa
aaa14aa

101.txt
aaa19aa
sss20ss
aaa21aa
aaa22aa
aaa23aa
aaa24aa

102.txt
aaa29aa
sss30ss
aaa31aa
aaa32aa
aaa33aa
aaa34aa
... ...

新文件.txt
1100 1300 09 10 12 1400
2100 2300 19 20 22 2400
3100 3300 29 30 32 3400
... ...
请问批处理文件该如何写,请赐教。万分感谢!
作者: weichenxiehou    时间: 2011-9-14 19:53

回复 1# 大大火凤凰
没看花眼的话,你举的例子中,新文件最后一行倒数第2个数字应该是32吧?
作者: x9tiancmd    时间: 2011-9-14 20:32

没法指教,因为我看了几遍根本就看不懂题意。 看不出原始文件和你新生成的文件的关联
作者: weichenxiehou    时间: 2011-9-14 20:44

回复 3# x9tiancmd
猜测每行组成是:第3行数字×100 第5行数字×100 第一行数字 第二行数字 第4行数字 第6行数字×100
作者: 冷玉公子    时间: 2011-9-14 20:48

虽然这个题没有什么学习的意义,还是写了一个。
虽然不怎么通用,但也能用,针对这个题的话,够了。
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. For /L %%Z In (0,1,2) Do (
  3. For /F %%A In (10%%Z.txt) Do (
  4. Set Var=%%A
  5. Set /A N+=1
  6. Set Str!N!=!Var:~3,2!
  7. IF !N! == 3 Set /A Str!N!*=100
  8. IF !N! == 5 Set /A Str!N!*=100
  9. IF !N! == 6 Set /A Str!N!*=100
  10. )
  11. Echo !Str3! !Str5! !%Str1! !Str2! !Str4! !Str6!>>File.txt
  12. )
  13. Start File.txt
复制代码

作者: weichenxiehou    时间: 2011-9-14 20:53

回复 5# 冷玉公子
公子没看到楼主的省略号啊,绝不止这三个文本文件哦,要真只有三个,那还不如手动呢。
作者: 冷玉公子    时间: 2011-9-14 21:13

回复 6# weichenxiehou


    第一:有个共同点,文件名称是按数字顺序排列的。
    第二:兄台肯定是没有看到我代码的前两行是什么了吧
  1. For /L %%Z In (0,1,2) Do (
  2. For /F %%A In (10%%Z.txt) Do (
复制代码

          如果文件多就把第一个循环的数字加大就OK了吗。
          我这个很明显是从100开始到102。
          稍微修改下
  1. For /L %%Z In (1,1,200) Do (
  2. For /F %%A In (%%Z.txt) Do (
复制代码

          如果是这样那不就是从1到200了吗。
如果文件名称不统一就把第一个循环换成For /r 了
作者: 大大火凤凰    时间: 2011-9-14 23:27

回复 2# weichenxiehou


    不好意思 是我写错了 多谢指出。
作者: 大大火凤凰    时间: 2011-9-14 23:30

回复 2# weichenxiehou


        不好意思 是我写错了 多谢指出。
作者: 大大火凤凰    时间: 2011-9-14 23:41

回复 7# 冷玉公子
受益匪浅,多谢各位大师帮忙!
作者: 大大火凤凰    时间: 2011-9-15 00:15

回复 5# 冷玉公子

按照你的方法运行后结果是这样的
1100 1300 09 10 12 1400
1100 1300 09 10 12 1400
1100 1300 09 10 12 1400
我需要的是这样的结果:
1100 1300 09 10 12 1400
2100 2300 19 20 22 2400
3100 3300 29 30 32 3400
请赐教。O(∩_∩)O谢谢!
作者: Batcher    时间: 2011-9-15 07:45

回复 8# 大大火凤凰


已经知道写错了,就在顶楼更新一下吧。
作者: awk    时间: 2011-9-15 07:59

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /l %%z in (0,1,2) do (
  4.     set n=0
  5.     for /f %%a in (10%%z.txt) do (
  6.         set /a n+=1
  7.         set var=%%a
  8.         set num!n!=!var:~3,2!
  9.         if !n! == 3 (
  10.             set /a num!n!*=100
  11.         ) else if !n! == 5 (
  12.             set /a num!n!*=100
  13.         ) else if !n! == 6 (
  14.             set /a num!n!*=100
  15.         )
  16.     )
  17.     echo !num3! !num5! !%num1! !num2! !num4! !num6!
  18. ))>file.txt
复制代码

作者: 大大火凤凰    时间: 2011-9-15 09:33

回复 13# awk


    成功了!O(∩_∩)O哈哈~ 太感谢你们了!
作者: xslxslxsl    时间: 2011-9-15 17:04

真是太强了哦




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