标题: [文本处理] 批处理怎样找出用时最短的平均时间的特征? [打印本页]
作者: 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
- @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,-2!"
- if not defined d set "d=!a!:!b!"
- if !b! lss !d:*:^=! set "d=!a!:!b!"
- )
- set "a=%%a"
- )
- for /f "tokens=1* delims=:" %%a in ("%d%") do echo %%a所用时间为%%bms
- 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
- @echo off
- SetLocal EnableDelayedExpansion
- set n=a
- for /f "tokens=1,4 delims==" %%a in (a.txt) do (
- if "%%b" neq "" (
- for /f "delims=ms " %%# in ("%%b") do (
- if %%# lss !n! (
- set n=%%#
- set name=!LastLine!
- )
- )
- ) else set LastLine=%%a
- )
- echo %name% 所用时间为%n%ms
- pause
复制代码
名称中不能含有等号
[ 本帖最后由 tmplinshi 于 2011-1-16 07:14 编辑 ]
作者: broly 时间: 2011-1-16 14:13
我也来写一个- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (1.txt) do (set /a m+=1 & set m!m!=%%i)
- set min=8888
- for /l %%i in (2 2 !m!) do (
- for /f "tokens=4 delims==" %%j in ("!m%%i!") do (
- set str=%%j&set str=!str: =!&set str=!str:ms=!
- if !str! lss !min! (set min=!str!&set t=%%i)
- )
- )
- set/a t=%t%-1
- echo !m%t%! !min!
- pause
复制代码
作者: hanyeguxing 时间: 2011-1-16 14:33
- @echo off
- for /f "tokens=1,4 delims==" %%a in (1.txt) do call:b "%%a" %%b
- for /f "tokens=1* delims=:" %%a in ("%d%") do echo %%a所用时间为%%bms
- pause&exit
- :b
- if "%2"=="" (set "a=%~1"&goto:eof) else set b=%2
- if not defined d set "d=%a%:%b:~0,-2%"
- if %b:~0,-2% lss %d:*:=% set "d=%a%:%b:~0,-2%"
复制代码
[ 本帖最后由 hanyeguxing 于 2011-1-16 16:12 编辑 ]
作者: skuny 时间: 2011-1-16 22:32
看了一下楼主的文本格式是这样的(取消自动换行后)- a b
- 最少时间 = 55ms, 最长时间 = 56ms, 平均时间 = 55msc d
- 最少时间 = 57ms, 最长时间 = 259ms, 平均时间 = 108mse f
- 最少时间 = 57ms, 最长时间 = 331ms, 平均时间 = 127msg h
- 最少时间 = 58ms, 最长时间 = 60ms, 平均时间 = 59msi j
- 最少时间 = 60ms, 最长时间 = 250ms, 平均时间 = 107msk l
- 最少时间 = 58ms, 最长时间 = 245ms, 平均时间 = 105msm n
- 最少时间 = 57ms, 最长时间 = 131ms, 平均时间 = 76mso p
- 最少时间 = 55ms, 最长时间 = 468ms, 平均时间 = 229msq r
- 最少时间 = 55ms, 最长时间 = 114ms, 平均时间 = 71mss t
- 最少时间 = 55ms, 最长时间 = 390ms, 平均时间 = 140msu v
- 最少时间 = 55ms, 最长时间 = 122ms, 平均时间 = 84msw x
- 最少时间 = 59ms, 最长时间 = 290ms, 平均时间 = 162msy z
- 最少时间 = 55ms, 最长时间 = 422ms, 平均时间 = 173ms
复制代码
作者: skuny 时间: 2011-1-17 01:02
弄一个符合楼主要求的(不是符合我楼上的 :))- @echo off
- setlocal enabledelayedexpansion
- set c1=99999
- for /f "tokens=1,6 delims== " %%i in ('findstr /n .* 1.txt') do (
- set c=%%j
- if not "!c!"=="" (
- set c=!c:~0,-2!
- if !c! lss !c1! ( set c1=!c!
- set a=%%i
- )))
- set /a d=a-1
- findstr /n .* 1.txt|findstr "\<!d!:"
- findstr /n .* 1.txt|findstr "\<!a!"
- ::要过滤行号 自己加代码
- pause
复制代码
作者: skuny 时间: 2011-1-17 01:04
我的效率低下
:)
作者: billy74 时间: 2011-1-17 17:57
测试成功 两位版主的P能够解决问题 多谢 但是第一位版主的代码很简单 但是有点没明白 那个%%#也行?是什么意思呢
要每句有注释就好了 我新手 看不太明白
作者: tmplinshi 时间: 2011-1-17 18:21 标题: 回复 13楼 的帖子
%%# 和其他 %%a 之类的没有区别
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |