请教一下读取txt指定最近三个月日期的行出来?
通过参数输出电脑已安装补丁到C盘bd.txt文件,因为时间不是按顺序的很麻烦,如何读取并提取最近三个月的那些行并copy出来呢???请教一下大师们举个例子,下面是bd.txt文件内容,然后提取最近三个月的,红色那个就是最近三个月要提取出来的行。
CSName HotFixID InstalledOn
COMPUTER01KB43460849/12/2020
COMPUTER01KB445665511/16/2019
COMPUTER01KB45125767/16/2020
COMPUTER01KB451605811/18/2019
本帖最后由 afan 于 2020-9-17 15:00 编辑
#include <Date.au3>
Local $sSource = _
'CSName HotFixID InstalledOn' & @CRLF & _
'COMPUTER01KB43460849/12/2020 ' & @CRLF & _
'COMPUTER01KB445665511/16/2019 ' & @CRLF & _
'COMPUTER01KB45125767/16/2020 ' & @CRLF & _
'COMPUTER01KB451605811/18/2019 '
;~ MsgBox(0, '源字符串', $sSource)
Local $aSRE = StringRegExp($sSource, "(?m)^(.+\h+(\d+)/(\d+)/(\d+))\h*$", 3)
If @Error Then Exit MsgBox(48, '', '数据不符')
Local $sOut = '', $vtmp
For $ii = 0 To UBound($aSRE) - 1 Step 4
$vtmp = StringFormat('%04d/%02d/%02d', $aSRE[$ii + 3], $aSRE[$ii + 1], $aSRE[$ii + 2])
If _DateDiff('M', $vtmp, _NowCalc()) <= 3 Then
$sOut &= $aSRE[$ii] & @CRLF
EndIf
Next
MsgBox(0, '', $sOut) afan 发表于 2020-9-17 14:58
谢谢afan版主帮忙 现在在火车上没有电脑 如果源文件是c:\buding.txt 第二到八行怎么改一下呢 在车上没有电脑 麻烦有空帮忙修正一下 229989799 发表于 2020-9-17 15:58
谢谢afan版主帮忙 现在在火车上没有电脑 如果源文件是c:\buding.txt 第二到八行怎么改一下呢 在车上没有 ...
晕死。
Local $sSource = FileRead('c:\buding.txt') afan 发表于 2020-9-17 16:03
晕死。
:face (25):
提问一下版主,,13行14行正则那一段是以当天日期算起近三个月,还是只是今天算起近三个月的呢?因为经常使用, 229989799 发表于 2020-9-17 16:39
提问一下版主,,13行14行正则那一段是以当天日期算起近三个月,还是只是今天算起近三个月 ...
“当天日期算起近三个月” 这个当天日期是指哪天? 本帖最后由 yohoboy 于 2020-9-18 01:10 编辑
重新改寫a大的方式,執行後就知道怎麼修改符合您的需求。謝謝a大提供代碼,簡潔有力。
#include <Date.au3>
#include <Array.au3>
Local $sSource = 'CSName HotFixID InstalledOn ' & @CRLF & _
'COMPUTER01 KB4346084 9/12/2020 ' & @CRLF & _
'COMPUTER01 KB4456655 11/16/2019 ' & @CRLF & _
'COMPUTER01 KB4512576 7/16/2020 ' & @CRLF & _
'COMPUTER01 KB4516058 11/18/2019 '
;Local $sSource = FileRead('c:\buding.txt') ;可指定要讀取的檔案路徑
MsgBox(0, '源字符串', $sSource); 顯示已讀取的檔案內容
Local $aSRE = StringRegExp($sSource,"(?m)^(.+\h+(\d+)/(\d+)/(\d+))\h*$", 3) ;正則提取該行有日期文字之內容
If @Error Then
Exit MsgBox(48, '資料錯誤', '数据不符')
Else
_ArrayDisplay($aSRE) ;寫這行可以知道正則後組數之內容
Local $sOut = '', $vtmp ;設定變數
For $i = 0 To UBound ($aSRE) - 1 Step 4 ;由第一個組數讀取到最後一個組數,並以隔4累加
$vtmp = StringFormat('%04d/%02d/%02d', $aSRE[$i + 3], $aSRE[$i + 1], $aSRE[$i + 2]) ;將該組數讀取並轉為日期格式
If _DateDiff('M', $vtmp, _NowCalc()) <= 3 Then ;以月為單位,只要3個月內文字則讀取下來
$sOut &= $aSRE[$i] & @CRLF
EndIf
Next
MsgBox(0, '3個月內','CSName HotFixID InstalledOn ' & @CRLF & $sOut) ;整理過後的3個月內文字
EndIf 这货是偶尔上来打一卦
或者仍然在车上
页:
[1]