中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-23 14:14
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,273 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助]数值排序(难并已解)
可打印版本  13,961 / 31
第1楼 bat-zw 发表于 2008-04-29 22:22
金牌会员 发帖 1,276 积分 3,105
[求助]数值排序(难并已解)
如有一列数值如:56 12 33 48 99 105 5 16
怎么通过批处理输出为:5 12 16 33 48 56 99 105
要求不生成任何临时文件。
----------------------------------------------------------------------------------------------------------
综合所有,本人的通用代码如下:

再扩展:


[ Last edited by zw19750516 on 2008-5-4 at 09:20 PM ]
第2楼 qingfushuan 发表于 2008-04-29 22:40
高级用户 发帖 327 积分 502
先弄清问题,你写的是一行啊
按小>大的顺序排列吧
第3楼 HAT 发表于 2008-04-29 22:44
版主 发帖 5,017 积分 9,023
纯P的话,我一般是先比较长度,如果长度相同再比较大小。
第4楼 bjsh 发表于 2008-04-29 23:21
银牌会员 发帖 621 积分 2,000
Linux

$ cat TEST
56
12
33
48
99
105
5
16

$ sort -n <TEST
5
12
16
33
48
56
99
105
第5楼 plp626 发表于 2008-04-29 23:34
银牌会员 发帖 1,020 积分 2,278
版主也来凑热闹啦。。。

cmd就是没有shell强悍
第6楼 bat-zw 发表于 2008-04-29 23:37
金牌会员 发帖 1,276 积分 3,105
到目前还没有完善的答案!
第7楼 terse 发表于 2008-04-29 23:56
银牌会员 发帖 946 积分 2,404
@echo off&setlocal enabledelayedexpansion
set/p str=输入数字(用空格隔开)
for %%i in (%str%) do (
set str=0000000000%%i
set .!str:~-10! !random!=a
)
for /f "delims=.= " %%i in ('set .') do for /f "tokens=* delims=0" %%i in ("%%i") do if "%%i"=="" (set/p=0 <nul) else set/p=%%i <nul
pause>nul
第8楼 plp626 发表于 2008-04-29 23:59
银牌会员 发帖 1,020 积分 2,278


数字不是每行一个的,先用这个代码改为每行一个


[ Last edited by plp626 on 2008-4-30 at 01:41 PM ]
第9楼 HAT 发表于 2008-04-30 00:01
版主 发帖 5,017 积分 9,023
不知道 s11ss 兄的排序算法能否满足楼主的需求

第10楼 bat-zw 发表于 2008-04-30 00:04
金牌会员 发帖 1,276 积分 3,105
我只想了个通用性不是很强的:
郁闷啊,个位数不能有重复的:
第11楼 terse 发表于 2008-04-30 00:11
银牌会员 发帖 946 积分 2,404
我8楼的不合要求吗
set/p str=输入数字(用空格隔开) 改成 set "str=101 20 14 13 19 18 16 11 5"
应该可以的吧
第12楼 bat-zw 发表于 2008-04-30 00:18
金牌会员 发帖 1,276 积分 3,105
Originally posted by terse at 2008-4-30 00:11:
我8楼的不合要求吗
set/p str=输入数字(用空格隔开) 改成 set "str=101 20 14 13 19 18 16 11 5"
应该可以的吧

terse八楼的代码太强了,说老实话,我现在还没看明白是怎么一回事,请terse兄弟能帮解释下啊!
第13楼 HAT 发表于 2008-04-30 00:32
版主 发帖 5,017 积分 9,023
Originally posted by plp626 at 2008-4-30 12:04 AM:
要不用cmd,哪有linux的shell来的方便,快捷,高效?
声明,我不懂linux.

这个不需要懂linux吧,只需要下载GNU的sort.exe然后在批处理中调用即可。
第14楼 pusofalse 发表于 2008-04-30 00:39
银牌会员 发帖 646 积分 1,604
Originally posted by terse at 2008-4-29 11:56 PM:
@echo off&setlocal enabledelayedexpansion
set/p str=输入数字(用空格隔开)
for %%i in (%str%) do (
set str=0000000000%%i
set .!str:~-10! !random!=a
)
for /f "delims=.= " ...

果真很强! 刚开始时没明白咋回事。。。
@echo off&setlocal enabledelayedexpansion
set/p str=输入数字(用空格隔开)
for %%i in (%str%) do (
set str=0000000000%%i
set .!str:~-10! !random!=a
)
set .
pause
for /f "delims=.= " %%a in ('set .') do for /f "tokens=* delims=0" %%i in ("%%a") do if "%%i"=="" (set/p=0 <nul) else set/p=%%i <nul
pause>nul
把代码改成这样之后 有点开窍了。。
第15楼 zh159 发表于 2008-04-30 01:51
金牌会员 发帖 1,467 积分 3,687
以前用过的,忘了出自哪里了
1 2 3  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023