[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何将两个文本的指定列的数据进行数学运算

本帖最后由 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 编辑 ]

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

TOP

回复 9楼 的帖子

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

不能说 for嵌套效率就是很低 这只能说明你的代码设计有问题。
符合某一条件就立即跳出本次内层循环,然后继续下次外部循环
完全可以做到,用call 即可。
技术问题请到论坛发帖求助!

TOP

  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 编辑 ]

TOP

  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 编辑 ]
1

评分人数

    • grwy1234: 谢谢!帮我解决了大难题!PB + 2

TOP

回复 7楼 的帖子

大数计算可以调用VBS
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 6楼 的帖子

谢谢版主!能不能提供更强大的算法?

TOP

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

[ 本帖最后由 随风 于 2008-12-17 19:04 编辑 ]
技术问题请到论坛发帖求助!

TOP

什么叫“分列符合”?你1楼中的目标文件格式不对吗?

TOP

请各位大侠再帮帮我吧!

TOP

先感谢!算法是对了!可是三列之间少了!“        ”一个字符!请再帮我一下好吗?谢谢!双引号内的!

TOP

  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
复制代码
1

评分人数

TOP

返回列表