批處理新手入門導讀[視頻教程]批處理基礎視頻教程[視頻教程]VBS基礎視頻教程
[批處理文件精品]批處理版照片整理器[批處理文件精品]純批處理備份&還原驅動在線第三方下載
返回列表 發帖

[文本處理] 需要提取文本連續數字

00001
00002
00003
00004
00008
00010
00013
00014
00015
00016
00021
00022
00023
00026
00030
00031
00035
00036
00049
00060
00061
00062
00065


提取出連續的4位數字
提取后的文本樣子如下

00001
00002
00003
00004


00013
00014
00015
00016


00021
00022
00023
00024

數據保存為1.txt
for讀取每一行,然后再一路判斷下去
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd.>"out.txt"
  4. (
  5. for /f %%i in (1.txt) do (
  6. if "!v1!"=="" (
  7. set "v1=%%i"
  8. ) else (
  9. if "!v2!"=="" (
  10. set /a "1/(1!v1!+1-1%%i)" >nul 2>nul && ( set "v1=%%i" ) || set "v2=%%i"
  11. ) else (
  12. if "!v3!"=="" (
  13. set /a "1/(1!v2!+1-1%%i)" >nul 2>nul && ( set "v1=%%i" & set "v2=" ) || set "v3=%%i"
  14. ) else (
  15. if "!v4!"=="" (
  16. set /a "1/(1!v3!+1-1%%i)" >nul 2>nul && ( set "v1=%%i" & set "v2=" & set "v3=" ) || set "v4=%%i"
  17. )
  18. )
  19. )
  20. )
  21. if not "!v4!"=="" (
  22. echo !v1!
  23. echo !v2!
  24. echo !v3!
  25. echo !v4!
  26. echo.
  27. set "v1=" & set "v2=" & set "v3=" & set "v4="
  28. )
  29. )
  30. )>"out.txt"
  31. type "out.txt"
  32. pause&exit
復制代碼
1

評分人數

TOP

十分感謝大神

TOP

本帖最后由 WHY 于 2020-6-17 01:03 編輯
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in (a.txt) do (
  4.     set "s1=!s2!"
  5.     set "s2=!s3!"
  6.     set "s3=!s4!"
  7.     set "s4=%%i"
  8.     if defined s1 (
  9.         set /a n1=1!s1! + 3, n2=1!s2! + 2, n3=1!s3! + 1, n4=1!s4!
  10.         if "!n1!" == "!n2!" if "!n2!" == "!n3!" if "!n3!" == "!n4!" (
  11.             echo;!s1!
  12.             echo;!s2!
  13.             echo;!s3!
  14.             echo;!s4!
  15.             Rem endlocal & setlocal enabledelayedexpansion
  16.         )
  17.     )   
  18. )
  19. pause
復制代碼

TOP

本帖最后由 flashercs 于 2020-6-17 06:33 編輯
  1. @echo off
  2. REM 查找step=1的等差數列arithmetric progression,長度為arraylen
  3. setlocal enabledelayedexpansion
  4. set in=series.txt
  5. set out=ArithmetricProgression.txt
  6. set arraylen=4
  7. set step=1
  8. if %arraylen% lss 1 (
  9.   echo 序列長度必須是大于0的整數
  10.   goto end
  11. )
  12. REM init: clear array
  13. for /f "delims==" %%A in ('2^>nul set arr[') do set %%A=
  14. set /a i=begin=0,end=begin+arraylen-1
  15. (
  16.   for /f "delims=" %%A in (%in%) do (
  17.     if !i! gtr %begin% (
  18.       set /a p=i-1
  19.       for %%P in (!p!) do set /a sub=1%%A-1!arr[%%P]!
  20.       if !sub! neq %step% (
  21.         set /a i=begin
  22.       )
  23.     )
  24.     set arr[!i!]=%%A
  25.     if !i! equ %end% (
  26.       for /l %%B in (%begin%,1,%end%) do echo !arr[%%B]!
  27.       echo.
  28.       set /a i=begin
  29.     ) else (
  30.       set /a i+=1
  31.     )
  32.   )
  33. )
  34. :end
  35. endlocal
  36. pause
  37. exit /b
復制代碼
1

評分人數

微信:flashercs
QQ:49908356

TOP

各位可以試下這種情況,3種代碼輸出都不一樣
插入00005
具體要看樓主怎么保留
  1. 00001
  2. 00002
  3. 00003
  4. 00004
  5. 00005
  6. 00008
  7. 00010
  8. 00013
  9. 00014
  10. 00015
  11. 00016
  12. 00021
  13. 00022
  14. 00023
  15. 00026
  16. 00030
  17. 00031
  18. 00035
  19. 00036
  20. 00049
  21. 00060
  22. 00061
  23. 00062
  24. 00065
復制代碼

TOP

回復 6# went


    我倒是覺得,只要能夠正確處理頂樓的樣本就好。

TOP

回復 6# went

原來忽略了一種情況,現在修改了.可以任意修改數列長度,步長可為負值
微信:flashercs
QQ:49908356

TOP

  1. #! /usr/bin/env python3
  2. # ! coding:utf-8
  3. #auto detect step is negative or positive
  4. arr = list(map(lambda x: str(x).replace('\n', ''), open('series.txt', 'r')))
  5. result = list()
  6. _next = None
  7. nega_or_posi = (int(arr[1]) - int(arr[0])) /abs(int(arr[1]) - int(arr[0]))
  8. for i in range(len(arr)):
  9.     if i != len(arr)-1 and int(arr[i].lstrip('0')) + nega_or_posi == int(arr[i+1].lstrip('0')):
  10.         result.append(arr[i])
  11.         _next = arr[i + 1]
  12.     elif isinstance(_next, str):
  13.         result.append(_next)
  14.         _next = None
  15. print(result)
復制代碼
腳本小子:www.jbxiaozi.com

TOP

第三方庫
  1. import more_itertools as mit
  2. iterable = list(map(lambda x: int(str(x).strip('0\n')), open('num', 'r')))
  3. result = map(lambda x: [str(i).zfill(5) for i in x], list(filter(lambda x:len(x) > 1, [list(group) for group in mit.consecutive_groups(iterable)])))
  4. print(list(result))
復制代碼
腳本小子:www.jbxiaozi.com

TOP

返回列表
捕鱼大师官网客服电话 青海快三投注技巧 个人理财产品投资期限 4887管家婆结果开奖结果小说 今日股市股票 甘肃快三最新走势图 湖北十一选五技巧 幸运28在线预测尽享网 时时彩平台排行2018 体育彩票快乐扑克3 体育彩票大乐透预测号 贵阳快3开奖结果查询 股票下跌突然放量 内蒙古十一选五走势图 期货配资联系久联优配 二肖四码默认论坛网址 福建31选7走势图查询