最大35MBまでのテキストファイルを解析しています。ファイルを2回読むのをやめようとしています
私は現在、このコードしている:
const string show_BLOCK_DELIMITER = "show ";
const string Show_BLOCK_DELIMITER = "Show ";
const string Begin_SHOW_HW_DELIMITER = @"show hardware internal errors";
とキャプチャするかを制御このロジック:
if ((line == null) || (trimmed.StartsWith(show_BLOCK_DELIMITER))
|| (trimmed.StartsWith(Show_BLOCK_DELIMITER))
|| (trimmed.Contains(Begin_SHOW_HW_DELIMITER)))
{
//stuff happens here
}
私は捕獲方法は、ファイルを読み込まれ、Iで始まる行を打ったとき'ショー'または 'ショー'それは私がキャプチャしたいものかどうかを確認するためにチェックします。もしそうなら、私は 'show'または 'show'で始まる次の行までキャプチャを開始します。新しいコードは、定数 'Begin_SHOW_HW_DELIMTER'の間のものをキャプチャすることになっていますが、ここでは入力のサンプルです。 "Module-N#"で始まる2つのブロック、つまり文字列があります.Fc-macの行は「show」で始まりますが、コードをキャプチャしたいもののリストにはないのでそれが新しいブロックだと思って、彼らは捕らえられません。この時点で、私はこの新しい部分を扱い、ファイルを2回読むだけの別の方法について疑問に思っています。 if/elseステートメントはすでにかなり複雑です。
モジュール-1#表示ハードウェアの内部エラー
show hardware internal fc-mac port 1 interrupt-counts
show hardware internal fc-mac port 2 interrupt-counts
モジュール-2#ショーのハードウェアの内部エラー
show hardware internal fc-mac port 1 interrupt-counts
show hardware internal fc-mac port 2 interrupt-counts
ファイルを2回読んでいる部分はどこですか? – Ryan
@minitech申し訳ありませんが、私は不明でした。まだ、1つではありません。私はそれを避けようとしていますが、既に複雑なif/elseにさらに多くのチェックを追加するより効率的ではないかと疑問に思っています。私は既存のキャプチャの前にファイルを解析し、次に新しいキャプチャのために再度解析します。新しい入力は、特殊なチェックを何度も追加することなく、既存のロジックを破ります。 –