[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
其实是两个不同的问题,而其中排序问题没必要放在这里,可以另外出题(好像出过?)
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

还是一样啊,只是把字符交换一下位置而已。
一分局 2 7 0 1 7 7 2  1
二分局 0 0 0 1 0 0 6  2

一分局 1
二分局 2

1一分局
2二分局

排好再交换回来
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

“导入的文本a.txt如下”

后面两列数据是怎么来的?要根据什么公式?还是自己编算法?

[ 本帖最后由 zqz0012005 于 2009-11-19 21:43 编辑 ]
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

既然是直接读到的,那可能你没有明白我7楼的意思
::截取两列:
一分局 1
二分局 2
三分局 3
四分局 5
五分局 7
六分局 6
七分局 3

::交换:
...
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

即使列数未确定,也很容易求得。
即使不求列数,只截取特定两列也容易。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

这个排序问题其实也不错:
以A3列的大小为主要排序,A2列的大小为次要排序,应该怎么实现?
http://bbs.verybat.org/viewthread.php?tid=17101
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 14楼 的帖子

晕,我也没说此题无解,12楼只是对11楼的补充,同时都是对7楼的解释。

而且题目给的结果并未处理啊:
当月累计排名:一分局1,二分局2,三分局3,七分局3,四分局5,六分局6,五分局7
两个第三名后,直接是第五名,没有将名次序号调成4
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 16楼 的帖子

交换位置后:
0001 一分局
0002 二分局
0003 三分局
0005 四分局
0007 五分局
0006 六分局
0003 七分局
......
0123 一百五十分局

(前面的0是添加的,再截取后4位)
既然无需调整名次序号,那不就结了,直接sort

[ 本帖最后由 zqz0012005 于 2009-11-19 22:13 编辑 ]
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

达到要求的输出格式使得步骤多了点。
(显然,Ctrl+A可见)
  1. @echo off
  2. %1 %2
  3. setlocal enableDelayedExpansion
  4. set n=0
  5. for /f "tokens=1* delims==" %%a in ('"set /p head=<1.txt& set head"') do ^
  6. for %%i in (%%b) do set _!n!=%%i& set /a n+=1
  7. set /a items=n-3, day_ranking=n-1, month_ranking=n
  8. for /f "skip=1 delims=" %%a in (1.txt) do set m=0&for %%i in (%%a) do (
  9.     if "!m!"=="0" set department=%%i
  10.     for %%x in (_!m!) do (
  11.         if "%%i"=="0" set %%x_0=!%%x_0! !department!
  12.         set /a !%%x! += %%i
  13.     )
  14.     set /a m+=1
  15.     set serial=0000%%i& set serial=!serial:~-4!
  16.     if !m!==!day_ranking! set _day_ranking=!_day_ranking! !serial!.!department!
  17.     if !m!==!month_ranking! set _month_ranking=!_month_ranking! !serial!.!department!
  18. )
  19. for /l %%a in (1 1 %items%) do (
  20.     if "!_%%a_0!"=="" set _%%a_0= 无
  21.     set #%%a=!_%%a! ^^!!_%%a!^^!, 完成为0的局:!_%%a_0!
  22. )
  23. for /f "tokens=1* delims==" %%a in ('set #') do echo %%b
  24. for /f "tokens=* delims=0" %%a in ('%~s0 goto sort_ "!_day_ranking!"^|sort') do set #day_ranking=!#day_ranking!,%%~xa%%~na
  25. for /f "tokens=* delims=0" %%a in ('%~s0 goto sort_ "!_month_ranking!"^|sort') do set #month_ranking=!#month_ranking!,%%~xa%%~na
  26. set #day_ranking=!#day_ranking:~1!
  27. set #month_ranking=!#month_ranking:~1!
  28. echo 当日排名: !#day_ranking:.=!
  29. echo 当月累计排名: !#month_ranking:.=!
  30. pause&exit/b
  31. :sort_
  32. for /f "delims=" %%a in ("%~3") do for %%i in (%%~a) do echo %%i
  33. goto :eof
复制代码


[ 本帖最后由 batman 于 2009-11-21 11:58 编辑 ]
1

评分人数

命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

前面数据整理不怎么耗时,主要是不想用临时文件而将排序模块整合在一起造成的。
如果不担心分局数和项目数加起来会超过变量最大长度,两次排序其实可以goto一次完成,将_day_ranking和_month_ranking分别不同的前缀补位,然后拼接,goto时还可省略%3,排序后分开时再加判断。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

所谓的“偏方”,其实也是良方
http://www.bathome.net/viewthread.php?tid=1581&page=1#pid8439

[ 本帖最后由 zqz0012005 于 2009-11-20 13:25 编辑 ]
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 40楼 的帖子

vbs可以调用excel,同时还可以让这个excel执行VBA,并调用其中的函数。
所以说vbs是强大滴。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

返回列表