インターンシップのためにパーサーを作りました。エラーメッセージの解析の一部に大きな影響を与える非常に奇妙なバグに遭遇したという事実を除いて、すべてうまくいっています。
select-string で行を取得し、それを variable に割り当てます$excluded
。次に、検索を絞り込んで、実際のエラーによる無視できるエラー コードを取り出します。ここが変なところです。select-string が取得するエラー行が複数ある場合は、各行が配列の一部になり (そのように動作すると思います)、エラー メッセージの解析が正常に機能するようになります。ただし、エラー行が 1 つしかない場合は、そのエラー行を取得し、すべての数字をつなぎ合わせて 1 列、多数の行の配列を作成します。私のパーサーは各行を個別に取得し、エラー コードを分類します (複数のエラーの場合は完全に実行されます)。
これが私のコードのテキスト グラブ部分です。
#If there is "EXCLUDED" then select those lines and extract the device code from them
$excluded = (Select-String -Path $report -Pattern EXCLUDED | Select-String -Pattern $eliminations -NotMatch).Line
これは、動作しない場合に取得しているテキスト ファイルの一部です (例)。
027:01:1e:01:06 SRB:Phy00 がテストから除外されました - Goerr が設定されました
その行をコピーして貼り付け、最初の 3 桁の数字 (デバイス コード) を変更しました。
027:01:1e:01:06 SRB:Phy00 がテストから除外されました - Goerr が設定されました 028:01:1e:01:06 SRB: Phy00 がテストから除外されました - Goerr が設定されました
2 番目のテキスト セット (どのように表示されるか)
$excluded[0] = 027:01:1e:01:06 SRB:Phy00 EXCLUDED FROM TEST - GOERR IS SET
$excluded[1] = 028:01:1e:01:06 SRB:Phy00 EXCLUDED FROM TEST - GOERR IS SET
ただし、単一のエラー行の場合、これは出てくるものです
$excluded[0] = 0
$excluded[1] = 2
$excluded[2] = 7
なぜこれが起こるのか、私は困惑しています。複数のエラー コード、頻度でテストしましたが、これは に 1 行だけが渡されるすべてのエラー コードで発生します$excluded
。
これがなぜなのか誰か教えてもらえますか?