Board logo

标题: [数值计算] [已解决]批处理怎么对比即时输入的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咯。嗯嗯
发下我最后的代码
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set str=,
  4. :loop
  5. set /p n=请输入数字&cls
  6. echo %n%|findstr /be "[0-9]*">nul||goto loop
  7. set n=0000!n!
  8. set n=!n:~-4!
  9. for /f %%a in (",!n!,") do if "!str:%%a=!"=="!str!" (
  10. set str=,!n!!str!
  11. set /a m+=1
  12. echo !str!
  13. echo 总共有!m!个号码
  14. ) else (
  15. echo 已存在!n!
  16. echo !str!
  17. echo 总共有!m!个号码
  18. )
  19. goto loop
复制代码

作者: hanyeguxing    时间: 2011-5-8 21:47

本帖最后由 hanyeguxing 于 2011-5-8 21:48 编辑

200次?累死个人了。。。
  1. @echo off
  2. :a
  3. set a=%random:~-1%%random:~-1%%random:~-1%%random:~-1%
  4. if defined #%a% (echo;%a%重复&goto:a) else set #%a%==&set/ab+=1
  5. if %b% lss 200 goto:a
  6. set #&pause
复制代码

作者: neorobin    时间: 2011-5-8 23:05

  1. @echo off & setlocal enableDelayedExpansion
  2. set nl=^
  3. set dataSet=!nl!
  4. for /l %%i in (1 1 0xffff) do (
  5.   set /p var="Please input a new data No. %%i: "
  6.   for %%v in (!var!) do (
  7.     if "!dataSet:%%v-=!"=="!dataSet!" (
  8.       echo It's a new data.!nl!
  9.     ) else (
  10.       echo This data: %%v has been entered:
  11.       for /f "delims=" %%s in ("!dataSet!") do (
  12.         set sect=%%s
  13.         if not "!sect:%%v-=!"=="!sect!" echo No. !sect:%%v-=!
  14.       )
  15.       echo.
  16.     )
  17.     set dataSet=!dataSet!%%v-%%i!nl!
  18.   )
  19. )
复制代码

作者: CrLf    时间: 2011-5-8 23:17

  1. @echo off & setlocal enableDelayedExpansion
  2. set str=,
  3. for /l %%i in () do (
  4. set /p n=请输入数值
  5. for /f %%a in (",!n!,") do if "!str:%%a=!"=="!str!" (
  6. set str=,!n!!str!
  7. set /a m+=1
  8. ) else echo 已存在!n!
  9. if !m! gtr 200 for %%a in (!str!) do echo %%a
  10. )
  11. pause
复制代码

作者: vsbat    时间: 2011-5-8 23:56

  1. @echo off
  2. set /a n=0
  3. set /a maxnum=240
  4. :DO
  5. set /p x=Input:
  6. if defined #%x% (call :SHOWOK) else (set "#%x%=v")
  7. set /a n+=1
  8. if %n% geq %maxnum% (goto :END)
  9. goto :DO
  10. :SHOWOK
  11. echo.找到一个重复的: %x%
  12. exit /b
  13. :END
  14. echo.结束
  15. pause
  16. 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 来处理的耗时你根本就感觉不出来的.
你的需要仍不太清楚, 要不要接受重复录入的数据?

不接受重复录入的代码很简单一些:
  1. @echo off & setlocal enableDelayedExpansion
  2. set dataSet=,
  3. set cnt=0
  4. for /l %%i in (0 0 0) do (
  5.   cls & color 07 & echo dataSet (!cnt! items^): !dataSet:~1,-1!
  6.   set /a cnt+=1
  7.   echo. & set /p var="Please input the No. !cnt! data: "
  8.   for %%v in (!var!) do (
  9.     if "!dataSet:,%%v,=!"=="!dataSet!" (
  10.       set dataSet=!dataSet!%%v,
  11.     ) else (
  12.       color 0c
  13.       echo This data: %%v has been entered: & pause
  14.       set /a cnt-=1
  15.     )
  16.   )
  17. )
复制代码

作者: 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://www.bathome.net/) Powered by Discuz! 7.2