0

私のログは次のようになります

2013-10-22 11:29:44 +02:00 - Info - Resultate 
2013-10-22 11:29:44 +02:00 - Info - 1502 lines imported 
2013-10-22 11:29:44 +02:00 - Info - 1 header lines 
2013-10-22 11:29:44 +02:00 - Info - 1563 errors
2013-10-22 11:29:44 +02:00 - Info - 0 changed 
2013-10-22 11:29:44 +02:00 - Info - 0 deleted 
2013-10-22 11:29:44 +02:00 - Info - 0 not changed 
2013-10-22 11:29:44 +02:00 - Info - 0 not found1-1 
2013-10-22 11:29:44 +02:00 - Info - 1 empty lines 
2013-10-22 11:29:44 +02:00 - Info - 1499 errors 

私は VBScribt を初めて使用し、このファイルの単語エラーの前に数字を取得するスクリプトを作成する必要があります。

私の期待される出力は

1563
1499

検索してみましたが、同様のシナリオを取得できませんでした。

助けてください。

4

3 に答える 3

2

短い構造化ファイルから情報を取得する最良の方法は、ファイルをメモリに .ReadAll() し、文字列から目的のデータを切り取る正規表現を適用することです。コード内:

  Option Explicit
  Dim goFS     : Set goFS = CreateObject( "Scripting.FileSystemObject" )
  Dim reCut : Set reCut = New RegExp
  reCut.Global = True
  reCut.Pattern = "(\d+) errors"
  Dim oMTS : Set oMTS = reCut.Execute(goFS.OpenTextFile("..\data\log.txt").ReadAll)
  Dim oMT
  For Each oMT IN oMTS
      WScript.Echo oMT.SubMatches(0)
  Next

出力:

1563
1499
于 2013-11-11T13:37:47.127 に答える
0

ログ ファイルを処理するより良い方法は、適切なツールに作業を任せることです。しかし、このツールにアクセスできない場合、次善の策は、できるだけ少ない情報をスクリプトに読み込むことです。通常、ログ ファイルは非常に大きくなります。そのため、スクリプト コードを読み取って検索する代わりに、システムに作業を任せてください。そのためtype、ファイルを でフィルタリングし、スペースを区切り文字として使用してコマンドfindstrでレコードを分割し、スクリプトから必要なデータのみを読み取ります。for

Dim oShell
    Set oShell = WScript.CreateObject("WScript.Shell")

Dim strCommand
    strCommand = "cmd /q /c ""for /F ""tokens=7 delims= "" %f in ('type ..\data.txt ^| findstr /r ""[0-9]+ errors"" ') do echo %f """

Dim oData
    Set oData = oShell.Exec( strCommand )

Dim strData 
    strData = oData.StdOut.ReadAll()

Dim aData 
    aData = Split( strData, vbCrLf )

    WScript.Echo strData
于 2013-11-12T16:11:15.890 に答える