|
flybird2020
初级用户
积分 103
发帖 52
注册 2007-4-13
状态 离线
|
『楼 主』:
[已结]提取变量中的数字
a.txt内容如下:
DOS<Disk Operating System>,代表着136598自由开放与发展,我们努力064025起来,学习FreeDOS和Linux的自由12开放与GNU精789542神,共同创造和发展美好的88自由321546与GNU GPL世界吧! 希望得到结果如下:
136598
064025
789542
321546 只提取连续6个数字,每个数字换行输出。
目前我写的代码(效率很低):
@echo off&&setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do (
set var=%%a
for /l %%i in (0,1,200) do (
set checkvar=!var:~%%i,6!
echo !checkvar!|findstr "[0-9][0-9][0-9][0-9][0-9][0-9]">>b.txt
))
pause. 望达人指点,如何修改以提高效率
谢谢大家,我采用了netbenton的代码,受益非浅。 [ Last edited by flybird2020 on 2009-5-20 at 03:01 ]
|
|
2009-5-19 00:20 |
|
|
mac007cn
初级用户
积分 46
发帖 18
注册 2009-4-3
状态 离线
|
|
2009-5-19 00:25 |
|
|
flybird2020
初级用户
积分 103
发帖 52
注册 2007-4-13
状态 离线
|
『第
3 楼』:
Quote: | Originally posted by mac007cn at 2009-5-19 12:25 AM:
写个C程序能实现。 |
|
只想用批处理,谢谢哥们儿。
|
|
2009-5-19 00:26 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
|
2009-5-19 02:03 |
|
|
tireless
银牌会员
积分 2025
发帖 1122
注册 2007-9-5
状态 离线
|
『第
5 楼』:
@echo off&setlocal enabledelayedexpansion
(for /f "tokens=*" %%a in (a.txt) do (
set str=%%a▓
for /l %%a in (0 1 9) do set str=!str:%%a=▓%%a!
call :loop
))>b.txt
exit /b
:loop
if "!str:*▓=!"=="" (goto :eof) else set str=!str:*▓=!
set var=!str:~,11!
set /a !var:▓=! 2>nul && (
if "!str:~11,1!" neq "▓" set "str=!str:~11!" & echo !var:▓=!
) || for /f "tokens=* delims=0123456789▓" %%a in ("!str!") do set str=%%a
goto loop [ Last edited by tireless on 2009-5-19 at 04:26 ]
|
|
2009-5-19 03:21 |
|
|
yangfengoo
初级用户
积分 47
发帖 41
注册 2009-4-24
状态 离线
|
『第
6 楼』:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (a.txt) do ( set var=%%a
for /f "skip=1 delims=:" %%a in ('^(echo "!var!"^&echo.^)^|findstr /o ".*"') do set /a length=%%a-5
for /l %%i in (0,1,!length!) do if "!var:~%%i,6!" leq "9" if "!var:~%%i,6!" geq "0" echo !var:~%%i,6!>>vv.txt
findstr "[0-9][0-9][0-9][0-9][0-9][0-9]" vv.txt>>b.txt
del vv.txt
) 楼主的方法用临时文件快些。
|
正在学习中…… |
|
2009-5-19 03:33 |
|
|
yangfengoo
初级用户
积分 47
发帖 41
注册 2009-4-24
状态 离线
|
『第
7 楼』:
Quote: | Originally posted by tireless at 2009-5-19 03:21:
[code]@echo off&setlocal enabledelayedexpansion
(for /f "tokens=*" %%a in (a.txt) do (
set str=%%a▓
for /l %%a in (0 1 9) do set str=!str:%%a=▓%%a!
call :loop
))>b.t ... |
|
汗,偶是菜鸟完全看不懂,▓ 特殊符号有什么作用啊
|
正在学习中…… |
|
2009-5-19 03:35 |
|
|
tireless
银牌会员
积分 2025
发帖 1122
注册 2007-9-5
状态 离线
|
『第
8 楼』:
把整句替换成
DOS<Disk Operating System>,代表着▓1▓3▓6▓5▓9▓8自由开放与发展,我们努力▓0▓6▓4▓0▓2▓5起来,学习FreeDOS和Linux的自由▓1▓2开放与GNU精▓7▓8▓9▓5▓4▓2神,共同创造和发展美好的▓8▓8自由▓3▓2▓1▓5▓4▓6与GNU GPL世界吧!▓
然后 set str=!str:*▓=! 就变成了
1▓3▓6▓5▓9▓8自由开放与发展,我们努力▓0▓6▓4▓0▓2▓5起来,学习FreeDOS和Linux的自由▓1▓2开放与GNU精▓7▓8▓9▓5▓4▓2神,共同创造和发展美好的▓8▓8自由▓3▓2▓1▓5▓4▓6与GNU GPL世界吧!▓
然后 set var=!str:~,11!,再判断 !var:▓=! 是不是纯数字...
循环...
[ Last edited by tireless on 2009-5-19 at 04:26 ]
|
|
2009-5-19 03:50 |
|
|
yangfengoo
初级用户
积分 47
发帖 41
注册 2009-4-24
状态 离线
|
『第
9 楼』:
绕了好多弯哦。
|
正在学习中…… |
|
2009-5-19 04:06 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
|
2009-5-19 10:09 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
|
2009-5-19 10:36 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
12 楼』:
我前面先定义下 可行吗
@echo off
for /l %%i in (0,1,9) do set "_%%i=%%i"
for /f "delims=" %%a in (a.txt) do (
set "var=%%a"&set n=0
setlocal enabledelayedexpansion
for /l %%i in (0,1,200) do (
set v=!var:~%%i,1!
if defined _!v! (set/a n+=1&set str=!str!!v!) else (
if !n! geq 6 echo !str!
set "n=0"&set "str="
))
endlocal
)
pause
|
简单!简单!再简单! |
|
2009-5-20 01:44 |
|