次の形式のテキストファイルがあり、100を超えるエントリがあります
Header Responses
--- AMD 6001 ---
Sent Packet
FRO 101
A_TEST 5001
Status 0
--- AMD 6002 ---
Sent Packet
FRO 101
A_TEST 5002
Status 1
私の要件は、「Status」の値が0であるかどうかを検証することです。そうである場合は、さらに進んで、各エントリからランダムな「A_TEST」値をフェッチします。エントリ数が多いため、実行にかかる時間がより重要になるため、各エントリの「A_Test」値を見つけるための効果的なアプローチを教えてください。
私は次の構造でコードを書きました
set txtfile = fso.OpenTextFile("")
set content= txtfile.ReadAll
arrEntry = split (content,"--- AMD")
For num=1 to ubound(arrEntry)
'2nd entry fails due to its entry status
If Instr(arrEntry(num),"Status 0") > 0 Then
' How to proceed further to get the value of 'A_TEST' from this array ????
Else
'Fail - Dont Proceed Further
End If
Next
コードが失敗するのは、
set content= txtfile.ReadAll
Set
非オブジェクト(文字列)を変数に割り当てるために誤って使用します。何かのようなもの
Dim sAll : sAll = goFS.OpenTextFile("..\data\31429305.txt").ReadAll()
Dim s
For Each s In Split(sAll, "--- AMD")
If InStr(s, "Status 0") Then
WScript.Echo Split(s, vbCrLf)(3)
End If
Next
運が良ければ「機能」します(EOLマーカーはvbCrLf、A_TESTは常に4行目です)。
次のように、RegExpを使用します。
Dim sAll : sAll = goFS.OpenTextFile("..\data\31429305.txt").ReadAll()
Dim rCut : Set rCut = New RegExp
rCut.Global = True
rCut.Multiline = True
rCut.Pattern = "^A_TEST (\d+)\r$\n^Status 0\r$"
Dim m
For Each m In rCut.Execute(sAll)
WScript.Echo m.Submatches(0)
Next
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加