![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-29 08:03 |
共 47,816 主题排行 / 349,916 发帖 / 今日 0 篇 / 48,265 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如果將1文本的1組溫度記錄值的最大值找出,并加以判斷 |
| 可打印版本 2,695 / 20 |
| 第1楼 quan_zhou | 发表于 2007-05-12 14:41 |
| 初级用户 发帖 40 积分 190 | |
|
如果將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 ] |
|
| 第2楼 wudixin96 | 发表于 2007-05-12 15:41 |
| 银牌会员 发帖 931 积分 1,928 | |
|
试试? |
|
| 第3楼 wudixin96 | 发表于 2007-05-12 15:45 |
| 银牌会员 发帖 931 积分 1,928 | |
|
如果文本有
New logging session started at : 04:57:57 Your product Upper Temperature Limit is : 115 C. 应跳过4行. |
|
| 第4楼 quan_zhou | 发表于 2007-05-12 16:01 |
| 初级用户 发帖 40 积分 190 | |
|
非常感謝wudixin96兄的回復,您的代碼我測試OK,謝謝!
其實我接觸DOS也有好久了,但就沒法深入,真是沒用! 能否幫忙解釋您的代碼呢? |
|
| 第5楼 wudixin96 | 发表于 2007-05-12 16:10 |
| 银牌会员 发帖 931 积分 1,928 | |
|
@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 我不会解释了.我的文字功底很差的.抱歉 ^-^ |
|
| 第6楼 lxmxn | 发表于 2007-05-12 16:15 |
| 版主 发帖 4,938 积分 11,386 | |
|
Try gawk |
|
| 第7楼 wudixin96 | 发表于 2007-05-12 16:18 |
| 银牌会员 发帖 931 积分 1,928 | |
|
gawk是Linux的东西吗?
|
|
| 第8楼 zhoushijay | 发表于 2007-05-12 16:26 |
| 高级用户 发帖 375 积分 845 | |
|
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版 ^^! |
|
| 第9楼 quan_zhou | 发表于 2007-05-12 17:06 |
| 初级用户 发帖 40 积分 190 | |
|
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 |
|
| 第10楼 zhoushijay | 发表于 2007-05-12 17:12 |
| 高级用户 发帖 375 积分 845 | |
|
是滴,我也发现问题了,正在努力修复之中
|
|
| 第11楼 everest79 | 发表于 2007-05-12 17:14 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
set /a 1/(var/45)&& set /a 1/(90/var)&& echo %var%
|
|
| 第12楼 lxmxn | 发表于 2007-05-12 17:18 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by wudixin96 at 2007-5-12 16:18: Linux 只是集成了这个工具,实际上它可以算是个编程语言,专业处理文本的程式语言。gawk是GNU版的awk。 想详细了解awk,可以去这里看看: http://www.itisedu.com/phrase/200603021801255.html |
|
| 第13楼 slore | 发表于 2007-05-12 17:22 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
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 ] |
|
| 第14楼 lxmxn | 发表于 2007-05-12 17:25 |
| 版主 发帖 4,938 积分 11,386 | |
|
再将6楼的gawk命令改进一下 |
|
| 第15楼 wudixin96 | 发表于 2007-05-12 17:30 |
| 银牌会员 发帖 931 积分 1,928 | |
|
EQU - 等于
NEQ - 不等于 LSS - 小于 LEQ - 小于或等于 GTR - 大于 GEQ - 大于或等于 cmd里输入if /?了解一下? |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |