中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如果將1文本的1組溫度記錄值的最大值找出,并加以判斷
« [1] [2] »
作者:
标题: 如果將1文本的1組溫度記錄值的最大值找出,并加以判斷 上一主题 | 下一主题
quan_zhou
初级用户




积分 190
发帖 40
注册 2005-3-17
状态 离线
『楼 主』:  如果將1文本的1組溫度記錄值的最大值找出,并加以判斷

如果將1文本的1組溫度記錄值的最大值找出,并加以判斷如:若大於45,小於90顯示OK,否就顯示NG, 運行環境為 XP SP2,用批處理或VBS腳本能實現這工功能就行了,請大家幫忙看看,我用FOR試了不行,應該是我不會用。
文本內容如下:
--------1.txt---------------

New logging session started at : 04:57:57
Your product Upper Temperature Limit is : 115 C.

04:57:57 | CT : 76 C       AT : 0 C   
04:58:02 | CT : 76 C       AT : 0 C   
04:58:07 | CT : 76 C       AT : 0 C   
04:58:12 | CT : 76 C       AT : 0 C   
04:58:17 | CT : 76 C       AT : 0 C   
04:58:22 | CT : 76 C       AT : 0 C   
04:58:27 | CT : 76 C       AT : 0 C   
04:58:32 | CT : 76 C       AT : 0 C   
04:58:37 | CT : 76 C       AT : 0 C   
04:58:42 | CT : 76 C       AT : 0 C   
04:58:47 | CT : 76 C       AT : 0 C   
04:58:52 | CT : 76 C       AT : 0 C   
04:58:57 | CT : 76 C       AT : 0 C   
04:59:02 | CT : 76 C       AT : 0 C   
04:59:07 | CT : 77 C       AT : 0 C   
04:59:12 | CT : 77 C       AT : 0 C   
04:59:17 | CT : 83 C       AT : 0 C   
04:59:22 | CT : 77 C       AT : 0 C   
04:59:27 | CT : 77 C       AT : 0 C   
04:59:32 | CT : 77 C       AT : 0 C   
04:59:37 | CT : 77 C       AT : 0 C   
04:59:42 | CT : 82 C       AT : 0 C   
04:59:47 | CT : 78 C       AT : 0 C   
04:59:52 | CT : 86 C       AT : 0 C   
04:59:57 | CT : 89 C       AT : 0 C   
05:00:02 | CT : 90 C       AT : 0 C   
05:00:07 | CT : 91 C       AT : 0 C   
05:00:12 | CT : 93 C       AT : 0 C   
05:00:17 | CT : 93 C       AT : 0 C   
05:00:22 | CT : 94 C       AT : 0 C   
05:00:27 | CT : 95 C       AT : 0 C   
05:00:32 | CT : 95 C       AT : 0 C   
05:00:37 | CT : 96 C       AT : 0 C   
05:00:42 | CT : 97 C       AT : 0 C   
05:00:47 | CT : 97 C       AT : 0 C   
05:00:52 | CT : 98 C       AT : 0 C   
05:00:57 | CT : 98 C       AT : 0 C   
05:01:02 | CT : 99 C       AT : 0 C   
05:01:07 | CT : 100 C       AT : 0 C   
05:01:12 | CT : 100 C       AT : 0 C   
05:01:17 | CT : 102 C       AT : 0 C   
05:01:22 | CT : 105 C       AT : 0 C   
05:01:27 | CT : 106 C       AT : 0 C   
05:01:32 | CT : 108 C       AT : 0 C   
05:01:37 | CT : 101 C       AT : 0 C   
05:01:42 | CT : 99 C       AT : 0 C   
05:01:48 | CT : 101 C       AT : 0 C   
05:01:53 | CT : 102 C       AT : 0 C   
05:01:58 | CT : 110 C       AT : 0 C   
05:02:03 | CT : 112 C       AT : 0 C   
05:02:08 | CT : 114 C       AT : 0 C   
05:02:13 | CT : 113 C       AT : 0 C   
05:02:18 | CT : 114 C       AT : 0 C   
05:02:23 | CT : 114 C       AT : 0 C   
05:02:28 | CT : 114 C       AT : 0 C   
05:02:33 | CT : 116 C       AT : 0 C   
05:02:38 | CT : 116 C       AT : 0 C   
05:02:43 | CT : 117 C       AT : 0 C   
05:02:48 | CT : 118 C       AT : 0 C   
05:02:53 | CT : 119 C       AT : 0 C   


-----------------------------------------------------
溫度監測越久,文本內空就越多。

[ Last edited by quan_zhou on 2007-5-12 at 03:44 PM ]

2007-5-12 14:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 2 楼』:  


@echo off&setlocal enabledelayedexpansion
set a=0
for /f "tokens=5" %%i in (1.txt) do if %%i GTR !a! set a=%%i
if %a% GTR 45 (goto label) else (echo NG)

:label
if %a% LSS 90 (echo OK) else (echo NG)
pause
试试?

2007-5-12 15:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 3 楼』:  

如果文本有

New logging session started at : 04:57:57
Your product Upper Temperature Limit is : 115 C.


应跳过4行.
@echo off&setlocal enabledelayedexpansion
set a=0
for /f "skip=4 tokens=5" %%i in (1.txt) do if %%i GTR !a! set a=%%i
if %a% GTR 45 (goto label) else (echo NG)

:label
if %a% LSS 90 (echo OK) else (echo NG)
pause


2007-5-12 15:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
quan_zhou
初级用户




积分 190
发帖 40
注册 2005-3-17
状态 离线
『第 4 楼』:  

