标题: [文本处理] [已解决]批处理如何筛选出符合规律的连续数字? [打印本页]
作者: ngd 时间: 2022-5-17 18:56 标题: [已解决]批处理如何筛选出符合规律的连续数字?
本帖最后由 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即可
作者: flashercs 时间: 2022-5-17 23:20
- @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- set src=nums.txt
-
- for /f "tokens=1-2 delims=," %%A in (%src%) do (
- set a0=!a1!
- set a1=!a2!
- set a2=!a3!
-
- set a3=!a4!
- set a4=!a5!
- set a5=!a6!
-
- set a6=!a7!
- set a7=!a8!
- set a8=%%B
-
- if defined a0 if !a0! leq 4 if defined a1 if !a1! leq 4 if defined a2 if !a2! leq 4 (
- if defined a3 if !a3! geq 7 if defined a4 if !a4! geq 7 if defined a5 if !a5! geq 7 (
- if defined a6 if !a6! leq -7 if defined a7 if !a7! leq -7 if defined a8 if !a8! leq -7 (
- echo !a8!
- )
- )
- )
- )
-
- endlocal
- pause
- exit /b
复制代码
作者: for_flr 时间: 2022-5-19 11:31
再提供一种思路,借powershell用正则来匹配- #&cls&powershell "iex(gc '%~0'|out-string)"&pause&exit\b
- $txt="C:\Users\lenovo\Desktop\nums.txt"
- $nums=@()
- gc $txt|%{$nums+=$_.split(",")[1]}
- $line=$nums -join "#"
- $pattern="([0-4]#|-\d+#){3}([7-9]#|[1-9]\d+#){3}(-[7-9]#|-[1-9]\d+#){3}"
- $check=[regex]::matches($line,$pattern).value
- ($check -split "#"|?{$_ -ne ""})[-1]
复制代码
作者: qixiaobin0715 时间: 2022-8-27 10:17
本帖最后由 qixiaobin0715 于 2022-8-27 10:19 编辑
翻出老帖练练手,兼顾数据重叠(多组数据重叠也会显示),只是不知对不对:- @echo off
- setlocal enabledelayedexpansion
- set n=-1
- for /f "tokens=1,2 delims=," %%i in (nums.txt) do (
- set /a n+=1
- set /a m=n/3
- if !m! equ 0 (
- if %%j gtr 4 set n=-1
- ) else if !m! equ 1 (
- if !n! equ 3 (
- if %%j lss 7 (
- if %%j gtr 4 (
- set n=-1
- ) else (
- set n=2
- )
- )
- ) else (
- if %%j lss 7 (
- if %%j gtr 4 (
- set n=-1
- ) else (
- set n=0
- )
- )
- )
- ) else (
- if %%j gtr -7 (
- if %%j gtr 4 (
- set /a n-=7
- ) else (
- set /a n-=6
- )
- ) else (
- if !n! equ 8 (
- echo,%%i,%%j
- set n=2
- )
- )
- )
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2022-9-19 15:17
优化一下自己楼上的代码:- @echo off
- setlocal enabledelayedexpansion
- set n=-1
- for /f "tokens=1,2 delims=," %%i in (a.txt) do (
- set /a n+=1
- set /a m=n/3
- if !m! equ 0 (
- if %%j gtr 4 set n=-1
- ) else if !m! equ 1 (
- if %%j lss 7 (
- if %%j gtr 4 (
- set n=-1
- ) else (
- if !n! equ 3 (
- set n=2
- ) else (
- set n=0
- )
- )
- )
- ) else (
- if %%j gtr -7 (
- if %%j gtr 4 (
- set /a n-=7
- ) else (
- set /a n-=6
- )
- ) else (
- if !n! equ 8 (
- echo,%%i,%%j
- set n=2
- )
- )
- )
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |