Board logo

标题: [文本处理] 批处理如何将两个文本的指定列的数据进行数学运算 [打印本页]

作者: grwy1234    时间: 2008-12-16 17:55     标题: 批处理如何将两个文本的指定列的数据进行数学运算

本帖最后由 pcl_test 于 2016-8-13 13:40 编辑

首先感谢昨天帮忙的tireless
4个文本!把买减卖!要求第一第二列保留!第三列相减的批处理!文本内容如下:请大侠帮忙!
逐笔委买量中单14-17.txt;内容
SH600003        2008-12-16        1329797
SH600004        2008-12-16        3750900
SH600005        2008-12-16        28445485
SH600006        2008-12-16        2995070
SH600007        2008-12-16        193100
SH600008        2008-12-16        2530831
。。。。。。。。。
逐笔委卖量中单14-17.txt;内容
SH600003        2008-12-16        2722921
SH600004        2008-12-16        7211712
SH600005        2008-12-16        78318094
SH600006        2008-12-16        7065188
SH600007        2008-12-16        515461
SH600008        2008-12-16        6309013
。。。。。。
要求结果为:逐笔中单净量!
SH600003        2008-12-16        -1393124
SH600004        2008-12-16        -3460812
SH600005        2008-12-16        -49872609
SH600006        2008-12-16        -4070118
SH600007        2008-12-16        -322361
SH600008        2008-12-16        -3778182
也就是文本第一第二列不变文本第三列相减

[ 本帖最后由 grwy1234 于 2008-12-17 09:16 编辑 ]
作者: shqf    时间: 2008-12-16 20:52

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2,3 delims= " %%a in ('type 逐笔委买量大单18-19.txt') do (
  4.   set %%a=%%c
  5. )
  6. for /f "tokens=1,2,3 delims= " %%a in ('type 逐笔委卖量大单18-19.txt') do (
  7.   set /a jingliang=!%%a!-%%c
  8.   >>逐笔大单净量.txt echo %%a %%b !jingliang!
  9. )
  10. echo OK
  11. pause>nul
复制代码

作者: grwy1234    时间: 2008-12-16 21:37

先感谢!算法是对了!可是三列之间少了!“        ”一个字符!请再帮我一下好吗?谢谢!双引号内的!
作者: grwy1234    时间: 2008-12-17 15:55

请各位大侠再帮帮我吧!
作者: shqf    时间: 2008-12-17 18:56

什么叫“分列符合”?你1楼中的目标文件格式不对吗?
作者: 随风    时间: 2008-12-17 19:02

貌似数字很大哦,如何单比或结果超出了cmd的最大处理数字可要注意了,(必须换种算法)否则错了都不知道。
-2147483648  set /a 能处理的最小数
2147483647   set /a 能处理的最大数

[ 本帖最后由 随风 于 2008-12-17 19:04 编辑 ]
作者: grwy1234    时间: 2008-12-17 22:52     标题: 回复 6楼 的帖子

谢谢版主!能不能提供更强大的算法?
作者: Batcher    时间: 2008-12-17 23:39     标题: 回复 7楼 的帖子

大数计算可以调用VBS
作者: qlcom    时间: 2008-12-18 02:52

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2,3 delims= " %%i in (逐笔委买量大单18-19.txt) do (
  4.            set/a n+=1
  5.            for /f "tokens=3 delims= " %%a in (逐笔委卖量大单18-19.txt) do (
  6.                            set/a m+=1
  7.                            if !n!==!m! (
  8.                                         set/a mar=%%k-%%a
  9.                                          echo %%i        %%j       !mar!>>逐笔大单净量.txt
  10.                                           )
  11.                             )
  12.         set "m="
  13.         )
  14. start 逐笔大单净量.txt
复制代码
for嵌套效率就是很低! 不知道p处理有没有语句可以完成功能:符合某一条件就立即跳出本次内层循环,然后继续下次外部循环.

[ 本帖最后由 qlcom 于 2008-12-18 03:00 编辑 ]
作者: tireless    时间: 2008-12-18 12:11

  1. @echo off & setlocal EnableDelayedExpansion
  2. for %%A in (14-17 18-19) do (
  3.   for %%B in (逐笔委卖量?单%%A.txt) do (
  4.     set "净=%%~nB" & set "净=!净:委卖量=!净量.txt
  5.     for /f "tokens=1-3" %%a in (%%B) do (
  6.       >>%%Atmp.txt echo %%a        %%b        %%c -
  7.     )
  8.   )
  9.   for /f "tokens=1-4" %%1 in ('^(type 逐笔委买量*%%A.txt^&type %%Atmp.txt^)^|sort') do (
  10.     set /a %%1+=%%4%%3
  11.     if "%%4"=="-" (
  12.       >>!净! echo %%1        %%2        !%%1!
  13.       set "%%1="
  14.     )
  15.   )
  16.   del %%Atmp.txt
  17. )
复制代码
有点乱...思路是:

1. 在 量14-17.txt 的每行后面加 [空格]-,并输出至 14-17tmp.txt
2. 同时打印(type) 14-17tmp.txt买量14-17.txt,再进行排序(sort.exe)。

排序成这样:
SH600003        2008-12-16        918049
SH600003        2008-12-16        2520921 -
SH600004        2008-12-16        3412596
SH600004        2008-12-16        6826841 -
......

然后直接计算:set /a %%1+=%%4%%3
当 %%4 等于 - 时,就将结果输出。

[ 本帖最后由 tireless 于 2008-12-18 20:46 编辑 ]
作者: 随风    时间: 2008-12-18 20:06     标题: 回复 9楼 的帖子

for嵌套效率就是很低! 不知道p处理有没有语句可以完成功能:符合某一条件就立即跳出本次内层循环,然后继续下次外部循环.

不能说 for嵌套效率就是很低 这只能说明你的代码设计有问题。
符合某一条件就立即跳出本次内层循环,然后继续下次外部循环
完全可以做到,用call 即可。
作者: pcl_test    时间: 2016-8-13 14:06

第三方
  1. gawk "NR==FNR{a[$1$2]=$3;next}{print $1,$2,a[$1$2]-$3}" "买.txt" "卖.txt">"净.txt"
复制代码





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