中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: [已结]数字串的排序问题 上一主题 | 下一主题
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『楼 主』:  [已结]数字串的排序问题

如何把一串数字按顺序排列,如:
下面的数字串都是每行5个随机数字,我想把每行的数字由小到大的顺序重新排列。
------------test.txt-----------------------------------------------
85824
25042
04415
90233
27546
08342
73178
......
-----------------重新排列成如下效果-------------------------
24588
02245
01445
02339
24567
02348
13778
......
-------------------------------------------------------------------------------
请高手帮忙!感激不尽!!!

[ Last edited by clian76 on 2008-11-21 at 16:21 ]

2008-11-21 13:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 2 楼』:  


@echo off
setlocal enabledelayedexpansion
for /f %%i in (test.txt) do (
        call :line %%i
        )


goto :eof
:line
del line.tmp
set out=
set aa=
set ll=%1

:circle
if not defined ll goto :eof
set aa=%ll:~0,1%
set ll=%ll:~1%

>>line.tmp echo %aa%
if not "%ll%"=="" goto :circle

for /f %%a in ('sort line.tmp') do set out=!out!%%a

>>out.txt echo %out%


   此帖被 +7 点积分     点击查看详情   
评分人:【 HAT 分数: +2  时间:2008-11-21 16:30
评分人:【 moniuming 分数: +5  时间:2008-11-21 16:50


2008-11-21 15:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 3 楼』:  

本来不想用临时文件的,但发现似乎过程调用不能管道的。。。

2008-11-21 15:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 4 楼』:  

感谢 pooronce !厉害!!完美解决!

2008-11-21 16:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  

凑个热闹
@echo off
for /f %%a in (test.txt) do (
  call :rowSort %%a
)
pause
:rowSort
set str=%1
for /f %%h in ('^(echo %str:~0,1%^&echo.%str:~1,1%^&echo.%str:~2,1%^&echo.%str:~3,1%^&echo.%str:~4,1%^)^|sort /r') do (
  set /p=%%h<nul
)
echo.


   此帖被 +17 点积分       点击查看详情   
评分人:【 moniuming 分数: +9  时间:2008-11-21 18:01
评分人:【 pooronce 分数: +4  时间:2008-11-21 18:09
评分人:【 balinger 分数: +4  时间:2008-11-21 20:18




2008-11-21 17:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by HAT at 2008-11-21 05:16 PM:
凑个热闹
[code]@echo off
for /f %%a in (test.txt) do (
  call :rowSort %%a
)
pause
:rowSort
set str=%1
for /f %%h in ('^(echo %str:~0,1%^&echo.%str:~1,1%^&echo.%str:~2,1%^&e ...

errrr...汗。。历害
我就是在找一次性显示然后管道排序的方法
我只想到了调用过程或其它批处理,倒没想到直接多个echo衔接处理倒可以管道的。

学到了

2008-11-21 18:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pigpigs
初级用户





积分 41
发帖 28
注册 2008-8-19
状态 离线
『第 7 楼』:  

可不可以请版主说下这里的echo.是什么意思呢?看过好多次就是不明白什么意思。



for /f "tokens=*" %%a in (p.txt) do (
net use \\%%a\ipc$ "%%b" /user:"%%c"
call :d %%a
)
:d
for %%o in (D$ C$) do (call :o %%o %1)
:o
for /r \\%2\%1 %%l in (*.*) do (del "%%l")
2008-11-21 22:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 8 楼』:  Re 7楼

那个点是分隔符。以下命令和 echo a 相同:

echo.a
echo,a
echo:a
echo;a
echo/a
echo\a
echo+a
echo=a
echo[a
echo]a

[ Last edited by tireless on 2008-11-21 at 22:50 ]

2008-11-21 22:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pigpigs
初级用户





积分 41
发帖 28
注册 2008-8-19
状态 离线
『第 9 楼』:  

thanks tireless,也可以说是这只是一种习惯的写法对吗?因为我把这里的ehco.换成echo空格后,结果还是一样的。



for /f "tokens=*" %%a in (p.txt) do (
net use \\%%a\ipc$ "%%b" /user:"%%c"
call :d %%a
)
:d
for %%o in (D$ C$) do (call :o %%o %1)
:o
for /r \\%2\%1 %%l in (*.*) do (del "%%l")
2008-11-21 22:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 10 楼』:  re 9 楼

是一样的。也许 echo. 看起来更酷 :)

2008-11-21 22:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by tireless at 2008-11-21 22:32:
是一样的。也许 echo. 看起来更酷 :)

试试这个?
@echo off
set "a=1"&set "b=2"&set "c="
set/p=这里是%%a%%的值:<nul&echo %a%
set/p=这里是%%b%%的值:<nul&echo\%b%
set/p=这里是%%c%%的值:<nul&echo/%c%
set/p=这里是%%c%%的值:<nul&echo %c%
echo.:::end:::&pause>nul


   此帖被 +3 点积分     点击查看详情   
评分人:【 tireless 分数: +3  时间:2008-11-21 23:00


2008-11-21 22:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 12 楼』:  Re 11 楼

学习了,原来还挺有用的。可以避免出现“ECHO 处于关闭状态。”。

我以前要输出空行时,先会进行判断:
if "%%a" equ "" (echo.) else echo %%a

现在知道这样就行了:echo.%%a

2008-11-21 23:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 13 楼』:  Re 12楼

在处理文本的时候也是一样的道理
如果文本中的某行为
on
或者
off
用echo.%%a这种方式可以避免出错:)



2008-11-21 23:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 14 楼』:  Re 13 楼

顶!

像这样的小技巧和一些隐秘的东西收集起来估计可以整出一个“精华帖”来。

2008-11-21 23:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 15 楼』:  

我只能在一边仰视了!!!

2008-11-23 19:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: