找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30264|回复: 6

[数值计算] 【已解决】批处理如何实现数组排列?

[复制链接]
发表于 2014-12-6 20:32:00 | 显示全部楼层 |阅读模式
本帖最后由 ads350668398 于 2014-12-7 19:06 编辑

01 02 09 10 21 31
26 04 05 32 31 23*
01 03 12 20 21 29
09 16 17 18 22 27
05 10 16 19 23 28
13 20 01 30 17 15*
09 18 19 25 28 31
32 01 09 14 28 169
05 07 12 14 15 20
02 09 16 21 30 31
25 32 13 33 01 11*
以上是某几期的双色球结果
我大算整理下【*号位本人发现不符合顺序】
能使之所有行 符合 由小到大的顺序 谢谢 本人比较笨
发表于 2014-12-7 03:58:54 | 显示全部楼层
本帖最后由 tmplinshi 于 2014-12-7 04:25 编辑

思路——

    以“26 04 05 32 31 23”这行为例。

    首先将每个数字设置为变量:
        set _26=a
        set _04=a
        set _05=a
        ...
    然后执行 set _ 就能得到排列后的结果:
        _04=a
        _05=a
        _26=a
        ...
  1. @echo off
  2. call :main "原文件.txt" > "结果文件.txt"
  3. goto :eof

  4. :main <input_file>
  5.         SetLocal
  6.        
  7.         REM 清空以“_”开头的变量名
  8.         for /f "delims==" %%a in (' set _ ') do (
  9.                 set %%a=
  10.         )
  11.        
  12.         REM 读取文件
  13.         for /f "usebackq tokens=*" %%a in (%1) do (
  14.                 call :sort "%%a"
  15.         )
  16.        
  17.         EndLocal
  18. goto :eof

  19. :sort <string>
  20.         SetLocal EnableDelayedExpansion
  21.        
  22.         set newStr=
  23.         for %%a in (%~1) do (
  24.                 set _%%a==
  25.         )
  26.         for /f "delims=_=" %%a in (' set _ ') do (
  27.                 set newStr=!newStr! %%a
  28.         )
  29.         echo !newStr:~1!
  30.        
  31.         EndLocal
  32. goto :eof
复制代码
这样的需求用其他语言会非常的简单,比如 AutoHotkey:
  1. Loop, Read, 原文件.txt, 结果文件.txt
  2. {
  3.         data := A_LoopReadLine
  4.         Sort, data, N D%A_Space%
  5.         FileAppend, % data "`r`n"
  6. }
复制代码
发表于 2014-12-7 09:22:33 | 显示全部楼层
先把行列式排成一排,用某个变量取出来假如为a.%n%
for /l %%a in (1,1,6) do (
   for /l %%b (1,1,11) do (
      set /a n+=1
      for /l %%c in (!n!,1,!n!) do (
         set row%%a.low%%b=!a.%%c!
      )
   )
)
 楼主| 发表于 2014-12-7 13:19:31 | 显示全部楼层
本帖最后由 ads350668398 于 2014-12-7 14:35 编辑

for /f "tokens=1-26 delims= " %%1 in (1.txt) do (
if 0 lss %%2
if %%2 lss %%3   
>>111.txt echo %%2 %%3 %%4 %%5 %%6 %%7

)
if怎么表示不出来还错误 晕
发表于 2014-12-7 18:22:53 | 显示全部楼层
排序用P其实很吃力
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3.     setlocal enabledelayedexpansion
  4.     for %%i in (%%a) do set /a n+=1&set $!n!=1%%i
  5.          set /a c=n-1
  6.          for /L %%i in (1,1,!c!) do (
  7.          set /a b=%%i+1
  8.          for /L %%j in (!b!,1,!n!) do (
  9.          if !$%%i! gtr !$%%j! set/a $%%j=$%%i,$%%i=!$%%j!
  10.         )
  11.     )
  12.     for /l %%i in (1,1,!n!) do set "var=!var! !$%%i:~1!"
  13.     echo!var!
  14.     endlocal
  15. )
  16. pause
复制代码
 楼主| 发表于 2014-12-7 19:05:49 | 显示全部楼层
谢谢5楼了 真看不懂 晕我 还炸想着怎么,用IF 解决呢
问下
if !$%%i! gtr !$%%j! set/a $%%j=$%%i,$%%i=!$%%j!
怎么理解啊 $ 这个符号是师门意思啊
 楼主| 发表于 2014-12-7 19:08:36 | 显示全部楼层
for %%i in (%%a) do set /a n+=1&set $!n!=1%%i
         set /a c=n-1
         for /L %%i in (1,1,!c!) do (
         set /a b=%%i+1
         for /L %%j in (!b!,1,!n!) do (
我晕 我全看不懂#124
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 08:28 , Processed in 0.022573 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表