Board logo

标题: 批处理如何从a文本中按b文本指定的位置提取数据? [打印本页]

作者: lvchangsendq    时间: 2011-10-18 22:54     标题: 批处理如何从a文本中按b文本指定的位置提取数据?

难题求助,如何从a文本中按b文本指定的位置提取数据。
这个问题比较复杂点,不知道能否用批处理完成,分步完成也行。
1、先从文本1中提取COOL关键字后面的数据,但是其中以字母C开头的行为注释行不读取。
2、再从文本1中提取MAIL关键字后面的数据,同样其中以字母C开头的行为注释行不读取。
3、输出以COOL关键字后面的数据和MAIL关键字后面的数据对应相乘的积(例子中各312个,实际数据体非常大),按顺序(先行后列排成4列输出到new.txt文本中)
4、最后再从new.txt文本中提取指定顺序的数据,需要提取的数据位置在文本2.TXT中,最后排列为1列输出last.txt。
如文本2.TXT中的第一个数25代表的数据为new.txt文本的第25个数据的值,last.txt输出的第一个数据应是0.0*0的值即0.0;同理第二个是1.5*389的值即583.5等等,不知我说明白了没有。谢谢!

附件:文本1.TXT
   0.493   0.505   0.519   
0.543   0.565   0.566   0.539
  0.503   0.471   0.435
   0.416   0.430   0.467   0.478   0.464   0.433   0.414   0.419   0.431   0.439
   0.438   0.448   0.458   0.465   0.478   0.484   0.491   0.519   0.519   0.000
   0.000   0.000   0.000   0.000   0.000   0.000   0.000   0.000   0.000   0.000
   0.000   0.000   0.000   0.000
   0.500   0.506   0.507   0.500   0.494   0.505   0.516   0.527   0.534   0.536
   0.534   0.532   0.526   0.528   0.528   0.531   0.533   0.539   0.566   0.604
   0.620   0.614   0.596   0.597   0.622   0.643   0.625   0.566   0.529   0.519
   0.525   0.527   0.512   0.512   0.516   0.528   0.541   0.541   0.533   0.533
   0.530   0.529   0.537   0.547   0.560   0.567   0.568   0.554   0.539   0.522
   0.510   0.508   0.502   0.502   0.502   0.509   0.514   0.514   0.498   0.501
   0.504   0.510   0.514   0.527   0.544   0.540   0.521   0.495   0.476   0.453
COOL
C NET Stratum NumberULEAD COOL3D 3.5
0.0     0.0     0.0     0.0     0.0     
0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     1.5
     1.5     1.5     1.5     1.6     1.6     1.6     1.5     1.5     1.5     1.5
     1.6     1.6     1.6     1.5     1.5     1.5     1.5     1.5     1.6     1.6
     1.7     1.6     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0
C NET Stratum NumberULEAD COOL3D 3.6
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     1.5
     1.5     1.5     1.5     1.6     1.6     1.6     1.5     1.5     1.4     1.6
     1.7     1.7     1.6     1.5     1.5     1.5     1.5     1.5     1.6     1.6
     1.6     1.6     1.5     1.5     1.4     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0

     1.5     1.4     1.4     1.5     1.5     1.7     1.8     1.9     1.9     1.9
     2.0     1.8     1.9     1.9     1.8     1.8     1.7     1.6     1.5     1.4
     1.4     1.4     1.4     1.2     1.2     1.2     1.2     1.2     1.3     1.3
     1.4     1.4     1.4     1.4     1.5     1.5     1.5     1.5     1.4     1.4
     1.4     1.4     1.4     1.4     1.4     1.3     1.4     1.4     1.5     1.5
     1.6     1.6     1.6     1.5     1.6     1.6     1.5     1.4     1.3     1.4
     1.6     1.6     1.5     1.4     1.5     1.5     1.5     1.5     1.6     1.7
     1.7     1.7     1.6     1.5     1.3     1.2     1.1     1.1     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     0.0     0.0     0.0     0.0
MAIL
       0       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0     389
     377     364     352     337     326     328     345     368     374     361
     340     338     346     349     327     303     281     273     260     271
     274     295       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0       0
       0       0       0       0
C MAIL Stratum NumberULEAD COOL3D 3.1
       0       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0     390
     379     359     354     335     315     319     345     377     384     360
     320     325     345     360     329     294     262     251     255     266
     283     291     299     267     273       0       0       0       0       0
       0       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0       0
       0       0       0       0
C MAIL Stratum NumberULEAD COOL3D 3.2
     277     280     298     304     337     395     464     517     563     560
     553     591     585     579     586     608     685     744     763     806
     828     835     845     838     844     840     808     747     670     554
     500     467     443     421     359     352     351     358     375     416
     449     480     493     485     462     440     426     407     397     390
     357     352     358     349     333     337     364     402     415     389
     342     338     365     376     342     300     257     246     255     256

     0.0     0.0     0.0     0.0
