批处理之家's Archiver

ngd 发表于 2022-5-19 12:59

批处理找出文本中符合规定的数?

[i=s] 本帖最后由 ngd 于 2022-5-19 13:00 编辑 [/i]

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

日        存量        进出库
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

[code]@echo off&setlocal enabledelayedexpansion
for /f "skip=1 tokens=1-3" %%i in (a.txt) do (
    if defined c call :l %%i
    if not defined c if %%k geq 0 set c=%%j
)
pause
goto :eof

:l
set c=
for /f "skip=%1 tokens=1-3" %%i in (a.txt) do (
    if defined c (
        set /a d=%%i-!r!
        if !d! geq 4 if !d! leq 8 if %%k lss 0 if %%j equ !c! (
            echo %%i %%j %%k
            set c=
            goto :eof
        )
    )
    if not defined c if %%k geq 0 (
        set r=%%i
        set c=%%j
    )
)
[/code]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.