1

私が達成しようとしているのは、以下を含むハッシュセットです。

MSI (c) (AC:C0) [14:23:21:685]: Back from server. Return value: 1603
MSI (c) (AC:C0) [14:23:21:685]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied.  Counter after decrement: -1
MSI (c) (AC:C0) [14:23:21:685]: PROPERTY CHANGE: Deleting SECONDSEQUENCE property. Its current value is '1'.
Action ended 14:23:21: ExecuteAction. Return value 3.
MSI (c) (AC:C0) [14:23:21:685]: Doing action: SetupCompleteError
Action 14:23:21: SetupCompleteError. 
Action start 14:23:21: SetupCompleteError.

戻り値 3. が見つかった場合。行とその前の行を 2 番目のハッシュセットに追加する必要があります。

MSI (c) (AC:C0) [14:23:21:685]: PROPERTY CHANGE: Deleting SECONDSEQUENCE property. Its current value is '1'.
Action ended 14:23:21: ExecuteAction. Return value 3.)

これは、その行と上の行を見つけるための正規表現として機能します (私が知る限り)。

    Dim regrv3 As New Regex("(.*)\S\s(.*)Return value 3.")

関連コード:

Dim opened As New HashSet(Of String)(File.ReadAllLines(openfile))
Dim compa As HashSet(Of String) = New HashSet(Of String)

For Each StringMatch In opened
    Dim m As Match
    m = regrv3.Match(StringMatch)
    compa.Add(m.ToString
Next

明らかな何かが欠けているのでしょうか、それともこれを実行するにはある種の複雑なインデックス作成が必要ですか?

4

1 に答える 1

1

まだご連絡がありませんので、「戻り値 3」の行とその前の行をハッシュセット内の 1 つのエントリとして扱う必要があると想定しています。このソリューションは正規表現を使用しませんが、これで目標が達成され、ハッシュセットの結果が生成されるはずです。

Dim inputLines = File.ReadAllLines(filepath)
Dim matches As New HashSet(Of String)

For i = 0 To inputLines.Length - 1
  If inputLines(i).Contains("Return value 3.")
    'Okay we found what we're looking for, combine with previous line
    'Btw... there's an exception hidden here (hint: when i=0)
    Dim match = inputLines(i - 1) & inputLines(i)
    matches.Add(match)
  EndIf
Next
于 2013-09-06T21:46:48.613 に答える