Board logo

标题: [文本处理] 批处理怎样找出用时最短的平均时间的特征? [打印本页]

作者: billy74    时间: 2011-1-13 22:51     标题: 批处理怎样找出用时最短的平均时间的特征?

例如现有1文本内容如下:
a b
最少时间 = 80ms, 最长时间 = 261ms, 平均时间 = 144ms
c d
最少时间 = 53ms, 最长时间 = 297ms, 平均时间 = 115ms

目的:
想找出用时最短的平均时间的特征   
运行后想得到的结果应该是 a  b  所用时间为XX  或者是 c d 所用时间为XX

目前我能做到的只是单独提取平均时间 然后找出最小值。。。

请高手出手赐教  在线等

[ 本帖最后由 billy74 于 2011-1-13 23:00 编辑 ]
作者: yhcbird    时间: 2011-1-13 22:55

什么叫用时最短的平均时间的特征

[ 本帖最后由 yhcbird 于 2011-1-13 23:08 编辑 ]
作者: hanyeguxing    时间: 2011-1-13 23:23

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,4 delims==" %%a in (1.txt) do (
  3.         set "b=%%b"
  4.         if defined b (
  5.                 set "b=!b: =!"
  6.                 set "b=!b:~0,-2!"
  7.                 if not defined d set "d=!a!:!b!"
  8.                 if !b! lss !d:*:^=! set "d=!a!:!b!"
  9.         )
  10.         set "a=%%a"
  11. )
  12. for /f "tokens=1* delims=:" %%a in ("%d%") do echo %%a所用时间为%%bms
  13. pause
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-13 23:37 编辑 ]
作者: billy74    时间: 2011-1-14 22:25

原帖由 hanyeguxing 于 2011-1-13 23:23 发表
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1,4 delims==" %%a in (1.txt) do (
        set "b=%%b"
        if defined b (
                set "b=!b: =!"
                set "b=!b:~0,- ...

首先感谢这位仁兄 但是我运行发现最后的结果并不是最小值 (平均时间的最小值) 但是已经和a b 联系起来了
希望能再改改

[ 本帖最后由 billy74 于 2011-1-14 22:53 编辑 ]
作者: hanyeguxing    时间: 2011-1-14 22:38     标题: 回复 4楼 的帖子

测试没有发现问题,如果你测试出现问题,请上贴源文件
作者: billy74    时间: 2011-1-16 00:26

我又测试了下 还是不行啊 显示的是105ms 但是很明显这不是最小的
能麻烦版主件事么
最好能跟上注释 方便学习  多谢了
作者: tmplinshi    时间: 2011-1-16 07:07

  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. set n=a
  4. for /f "tokens=1,4 delims==" %%a in (a.txt) do (
  5.     if "%%b" neq "" (
  6.         for /f "delims=ms " %%# in ("%%b") do (
  7.             if %%# lss !n! (
  8.                 set n=%%#
  9.                 set name=!LastLine!
  10.             )
  11.         )
  12.     ) else set LastLine=%%a
  13. )
  14. echo %name% 所用时间为%n%ms
  15. pause
复制代码
名称中不能含有等号

[ 本帖最后由 tmplinshi 于 2011-1-16 07:14 编辑 ]
作者: broly    时间: 2011-1-16 14:13

我也来写一个
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (1.txt) do (set /a m+=1 & set m!m!=%%i)
  4. set min=8888
  5. for /l %%i in (2 2 !m!) do (
  6.   for /f "tokens=4 delims==" %%j in ("!m%%i!") do (
  7.     set str=%%j&set str=!str: =!&set str=!str:ms=!
  8.     if !str! lss !min! (set min=!str!&set t=%%i)
  9.   )
  10. )
  11. set/a t=%t%-1
  12. echo !m%t%!   !min!
  13. pause
复制代码

作者: hanyeguxing    时间: 2011-1-16 14:33

  1. @echo off
  2. for /f "tokens=1,4 delims==" %%a in (1.txt) do call:b "%%a" %%b
  3. for /f "tokens=1* delims=:" %%a in ("%d%") do echo %%a所用时间为%%bms
  4. pause&exit
  5. :b
  6. if "%2"=="" (set "a=%~1"&goto:eof) else set b=%2
  7. if not defined d set "d=%a%:%b:~0,-2%"
  8. if %b:~0,-2% lss %d:*:=% set "d=%a%:%b:~0,-2%"
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-16 16:12 编辑 ]
作者: skuny    时间: 2011-1-16 22:32

看了一下楼主的文本格式是这样的(取消自动换行后)
  1. a b
  2. 最少时间 = 55ms, 最长时间 = 56ms, 平均时间 = 55msc d
  3. 最少时间 = 57ms, 最长时间 = 259ms, 平均时间 = 108mse f
  4. 最少时间 = 57ms, 最长时间 = 331ms, 平均时间 = 127msg h
  5. 最少时间 = 58ms, 最长时间 = 60ms, 平均时间 = 59msi j
  6. 最少时间 = 60ms, 最长时间 = 250ms, 平均时间 = 107msk l
  7. 最少时间 = 58ms, 最长时间 = 245ms, 平均时间 = 105msm n
  8. 最少时间 = 57ms, 最长时间 = 131ms, 平均时间 = 76mso p
  9. 最少时间 = 55ms, 最长时间 = 468ms, 平均时间 = 229msq r
  10. 最少时间 = 55ms, 最长时间 = 114ms, 平均时间 = 71mss t
  11. 最少时间 = 55ms, 最长时间 = 390ms, 平均时间 = 140msu v
  12. 最少时间 = 55ms, 最长时间 = 122ms, 平均时间 = 84msw x
  13. 最少时间 = 59ms, 最长时间 = 290ms, 平均时间 = 162msy z
  14. 最少时间 = 55ms, 最长时间 = 422ms, 平均时间 = 173ms
复制代码

作者: skuny    时间: 2011-1-17 01:02

弄一个符合楼主要求的(不是符合我楼上的 :))
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set c1=99999
  4. for /f "tokens=1,6 delims== " %%i in ('findstr /n .* 1.txt') do (
  5.         set c=%%j
  6.         if not "!c!"=="" (
  7.               set c=!c:~0,-2!
  8.               if !c! lss !c1! ( set c1=!c!
  9.                                     set a=%%i
  10.                                  )))
  11. set /a d=a-1
  12. findstr /n .* 1.txt|findstr  "\<!d!:"
  13. findstr /n .* 1.txt|findstr  "\<!a!"
  14. ::要过滤行号 自己加代码
  15. pause
复制代码

作者: skuny    时间: 2011-1-17 01:04

我的效率低下
:)
作者: billy74    时间: 2011-1-17 17:57

测试成功 两位版主的P能够解决问题 多谢 但是第一位版主的代码很简单 但是有点没明白 那个%%#也行?是什么意思呢
要每句有注释就好了 我新手 看不太明白
作者: tmplinshi    时间: 2011-1-17 18:21     标题: 回复 13楼 的帖子

%%# 和其他 %%a 之类的没有区别




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2