[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
海量数据用临时文件加findstr
少量数据用变量
我只能想到这样了。。

[ 本帖最后由 随风 于 2009-2-26 19:26 编辑 ]
技术问题请到论坛发帖求助!

TOP

回复 21楼 的帖子

'type tem^|sort' 为何不写成  sort tem
技术问题请到论坛发帖求助!

TOP

忍不住,也发两个凑凑热闹。
代码一、
不生成临时文件,适合处理少量数据。可以处理重复数字。
  1. @echo off
  2. if "%~1"=="" (
  3.   setlocal enabledelayedexpansion&set /a n=0
  4.   for /f "tokens=* delims=0" %%a in ('%~s0 h^|sort') do (
  5.      set /a n+=1,n=n%%6
  6.      set /p=%%a <nul
  7. if !n! equ 0 echo.
  8.    )
  9.   pause&exit
  10. )
  11. setlocal enabledelayedexpansion
  12. for /f "usebackq tokens=*" %%i in ("a.txt") do (
  13.    for %%j in (%%i) do set m=0000000000%%j&echo !m:~-10!
  14. )
  15. endlocal
  16. goto :EOF
复制代码
代码二、
需确定最高位是多少。
生成一个临时文件也可以,不过既然已经生成了临时文件,不防再多生成一个以提高效率。
因为 for /f + findstr 效率很低。
适合处理海量数据。
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "usebackq tokens=*" %%i in ("a.txt") do (
  3.     for %%j in (%%i) do echo %%j
  4. ))>tem
  5. sort tem>tem2
  6. cd.>tem
  7. for /l %%a in (1 1 4) do (
  8.    set num=.!num!
  9.    findstr /x !num! tem2>>tem
  10. )
  11. for /f "delims=" %%a in (tem) do (
  12.      set /a n+=1,n=n%%6
  13.      set /p=%%a <nul
  14. if !n! equ 0 echo.
  15. )
  16. echo.&pause
复制代码
1

评分人数

    • namejm: 好代码,一出就是两个。PB + 10
技术问题请到论坛发帖求助!

TOP

回复 31楼 的帖子

for /f + findstr 效率很低。
应该与先将findstr的结果保存到文件,再for /f 解析文件差不多。
理论上好像是这样的,但事实不是。
findstr 无论是遍历、还是写入文件,速度都是超快的,但如果把findstr运行的结果
直接赋值给for就没有充分利用findstr命令的优势了。
事实上 for 的in 中嵌套任何命令都是影响效率的,
比如我们常用的
for /f "delims=" %%a in ('dir/b') do ......
for /f "delims=" %%a in ('set .') do ......
等等,只是在少量的数据、或少量的使用次数面前体现不出来。
废话少说,测试以下代码,应该会有所发现。
a.txt 内容至少 5万行
代码一、
  1. for /f "delims=" %%a in ('findstr .* a.txt') do echo %%a
复制代码
代码二、
  1. findstr .* a.txt>b.txt
  2. for /f "delims=" %%a in (b.txt) do echo %%a
复制代码
回复 32 楼 楼主
设置变量的方法确实好,不过有一个缺点是无法处理重复的数字
在实际应用中,对大量的数字排序,不重复的数字应该不多吧。。^_^
技术问题请到论坛发帖求助!

TOP

返回列表