非常感謝wudixin96兄的回復,您的代碼我測試OK,謝謝!
其實我接觸DOS也有好久了,但就沒法深入,真是沒用!
能否幫忙解釋您的代碼呢?

2007-5-12 16:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 5 楼』:  

@echo off&setlocal enabledelayedexpansion
set a=0   /*用于存储最大的温度值,并初始化*/
for /f "skip=4 tokens=5" %%i in (1.txt) do if %%i GTR !a! set a=%%i   /*skip=4跳过4行. 由于tokens=5.所以%%i中存储的是取到的温度值.可以在cmd里输入for /?来了解一下for的用法*/
if %a% GTR 45 (goto label) else (echo NG)

:label
if %a% LSS 90 (echo OK) else (echo NG)
pause

我不会解释了.我的文字功底很差的.抱歉 ^-^

2007-5-12 16:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  Try gawk


gawk "/CT/{if($5>45&&$5<90){print \"OK\"} else {print \"NG\" }}" 1.txt


2007-5-12 16:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 7 楼』:  

gawk是Linux的东西吗?

2007-5-12 16:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 8 楼』:  

set fso=createobject("scripting.filesystemobject")
set op=fso.opentextfile("1.txt",1)
set d=createobject("scripting.dictionary")
on error resume next
for i=1 to 1000
    op.skipline
    ln=op.readline
    if len(ln)=39 then
       t=mid(ln,17,2)
    end if
    if len(ln)=40 then
       t=mid(ln,17,3)
    end if
    t=int(t)
    if err=0 then
       d.add i,t
    end if
next

for each i in d
if d(i)>b then
mx=d(i)
end if
b=d(i)
next

if mx>45 and mx<90 then
msgbox("Temperature is OK"&chr(10)&"The hotest is "&mx&"C")
else
msgbox("Temperature is NG"&chr(10)&"The hotest is "&mx&"C")
end if


VBS版 ^^!



你好,脚本专家!
<a target=blank href=tencent://message/?uin=29654761&Site=www.111.com&Menu=yes><img border="0" SRC=http://wpa.qq.com/pa?p=1:29654761:5 alt="点击这里给我发消息"></a>
2007-5-12 16:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
quan_zhou
初级用户




积分 190
发帖 40
注册 2005-3-17
状态 离线
『第 9 楼』:  

TO zhoushijay 兄
     您的代碼運行后都會顯"The hotest is* C" 不是文本中的最大溫度值。我試差改變1.TXT中內容試了幾次都是,謝謝大家的回復。


TO wudixin96k 兄
     謝謝您的解釋,請問一下您代碼中的GTR 是否是小於、LSS是否是大於的意思? 因為我單獨測試了無效,如:
@echo off
set a=99  
if %a% GTR 45 goto min
if %a% LSS 90 goto max

:min
顯示測試小於45
goto end

:max
顯示測試大於90
goto end

:end

2007-5-12 17:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 10 楼』:  

是滴,我也发现问题了,正在努力修复之中



你好,脚本专家!
<a target=blank href=tencent://message/?uin=29654761&Site=www.111.com&Menu=yes><img border="0" SRC=http://wpa.qq.com/pa?p=1:29654761:5 alt="点击这里给我发消息"></a>
2007-5-12 17:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 11 楼』:  

set /a 1/(var/45)&& set /a 1/(90/var)&& echo %var%

2007-5-12 17:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by wudixin96 at 2007-5-12 16:18:
gawk是Linux的东西吗?

Linux 只是集成了这个工具,实际上它可以算是个编程语言,专业处理文本的程式语言。gawk是GNU版的awk。

想详细了解awk,可以去这里看看:
http://www.itisedu.com/phrase/200603021801255.html

2007-5-12 17:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 13 楼』:  

Set fso = CreateObject("Scripting.FileSystemObject")
Set op = fso.OpenTextFile("1.txt",1)
Set d = CreateObject("Scripting.Dictionary")
on Error Resume Next  '尽量少用……
For i = 1 To 1000 '建议使用AtEndOfStream...这样就不需要上面的错误忽略而且对于大于1000行的文本也可以处理
    op.skipline    '下面readline这里为什么要skip?
    ln = op.ReadLine
    If Len(ln) = 39 Then   '以下用len和mid...建议学会用Instr...否则当长度不至2种的时候……
        t = Mid(ln,17,2)
    End If
    If Len(ln) = 40 Then
        t = Mid(ln,17,3)
    End If
    t = Int(t)
    If Err = 0 Then
        d.add i,t           '还是老问题,为什么不用数组 d(i)=t,我不觉得用Dictionary对象有什么优势
    End If
Next

For Each i In d         '用的Dictionary,怎么变成数组了,汗~
    If d(i) > b Then
        mx = d(i)
    End If
    b = d(i)
Next

If mx > 45 And mx < 90 Then
    MsgBox("Temperature is OK" & Chr(10) & "The hotest is " & mx & "C")  '有常量不用非要用函数。Chr(10)=vbCr
Else
    MsgBox("Temperature is NG" & Chr(10) & "The hotest is " & mx & "C")  '不需要返回值的时候不要用括号
End If

'--缺少对对象的释放--
Set d = Nothing
Set op = Nothing
Set fso = Nothing

[ Last edited by slore on 2007-5-12 at 05:36 PM ]

2007-5-12 17:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 14 楼』:  再将6楼的gawk命令改进一下


gawk "BEGIN{max=0}/CT/{if($5>max)max=$5;if($5>45&&$5<90){print \"OK\"} else {print \"NG\" }}END{print \"The max tep is\",max}" 1.txt


2007-5-12 17:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 15 楼』:  

EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于

cmd里输入if /?了解一下?

2007-5-12 17:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: