中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-26 01:25
47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行
DOS批处理 & 脚本技术(批处理室) » [挑战2] 变量的检测和计算[难度:★]
可打印版本  4,665 / 38
第31楼 111ab 发表于 2007-05-10 13:35
新手上路 发帖 1 积分 2
Originally posted by bjsh at 2007-5-1 05:16 AM:
抽出了点时间 写了这个..
结果为:24691356902469134

bjsh兄:
无意间看到了你的帖子,被你的代码折服了。花了一天多时间拜读了一下你的代码,刚弄懂提取数字字段那部分,我是菜鸟,别笑话我,哈。有点问题想请教。
感觉你的 findstr 的正则表达式对字串类似"12345adfadfds45156"(头尾均为数字,但中间为字符)的情况也能匹配。我想改成这样地:
findstr "^*$" tmp.txt
你的findstr中有个参数是 /r , 我在命令行查看findstr的帮助的时候没看到有这个参数,就对加 /r 和不加 /r两种情况分别试了一下,没看出什么区别,那个 /r 是做什么用地呢?

注:正则表达式 "^*$" 并不能匹配字串类似"123457684 "的情况,所以:get_number段中代码要做一下小小改动,我的建议如下:
原代码: echo %1 >>tmp.txt & shift
修改后: echo %1>>tmp.txt& shift ::注意该处%1后和.txt后均不能有空格,否则空格会被输入到.txt中,影响正则表达式的匹配。
或改成: echo %1>>tmp.txt
shift
第32楼 flyinspace 发表于 2007-05-10 17:24
银牌会员 发帖 517 积分 1,206
Originally posted by 111ab at 2007-5-10 01:35 PM:

bjsh兄:
无意间看到了你的帖子,被你的代码折服了。花了一天多时间拜读了一下你的代码,刚弄懂提取数字字段那部分,我是菜鸟,别笑话我, ...

我对正则表达式还是不太明白。。刚刚接触vbs。。

但兄可以仔细看看 findstr /?

里面有说明: /r 表示使用一般表达式。而根据下面对一般表达式的描叙,应该是属于正则表达式范畴。
第33楼 bjsh 发表于 2007-06-06 10:55
银牌会员 发帖 621 积分 2,000
to 111ab

感觉你的 findstr 的正则表达式对字串类似"12345adfadfds45156"(头尾均为数字,但中间为字符)的情况也能匹配。我想改成这样地:
findstr "^*$" tmp.txt



注:正则表达式 "^*$" 并不能匹配字串类似"123457684 "的情况,所以:get_number段中代码要做一下小小改动,我的建议如下:
原代码: echo %1 >>tmp.txt & shift
修改后: echo %1>>tmp.txt& shift ::注意该处%1后和.txt后均不能有空格,否则空格会被输入到.txt中,影响正则表达式的匹配。
或改成: echo %1>>tmp.txt
shift



感谢兄的指点;
兄的建议 很有道理
第34楼 26933062 发表于 2007-08-15 19:12
银牌会员 发帖 879 积分 2,268


[ Last edited by 26933062 on 2007-8-15 at 07:51 PM ]
第35楼 youxi01 发表于 2007-08-15 20:58
高级用户 发帖 247 积分 846 来自 湖南==》广东
又回到这个问题了。
刚刚想到一个“补位”的方法来实现加法,从而避开所有的if检查,而且程序主要部分都是在for中运行,避开了goto的使用,从而使效率大大提高(特别是针对特大数字)。所给程序代码支持 200 位以内数字的加法。


[ Last edited by youxi01 on 2007-8-15 at 09:07 PM ]
第36楼 knoppix7 发表于 2007-08-15 22:31
银牌会员 发帖 634 积分 1,287 来自 cmd.exe
高手看看这个行不??


@echo off
set "num1=qwer/asdf2/asd34f/1234567890123456/asdf/aaaa"
set "num2=aaaaa2/23456789012345678/asdfssasd/asdaa"
SETLOCAL ENABLEDELAYEDEXPANSION
set tester=500
:main1
FOR /F "tokens=1,2* delims=/" %%i in ("%num1%") do (
set NTC=
set RUS=
set NTC=%%i
set /a RUS=%tester%+!NTC!>>nul>>nul
if !ERRORLEVEL!==9168 set shuzi1=!NTC!
set num1=%%j/%%k
goto main1
)
cls
:main2
FOR /F "tokens=1,2* delims=/" %%a in ("%num2%") do (
set NTC=
set RUS=
set NTC=%%a
set /a RUS=%tester%+!NTC!>>nul>>nul
if !ERRORLEVEL!==9168 set shuzi2=!NTC!
set num2=%%b/%%c
goto main2
)
cls
echo !shuzi1!
echo !shuzi2!
pause
第37楼 26933062 发表于 2007-08-16 20:05
银牌会员 发帖 879 积分 2,268
第38楼 youxi01 发表于 2007-08-16 20:31
高级用户 发帖 247 积分 846 来自 湖南==》广东
哦,你试下特大数字就知道了
第39楼 knoppix7 发表于 2007-08-16 20:37
银牌会员 发帖 634 积分 1,287 来自 cmd.exe
LZ给的数字很长。
直接用set运算会报错。ERROELV为9168
那样只要只要检测到ERRORLEVEL==9168不就可以了?
上一页  1 2 3
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023