附件之:文本2.TXT
25 50 35 54 68 77 189 205
75 6 18 65 45 12 301
5 7 8 99 102
78 66 255 244
作者: sxw    时间: 2011-10-18 23:43

你把数据减少一点,再举个例子就明白了
作者: lvchangsendq    时间: 2011-10-19 09:14

难题求助,如何从a文本中按b文本指定的位置提取数据。
这个问题比较复杂点,不知道能否用批处理完成,分步完成也行。
1、先从文本1中提取COOL关键字后面的数据,但是其中以字母C开头的行为注释行不读取。
2、再从文本1中提取MAIL关键字后面的数据,同样其中以字母C开头的行为注释行不读取。
3、输出以COOL关键字后面的数据和MAIL关键字后面的数据对应相乘的积(例子中各312个,实际数据体非常大),按顺序(先行后列排成4列输出到new.txt文本中)
4、最后再从new.txt文本中提取指定顺序的数据,需要提取的数据位置在文本2.TXT中,最后排列为1列输出last.txt。
如文本2.TXT中的第一个数25代表的数据为new.txt文本的第25个数据的值,last.txt输出的第一个数据应是1.4*500的值即700.0;
同理第二个数据是last.txt文本中的第10个数据为1.4*416的值即582.4等等,不知我说明白了没有。谢谢!感谢版主要求精简。

附件:文本1.TXT
0.493   0.505   0.519 (前无关键字无用行)   
0.543   0.565   0.566   0.539 (前无关键字无用行)
COOL

C NET Stratum NumberULEAD COOL3D 3.6(无用注释行,行前有C)
     1.4     1.4     1.4     1.4     1.5     1.5     1.5     1.5     1.4     1.4
     1.4     1.4     1.4     1.4     1.4     1.3     1.4     1.4     1.5     1.5
     1.6     1.6     1.6     1.5     1.6     1.6     1.5     1.4     1.3     1.4
     1.6     1.6     1.5     1.4     1.5     1.5     1.5     1.5     1.6     1.7

MAIL
C MAIL Stratum NumberULEAD COOL3D 3.2(无用注释行,行前有C)
     500     467     443     421     359     352     351     358     375     416
     449     480     493     485     462     440     426     407     397     390
     357     352     358     349     333     337     364     402     415     389
     342     338     365     376     342     300     257     246     255     256

附件之:文本2.TXT
1 10 35
6 18 5 7
作者: yangfengoo    时间: 2011-10-19 09:36

难度不大。举例子少量数据即可。
不过真要做最好附上原始数据以供具体分析。请上传附件。并且把问题更新到楼顶
作者: lvchangsendq    时间: 2011-10-19 21:21

如何把问题更新到楼顶,不会,有帮忙的哥们吗!先谢了!觉得比较难,一直搞不定,用其它方法搞定了,比较麻烦点,想看看批处理能否好用,很喜欢批处理,但是水平比较低。
作者: lvchangsendq    时间: 2011-10-22 05:01

苦等三天无解,是太难了吗?还是我没说清楚呢!
作者: lvchangsendq    时间: 2011-10-22 05:02

yangfengoo 说难度不大,那就出手看看,先谢谢了!
作者: yangfengoo    时间: 2011-10-22 10:21

回复 7# lvchangsendq


    我在4楼说得很清楚了。我需要原始数据。请以附件的形式上传原始数据
作者: yangfengoo    时间: 2011-10-22 11:14

根据你贴出来的数据做的。
  1. @echo off &setlocal enabledelayedexpansion
  2. ::请使用前下载conset.exe,放在和本文件同目录下或系统目录下
  3. ::下载地址:http://www.bathome.net/viewthread.php?tid=12865&highlight=%B8%A1%B5%E3
  4. for %%a in (cool MAIL) do ^
  5. for /f "delims=: tokens=1" %%b in ('findstr /x /i /n "%%a" a.txt') do set/a #+=1&set #!#!=%%b
  6. >new.txt (for /f "skip=%#1% eol=C tokens=*" %%b in (a.txt) do echo %%b)
  7. for /f "tokens=*" %%c in (new.txt) do ^
  8. for %%d in (%%c) do if not "%%d" equ "MAIL" (set/a a+=1&set #!_!!a!=%%d) else (set a=0&set _=#)
  9. >last.txt (for /f "tokens=*" %%c in (2.txt) do ^
  10. for %%d in (%%c) do conset /a !#%%d!*!##%%d!&echo,)
复制代码





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