标题: [数值计算] [已解决]批处理怎么对比即时输入的200个4位数? [打印本页]
作者: chenqldiy 时间: 2011-5-8 20:49 标题: [已解决]批处理怎么对比即时输入的200个4位数?
我想做个批,不停地输入4位数,最多200个,对比之前所有输入,相同的话就提示,这个能实现吗?
产生临时文件没问题。
二楼不是我想要的
我想的大概如下
:a
1:键盘输入数,用数组array保存数加个","
2:用for 截取array对比数,相同返回:a重新输入,不相同输入文件,再返回a
问题如下
1:我输入太多,for数组会不会太慢?有么需要等?有么更好的办法?
2:屏幕下面会echo数组出来,让我知道输入多少个不相同的数了
我的浏览器出问题,在编辑帖子老是关掉,回头一看,3楼都出来了~~~
!dataSet:%%v-=!我看不明白什么意思=。=
4楼也有个!str:%%a=!~~~~~
测试下发现4楼的代码我改下就可以达到我想要的结果了,我还是想问下
for /f %%a in (",!n!,") do if "!str:%%a=!"=="!str!"
与我想到的截取for /f "delims=," %%i in %array% do if %i%==%数% 有什么区别
ok咯。嗯嗯
发下我最后的代码- @echo off
- setlocal enableDelayedExpansion
- set str=,
- :loop
- set /p n=请输入数字&cls
- echo %n%|findstr /be "[0-9]*">nul||goto loop
- set n=0000!n!
- set n=!n:~-4!
- for /f %%a in (",!n!,") do if "!str:%%a=!"=="!str!" (
- set str=,!n!!str!
- set /a m+=1
- echo !str!
- echo 总共有!m!个号码
- ) else (
- echo 已存在!n!
- echo !str!
- echo 总共有!m!个号码
- )
- goto loop
复制代码
作者: hanyeguxing 时间: 2011-5-8 21:47
本帖最后由 hanyeguxing 于 2011-5-8 21:48 编辑
200次?累死个人了。。。- @echo off
- :a
- set a=%random:~-1%%random:~-1%%random:~-1%%random:~-1%
- if defined #%a% (echo;%a%重复&goto:a) else set #%a%==&set/ab+=1
- if %b% lss 200 goto:a
- set #&pause
复制代码
作者: neorobin 时间: 2011-5-8 23:05
- @echo off & setlocal enableDelayedExpansion
- set nl=^
-
-
- set dataSet=!nl!
- for /l %%i in (1 1 0xffff) do (
- set /p var="Please input a new data No. %%i: "
- for %%v in (!var!) do (
- if "!dataSet:%%v-=!"=="!dataSet!" (
- echo It's a new data.!nl!
- ) else (
- echo This data: %%v has been entered:
- for /f "delims=" %%s in ("!dataSet!") do (
- set sect=%%s
- if not "!sect:%%v-=!"=="!sect!" echo No. !sect:%%v-=!
- )
- echo.
- )
- set dataSet=!dataSet!%%v-%%i!nl!
- )
- )
复制代码
作者: CrLf 时间: 2011-5-8 23:17
- @echo off & setlocal enableDelayedExpansion
- set str=,
- for /l %%i in () do (
- set /p n=请输入数值
- for /f %%a in (",!n!,") do if "!str:%%a=!"=="!str!" (
- set str=,!n!!str!
- set /a m+=1
- ) else echo 已存在!n!
- if !m! gtr 200 for %%a in (!str!) do echo %%a
- )
- pause
复制代码
作者: vsbat 时间: 2011-5-8 23:56
- @echo off
- set /a n=0
- set /a maxnum=240
-
- :DO
- set /p x=Input:
- if defined #%x% (call :SHOWOK) else (set "#%x%=v")
- set /a n+=1
- if %n% geq %maxnum% (goto :END)
- goto :DO
-
- :SHOWOK
- echo.找到一个重复的: %x%
- exit /b
-
- :END
- echo.结束
- pause
- EXIT
复制代码
作者: neorobin 时间: 2011-5-9 00:34
本帖最后由 neorobin 于 2011-5-9 01:04 编辑
!dataSet:%%v-=!
是变量替换的形式, 例如, 当前变量 dataSet 的值是:
新行0943-1新行0765-2新行0943-3新行
而 %%v 的值是
0943
这里替换就是 把 dataSet 内容里的 0943-都替换成 "空"
那么 !dataSet:%%v-=! 就会是:
新行1新行0765-2新行3新行
相对于你手工录入的速度, 200 个数据(元素字符串长度也不过5,6位)的数组(实为一个长字符串)用 for 来处理的耗时你根本就感觉不出来的.
你的需要仍不太清楚, 要不要接受重复录入的数据?
不接受重复录入的代码很简单一些:- @echo off & setlocal enableDelayedExpansion
- set dataSet=,
- set cnt=0
- for /l %%i in (0 0 0) do (
- cls & color 07 & echo dataSet (!cnt! items^): !dataSet:~1,-1!
- set /a cnt+=1
- echo. & set /p var="Please input the No. !cnt! data: "
- for %%v in (!var!) do (
- if "!dataSet:,%%v,=!"=="!dataSet!" (
- set dataSet=!dataSet!%%v,
- ) else (
- color 0c
- echo This data: %%v has been entered: & pause
- set /a cnt-=1
- )
- )
- )
复制代码
作者: chenqldiy 时间: 2011-5-9 01:52
本帖最后由 chenqldiy 于 2011-5-9 01:54 编辑
评分只能一次,谢谢4楼6楼
6楼后天我看看能不能再给分
6楼代码看不明白,但是说明很好,正在研究中代码,第一次发题所以问题不是说的很明白,但是却找到了自己想要的答案了
=。=!!!
还有就是,对于!str:%%a=!这样的问题,真是不知道怎么去搜索才能有找到答案。新手啊新手
作者: wankoilz 时间: 2011-5-9 08:30
本帖最后由 wankoilz 于 2011-5-9 08:45 编辑
!str:%%a=!作用是把变量str里的%%a的值去掉。比如str=abxxab,%%a=ab,那么!str:%%a=!=xx
if "!str:%%a=!"=="!str!" 是判断输入的数字是不是已经有了,如果==两头的str不相等说明str里有%%a了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |