标题: 批处理如何从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
根据你贴出来的数据做的。- @echo off &setlocal enabledelayedexpansion
- ::请使用前下载conset.exe,放在和本文件同目录下或系统目录下
- ::下载地址:http://www.bathome.net/viewthread.php?tid=12865&highlight=%B8%A1%B5%E3
- for %%a in (cool MAIL) do ^
- for /f "delims=: tokens=1" %%b in ('findstr /x /i /n "%%a" a.txt') do set/a #+=1&set #!#!=%%b
- >new.txt (for /f "skip=%#1% eol=C tokens=*" %%b in (a.txt) do echo %%b)
- for /f "tokens=*" %%c in (new.txt) do ^
- for %%d in (%%c) do if not "%%d" equ "MAIL" (set/a a+=1&set #!_!!a!=%%d) else (set a=0&set _=#)
- >last.txt (for /f "tokens=*" %%c in (2.txt) do ^
- for %%d in (%%c) do conset /a !#%%d!*!##%%d!&echo,)
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |