[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
我不赞同jm的意见,首先我声明了原始数据中数值是不等的(这在题目中可以看到),其次
采用for /l (1,1,n)+findstr的方法效率不是最高的,举个例子假如原始数据中只有
1,1000,1000000000这三个数据,那岂不是for要空循环1000000000-3次,我觉得设置变量
法是最快的,以上面的例子只要设置三个变量就行了,至于具体怎么处理,大家思考了。
1

评分人数

    • youxi01: 有道理,我向来不看好"findstr" ...PB + 2
***共同提高***

TOP

  如果原始数据中没有重复的数值,并且数值的位数是已知的,那么,可以考虑用 for /l 生成从1~N的递增序列,每生成一个数值,就用 findstr 在原始表中查询数据,我觉得这应该是最简洁最高效的办法。

  当然,如何用 findstr 来精确匹配每一列数值,还得想办法对原始数据做一番处理。至于需要如何处理,各位开动脑筋想一想吧^_^。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

原帖由 batman 于 2009-2-26 10:07 发表 [img][/img]
我想知道三个答案:
一、是不是我每次出的题都难了点,让大家习惯性的望而生畏了?
二、是不是大家都不想通过解题这种快捷方式来得到提高了?
三、难道论坛除了版主、技术组、新手(新手在做新手题)就没有其他的 ...

人家要上学嘛...看这个周末有时间不...

不过也是要号召更多人来做这种题啊...
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. >b.txt cd.
  3. for /f "usebackq delims=" %%i in (`more a.txt`) do (set "numbers_old=!numbers_old! %%i")
  4. for %%i in (%numbers_old%) do (
  5.   set number=0000%%i
  6.   set number=!number:~-4!
  7.   set _!number!=%%i
  8. )
  9. for /f "tokens=2 delims==" %%i in ('set _') do (
  10.   for %%j in (%%i) do set "numbers_new=!numbers_new! %%j"
  11. )
  12. for %%i in (%numbers_new%) do (
  13.   set /p=%%i <nul >>b.txt
  14.   set /a n+=1
  15.   if !n! equ 6 echo.>>b.txt&set /a n=0
  16. )
  17. start b.txt
  18. exit
复制代码
说明一下:为此题学习了随风的排序函数,也终于搞懂了这个函数。学习了他的思路,不要分数,凑个热闹、搞点人气而已。

[ 本帖最后由 shqf 于 2009-2-26 12:57 编辑 ]
1

评分人数

    • batman: 代码还可精简PB + 10

TOP

我想知道三个答案:
一、是不是我每次出的题都难了点,让大家习惯性的望而生畏了?
二、是不是大家都不想通过解题这种快捷方式来得到提高了?
三、难道论坛除了版主、技术组、新手(新手在做新手题)就没有其他的会员了?
***共同提高***

TOP

原帖由 BBCC 于 2009-2-25 21:37 发表
嗯..数据.数量很大的时候用什么方法好呢?二分法应该是比较快的了,但是不知道速度能不能跟上...

兄弟把你的方法写出来看看吧
***共同提高***

TOP

请注意a.txt是n列n行,就是不知道有几行几列,所以楼上的tokens=1-10不可取,同时这种代码的效率是很相当低的。
***共同提高***

TOP

周哥,我目前只想到这个简单且效率不高的方法。
  1. @echo off
  2. for /f "tokens=1-10" %%a in (a.txt) do (
  3. set/a _%%a=0,_%%b=0,_%%c=0,_%%d=0,_%%e=0,_%%f=0,_%%g=0,_%%h=0,_%%i=0,_%%j=0
  4. )
  5. for /l %%i in (1,1,9999) do (
  6. if defined _%%i call :output %%i
  7. )
  8. exit
  9. :output
  10. <nul set/p=%1 >>b.txt
  11. set/a n+=1
  12. if %n% equ 6 echo.>>b.txt&set/a n=0
  13. goto :eof
复制代码
1

评分人数

    • batman: 就本题的数据而言是完成了PB + 5

TOP

嗯..数据.数量很大的时候用什么方法好呢?二分法应该是比较快的了,但是不知道速度能不能跟上...
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

返回列表