53360622 发表于 2015-5-27 21:11:17

【已解决】求助 取文本内时间 小于当然系统时间30分钟内的行

本帖最后由 53360622 于 2015-5-28 11:09 编辑

取文本内时间 小于当然系统时间30分钟内的行。

文本内容如下:

2015/05/24 11:19:22         Service Control Manager        0        7036                admin        DHCP Client 服务处于 停止 状态。
2015/05/24 11:19:22         Service Control Manager        0        7036                admin        Windows Event Log 服务处于 停止 状态。
2015/05/24 11:19:23         Service Control Manager        0        7036                admin        Windows Font Cache Service 服务处于 停止 状态。
2015/05/24 11:19:23         Service Control Manager        0        7036                admin        Diagnostic Service Host 服务处于 停止 状态。
2015/05/24 11:19:23         Service Control Manager        0        7036                admin        Diagnostic Policy Service 服务处于 停止 状态。
2015/05/24 11:19:23         Service Control Manager        0        7036                admin        Function Discovery Resource Publication 服务处于 停止 状态。
2015/05/24 11:19:23         Service Control Manager        0        7036                admin        Cryptographic Services 服务处于 停止 状态。
2015/05/24 11:19:25         Service Control Manager        0        7036                admin        KSafe service 服务处于 停止 状态。

afan 发表于 2015-5-28 09:09:31

#include <Array.au3>
#Include <Date.au3>
Local $Str = _
                '2015/05/23 10:19:22         Service Control Manager      0      7036                admin      DHCP Client 服务处于 停止 状态。' & @CRLF & _
                '2015/05/24 10:19:22         Service Control Manager      0      7036                admin      Windows Event Log 服务处于 停止 状态。' & @CRLF & _
                '2015/05/24 10:19:23         Service Control Manager      0      7036                admin      Windows Font Cache Service 服务处于 停止 状态。' & @CRLF & _
                '2015/05/24 11:09:23         Service Control Manager      0      7036                admin      Diagnostic Service Host 服务处于 停止 状态。' & @CRLF & _
                '2015/05/24 11:09:23         Service Control Manager      0      7036                admin      Diagnostic Policy Service 服务处于 停止 状态。' & @CRLF & _
                '2015/05/24 11:15:23         Service Control Manager      0      7036                admin      Function Discovery Resource Publication 服务处于 停止 状态。' & @CRLF & _
                '2015/05/24 11:19:23         Service Control Manager      0      7036                admin      Cryptographic Services 服务处于 停止 状态。' & @CRLF & _
                '2015/05/24 11:19:25         Service Control Manager      0      7036                admin      KSafe service 服务处于 停止 状态。'
;~MsgBox(0, '原字符串', $Str)
Local $Now = '2015/05/24 11:20:25'        ;_Now()
Local $nTime = 30
Local $aSR = StringRegExp($str, '(?m)^(([\d/]+\h+[\d:]+)\V+)', 3)
If @Error Then Exit
Local $i, $sOk = ''
For $i = 1 To UBound($aSR) - 2 Step 2
        If _DateDiff('n', $aSR[$i], $Now) < $nTime Then $sOk &= $aSR[$i - 1] & @CRLF
Next
msgbox(0, '小于时间 ' & $Now & ' (' & $nTime & '分钟) 的行', $sOk)

53360622 发表于 2015-5-28 11:12:01

回复 2# afan

谢谢版主

53360622 发表于 2015-5-28 12:27:15

回复 3# 53360622
For $i = 1 To UBound($aSR) - 2 Step 2   好像是会少掉最后的一行   改成For $i = 1 To UBound($aSR) -1 Step 2 就会把所有的统计出来。Local $Str = _
                '2015/05/28 12:19:22         Service Control Manager      0      7036                admin      DHCP Client 服务处于 停止 状态。' & @CRLF & _
                '2015/05/24 10:19:22         Service Control Manager      0      7036                admin      Windows Event Log 服务处于 停止 状态。' & @CRLF & _
                '2015/05/24 10:19:23         Service Control Manager      0      7036                admin      Windows Font Cache Service 服务处于 停止 状态。' & @CRLF & _
                '2015/05/24 11:09:23         Service Control Manager      0      7036                admin      Diagnostic Service Host 服务处于 停止 状态。' & @CRLF & _
                '2015/05/24 11:09:23         Service Control Manager      0      7036                admin      Diagnostic Policy Service 服务处于 停止 状态。' & @CRLF & _
                '2015/05/28 12:15:23         Service Control Manager      0      7036                admin      Function Discovery Resource Publication 服务处于 停止 状态。' & @CRLF & _
                '2015/05/28 12:15:23         Service Control Manager      0      7036                admin      Cryptographic Services 服务处于 停止 状态。' & @CRLF & _
                '2015/05/28 12:15:24         Service Control Manager      0      7036                admin      KSafe service 服务处于 停止 状态。'& @CRLF & _
                                '2015/05/28 12:15:24         Service Control Manager      0      7036                admin      KSafe service 服务处于 停止 状态。'
;~MsgBox(0, '原字符串', $Str)
Local $Now = '2015/05/28 12:16:26'      ;_Now()
Local $nTime = 30
Local $aSR = StringRegExp($str, '(?m)^(([\d/]+\h+[\d:]+)\V+)', 3)
If @Error Then Exit
Local $i, $sOk = ''
For $i = 1 To UBound($aSR) - 1 Step 2
      If _DateDiff('n', $aSR[$i], $Now) < $nTime Then $sOk &= $aSR[$i - 1] & @CRLF
Next
msgbox(0, '小于时间 ' & $Now & ' (' & $nTime & '分钟) 的行', $sOk)

afan 发表于 2015-5-28 20:36:52

回复53360622
For $i = 1 To UBound($aSR) - 2 Step 2   好像是会少掉最后的一行   改成For $i = 1 To...
53360622 发表于 2015-5-28 12:27 http://www.autoitx.com/images/common/back.gif


    是的应该是 -1,之前测试忘改了…

h20040606 发表于 2015-6-1 04:39:02

学习了,正则真难。
页: [1]
查看完整版本: 【已解决】求助 取文本内时间 小于当然系统时间30分钟内的行