Board logo

标题: [已结]数字串的排序问题 [打印本页]

作者: clian76     时间: 2008-11-21 13:34    标题: [已结]数字串的排序问题

如何把一串数字按顺序排列,如: 下面的数字串都是每行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 ]

作者: pooronce     时间: 2008-11-21 15:47
@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%

作者: pooronce     时间: 2008-11-21 15:48
本来不想用临时文件的,但发现似乎过程调用不能管道的。。。

作者: clian76     时间: 2008-11-21 16:20
感谢 pooronce !厉害!!完美解决!

作者: HAT     时间: 2008-11-21 17:16
凑个热闹
@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.

作者: pooronce     时间: 2008-11-21 18:09
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衔接处理倒可以管道的。 学到了

作者: pigpigs     时间: 2008-11-21 22:14
可不可以请版主说下这里的echo.是什么意思呢?看过好多次就是不明白什么意思。

作者: tireless     时间: 2008-11-21 22:19    标题: 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 ]

作者: pigpigs     时间: 2008-11-21 22:30
thanks tireless,也可以说是这只是一种习惯的写法对吗?因为我把这里的ehco.换成echo空格后,结果还是一样的。

作者: tireless     时间: 2008-11-21 22:32    标题: re 9 楼

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

作者: moniuming     时间: 2008-11-21 22:46
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

作者: tireless     时间: 2008-11-21 23:11    标题: Re 11 楼

学习了,原来还挺有用的。可以避免出现“ECHO 处于关闭状态。”。 我以前要输出空行时,先会进行判断: if "%%a" equ "" (echo.) else echo %%a 现在知道这样就行了:echo.%%a

作者: HAT     时间: 2008-11-21 23:16    标题: Re 12楼

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

作者: tireless     时间: 2008-11-21 23:38    标题: Re 13 楼

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

作者: clian76     时间: 2008-11-23 19:05
我只能在一边仰视了!!!

作者: 26933062     时间: 2008-11-25 21:59
来个效率高点的。
@echo off
for /f %%a in (a.txt) do (
   Setlocal EnableDelayedExpansion
   set str=%%a
   for /l %%i in (0 1 9) do set str=!str:%%i= %%i!
   for %%i in (!str!) do set /a .%%i+=1
   for /l %%i in (0 1 9) do (
     if defined .%%i (
       for /l %%j in (1 1 !.%%i!) do set num=!num!%%i
   ))
   echo !num!
   endlocal
)
pause

作者: clian76     时间: 2008-11-30 11:09
是的,相当快!谢谢 26933062 老大!