[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

回复 34楼 的帖子

for %%i in (#!var:~-1!) do (
    set "var=!%%i! "
    if "!var: %%a =!"=="!var!"
set %%i=!%%i! %%a
  )

这个 for 处理了重复数字。我没有把每个数字设为变量,只用了这些变量:var、#0 至 #9

[ 本帖最后由 tireless 于 2009-4-14 21:04 编辑 ]

TOP

回楼上,事实胜于雄辩,兄弟还是先测试下吧。。。
***共同提高***

TOP

回复 36楼 的帖子

不会显示重复数字啊。

TOP

  1. @echo off
  2. if "%~1"=="b" (
  3.    setlocal enabledelayedexpansion
  4.    for /f "delims=" %%a in (a.txt) do (
  5.       for %%i in (%%a) do (
  6.          set "var=     %%i"
  7.          echo !var:~-1! !var:~-5!
  8. ))
  9. exit /b
  10. )
  11. setlocal enabledelayedexpansion
  12. for /f "tokens=1* delims= " %%a in ('%~s0 b^|sort') do set .%%a=!.%%a! %%b
  13. for /l %%a in (0 1 9) do if defined .%%a echo %%a !.%%a!
  14. pause
复制代码
1

评分人数

技术问题请到论坛发帖求助!

TOP

我试试

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::先排序,再按尾数取
  4. ::第一步构建一维数组,并给每个元数武值
  5. for /f "delims=*" %%i in (a.txt) do (
  6.   for %%j in (%%i) do (
  7.       set /a n+=1&set _!n!=%%j
  8. )
  9. )
  10. ::用选择法排序
  11. rem echo %n%
  12. for /l %%i in (1,1,%n%) do (
  13.   set /a m=%%i+1
  14.   for /l %%j in (!m!,1,%n%) do (
  15.        if !_%%i! gtr !_%%j! (
  16.             set /a t=_%%i
  17.             set /a _%%i=!_%%j!
  18.             set /a _%%j=t  
  19. )
  20. )
  21. )
  22. ::按尾数取
  23. for /l %%i in (1,1,%n%) do (
  24.      for /l %%j in (0,1,9) do (
  25.        if !_%%i:~-1! ==%%j set a_%%j=!a_%%j! !_%%i!
  26. )
  27. )
  28. ::输出
  29. for /l %%k in (0,1,9) do (
  30. if !a_%%k! neq 0 echo %%k  !a_%%k!
  31. )
  32. rem set a_
  33. rem set _
  34. pause>nul
复制代码
缺点是建一维数组时变量过多,优点是易读易写

TOP

to:随风

随风的贴子测了一下,不能运行,可能和我的win2000系统有关

[ 本帖最后由 tyc 于 2009-4-15 09:33 编辑 ]

TOP

回复 4楼 的帖子

for 比 call 快多了,但是用 for /l 似乎没必要,白浪费了9次循环,直接用 for 不是更好吗?
for %%i in (%%a) do set .%%a=!.%%a! 。。。。
技术问题请到论坛发帖求助!

TOP

自己想的,没有实现排序:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (0 1 9) do (
  3.     for /f "delims=" %%j in (a.txt) do (
  4.         for %%k in (%%j) do (
  5.             set num=%%k
  6.             if "!num:~-1,1!"=="%%i" set _%%i=!_%%i! !num!
  7. )
  8. )
  9. if "!_%%i!" neq "" echo %%i !_%%i!
  10. )
  11. pause
复制代码
(*^_^*)

TOP

回复 40楼 的帖子

38楼用到的外部命令只有一个sort.exe
如果你机器上没有可以到别人机器上拷贝一个过来
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

谢batcher,虽然用sort,或set变量名进行排序很妙,但传统的排序更有意思,比如选择法,插入法,快速法,堆排序等七种,我水平有限,有些排序的写法写不出来!

TOP

回复 44楼 的帖子

对于少量数据的排序,批处理中的set无疑是上上之选。对于大量数据的排序,set可能就不行了,因为一个批处理中是不允许无限制的定义变量的,这时就可以考虑用sort。对于高级语言中的那些传统排序算法,在批处理中往往需要一大段代码(批处理不像高级语言那样可以方便的使用数组、指针等数据结构)来实现,不利于阅读和维护,不到万不得已,还是少用为妙。当然,如果纯粹是挑战自我,玩一玩也未尝不可。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

分类+排序+排版

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.       for %%b in (%%a) do (
  4.          set "var=      %%b"
  5.          set/a n=n+1
  6.          set #!var:~-5!#!n!=!var:~-1!
  7. )     )
  8. for /f "tokens=1,3 delims==#" %%a in ('set #') do (set #%%b=!#%%b!%%a)
  9. for /l %%a in (0,1,9) do (if defined #%%a echo %%a!#%%a!)
  10. pause
复制代码

TOP

::分类+排序(比较提取法)

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.       for %%b in (%%a) do (
  4.          set "var=%%b"
  5.         for %%c in (!var:~-1!) do (set #%%c=!#%%c! %%b)
  6. )     )
  7. for /l %%a in (0,1,9) do (if defined #%%a (
  8.         set a=!#%%a!&set r=
  9.         set lb=!a:* =!
  10.         set lb=!lb:* =!
  11.         for %%b in (!lb!) do (
  12.                 set var=!a:1000=!&set a=&set v=1000
  13.                 for %%c in (!var!) do (
  14.                         if !v! leq %%c (set a=%%c !a!) else (set a=!v! !a!&set v=%%c)
  15.                 )
  16.                 set r=!r! !v!
  17.                
  18.         )
  19.         echo.%%a !r! !a:1000=!
  20. ))
  21. pause
复制代码

TOP

嗯...我做出来了(办法很原始)..小水个~我发现我在BATHOME进步了很多啊,我记得我在这里做的第一个新手练习题花了2小时写了N多代码,然后面对大大们的超简洁代码直接扑街了..

TOP

等batman兄发出召唤,我们版主或技术组再贴出代码。但是我好像不是版主,也不是技术组的^_^
(*^_^*)

TOP

返回列表