Board logo

标题: [数值计算] 批处理找出文本中符合规定的数? [打印本页]

作者: ngd    时间: 2022-5-19 12:59     标题: 批处理找出文本中符合规定的数?

本帖最后由 ngd 于 2022-5-19 13:00 编辑

表格中的内容大致如下:第一列是日期,第二列是库存量,第三列是每日进出量,正数是进库,负数是出库

日        存量        进出库
1        1         1
2        1         0
3        9         8
4        19         10
5        9         -10
6        1         -8
7        4         3
8        4         0
9        6         2
10        13         7
11        15         2
12        22         7
13        29         7
14        19         -10
15        11         -8
16        6         -5
17        8         2
18        8         0
19        17         9
20        27         10
21        19         -8
22        13         -6
23        10         -3
24        16         6
25        18         2
26        18         0
27        27         9
28        37         10
29        34         -3
30        27         -7
31        26         -1

找出一组数字 符合如下规律:
至少连续2日进出库小于等于3,接着连续2~4日大量进库累计大于等于15~30,再接着连续2~4日大量出库,回到大量进库前的库存量

示例中只有第1~6、7~16、这2组数字符合,输出第6、第16两日的日期和库存量
17~24这组由于连续4日出库后没有回到大量进库前的库存量所以不符合(第5日回到了进库前的库存量 但已经超出4日,所以不符合)
24~31这组由于大量出库后没有回到大量进库前的库存量所以也不符合
作者: idwma    时间: 2022-5-19 18:14

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "skip=1 tokens=1-3" %%i in (a.txt) do (
  3.     if defined c call :l %%i
  4.     if not defined c if %%k geq 0 set c=%%j
  5. )
  6. pause
  7. goto :eof
  8. :l
  9. set c=
  10. for /f "skip=%1 tokens=1-3" %%i in (a.txt) do (
  11.     if defined c (
  12.         set /a d=%%i-!r!
  13.         if !d! geq 4 if !d! leq 8 if %%k lss 0 if %%j equ !c! (
  14.             echo %%i %%j %%k
  15.             set c=
  16.             goto :eof
  17.         )
  18.     )
  19.     if not defined c if %%k geq 0 (
  20.         set r=%%i
  21.         set c=%%j
  22.     )
  23. )
复制代码





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