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

[文本处理] [已解决]批处理如何筛选出符合规律的连续数字?

本帖最后由 ngd 于 2022-5-19 10:37 编辑

文件当中的内容大致如下:第一列是序号,后面是数字
1,2
2,3
3,2
4,7
5,7
6,8
7,3
8,-9
9,-7
10,-8
11,2
12,4
13,1
14,3
15,7
16,7
17,8
18,-8
19,-9
20,-8
21,1
22,2
找出一组数字 符合如下规律:
连续3个数小于等于4接着连续3个数大于等于7再接着连续3个数小于等于-7的一组数,示例中只有第12~20这组数字符合,输出第20个数字-8即可

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. set src=nums.txt
  5. for /f "tokens=1-2 delims=," %%A in (%src%) do (
  6.   set a0=!a1!
  7.   set a1=!a2!
  8.   set a2=!a3!
  9.   set a3=!a4!
  10.   set a4=!a5!
  11.   set a5=!a6!
  12.   set a6=!a7!
  13.   set a7=!a8!
  14.   set a8=%%B
  15.   if defined a0 if !a0! leq 4 if defined a1 if !a1! leq 4 if defined a2 if !a2! leq 4 (
  16.     if defined a3 if !a3! geq 7 if defined a4 if !a4! geq 7 if defined a5 if !a5! geq 7 (
  17.       if defined a6 if !a6! leq -7 if defined a7 if !a7! leq -7 if defined a8 if !a8! leq -7 (
  18.         echo !a8!
  19.       )
  20.     )
  21.   )
  22. )
  23. endlocal
  24. pause
  25. exit /b
复制代码
1

评分人数

    • ngd: 思路很好,学习了,非常感谢!技术 + 1
微信:flashercs
QQ:49908356

TOP

再提供一种思路,借powershell用正则来匹配
  1. #&cls&powershell "iex(gc '%~0'|out-string)"&pause&exit\b
  2. $txt="C:\Users\lenovo\Desktop\nums.txt"
  3. $nums=@()
  4. gc $txt|%{$nums+=$_.split(",")[1]}
  5. $line=$nums -join "#"
  6. $pattern="([0-4]#|-\d+#){3}([7-9]#|[1-9]\d+#){3}(-[7-9]#|-[1-9]\d+#){3}"
  7. $check=[regex]::matches($line,$pattern).value
  8. ($check -split "#"|?{$_ -ne ""})[-1]
复制代码
1

评分人数

    • ngd: 也是个思路技术 + 1

TOP

本帖最后由 qixiaobin0715 于 2022-8-27 10:19 编辑

翻出老帖练练手,兼顾数据重叠(多组数据重叠也会显示),只是不知对不对:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=-1
  4. for /f "tokens=1,2 delims=," %%i in (nums.txt) do (
  5.     set /a n+=1
  6.     set /a m=n/3
  7.     if !m! equ 0 (
  8.         if %%j gtr 4 set n=-1
  9.     ) else if !m! equ 1 (
  10.         if !n! equ 3 (
  11.             if %%j lss 7 (
  12.                 if %%j gtr 4 (
  13.                     set n=-1
  14.                 ) else (
  15.                     set n=2
  16.                 )
  17.             )
  18.         ) else (
  19.             if %%j lss 7 (
  20.                 if %%j gtr 4 (
  21.                     set n=-1
  22.                 ) else (
  23.                     set n=0
  24.                 )
  25.             )
  26.         )
  27.     ) else (
  28.         if %%j gtr -7 (
  29.             if %%j gtr 4 (
  30.                 set /a n-=7
  31.             ) else (
  32.                 set /a n-=6
  33.             )
  34.         ) else (
  35.             if !n! equ 8 (
  36.                 echo,%%i,%%j
  37.                 set n=2
  38.             )
  39.         )
  40.     )
  41. )
  42. pause
复制代码

TOP

优化一下自己楼上的代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=-1
  4. for /f "tokens=1,2 delims=," %%i in (a.txt) do (
  5.     set /a n+=1
  6.     set /a m=n/3
  7.     if !m! equ 0 (
  8.         if %%j gtr 4 set n=-1
  9.     ) else if !m! equ 1 (
  10.         if %%j lss 7 (
  11.             if %%j gtr 4 (
  12.                 set n=-1
  13.             ) else (
  14.                 if !n! equ 3 (
  15.                     set n=2
  16.                 ) else (
  17.                     set n=0
  18.                 )
  19.             )
  20.         )
  21.     ) else (
  22.         if %%j gtr -7 (
  23.             if %%j gtr 4 (
  24.                 set /a n-=7
  25.             ) else (
  26.                 set /a n-=6
  27.             )
  28.         ) else (
  29.             if !n! equ 8 (
  30.                 echo,%%i,%%j
  31.                 set n=2
  32.             )
  33.         )
  34.     )
  35. )
  36. pause
复制代码

TOP

返回列表