2 つのファイルを比較して、特定の部分の違いを教えてくれる ac# プログラムを作成しようとしています。ループ中に必要な部分を変数に入れることができましたが、これらをファイルごとに 3 つの値を持つキーに追加したいので、全体で 6 つの値を持つキーを後で比較します。しかし、私が持っているループを使用して一度に 3 つの値しか追加できないため、最初の 3 つを上書きせずに最後の 3 つの値をキーに追加できる必要があります。
ファイルからのデータの例:
[\Advanced\Rules\Correlation Rules\Suspect_portscan\];
CheckDescription =S Detect Port scans;
Enabled =B 0;
Priority =L 3;
必要なものを変数に入れることができたので、文字列 SigName は "Suspect_portscan" Int Enabled、Priority、Blocking as 0 3、それぞれ null になります。
次に、キーが SigName で、最初の 3 つの値が有効、優先度、ブロッキングである辞書タイプのものを作成したいと考えています。次に、2 番目のファイルをループするときに、最後の 3 つの値スロットで同じ SigName を (キーに) 有効にして優先度をブロックする 2 番目のファイル設定を追加します。
次に、「if signame(0) != signame(3)」のように、これをそれ自体と比較します。そのため、ファイル 1 を有効にした場合とファイル 2 を有効にした場合が異なる場合は、メモを作成して教えてください。
しかし、私が抱えている問題は、データを辞書やルックアップに入れることができないことです.私は完全に困惑しています. 値のリストを含む辞書を使用する必要があるようですが、2番目のループで機能させることができません。
ありがとう。
コード:
static void Main()
{
Dictionary<string, List<int>> PolicyDictionary = new Dictionary<string, List<int>>();
int Counter = 0, TempCounter = 0;
String[] PolicyOne = System.IO.File.ReadAllLines(@"filepath");
string[] PolicyTwo = System.IO.File.ReadAllLines(@"filepath2");
foreach (string lines in PolicyOne)
{
if ((lines.Contains("CheckDescription")) && (!lines.Contains("userdefined network event template")))
{//if true do this
TempCounter = Counter;
int FirstSlashes = (PolicyOne[(TempCounter - 1)]).IndexOf(@"\", 28);
int LastSlashes = (PolicyOne[(TempCounter - 1)]).LastIndexOf(@"\");
string SigName = (PolicyOne[(TempCounter - 1)]).Substring(FirstSlashes+1,(LastSlashes-FirstSlashes)-1);
Char Enabled = (PolicyOne[(TempCounter + 1)])[(PolicyOne[(TempCounter + 1)]).Length - 2];
Char Priority = (PolicyOne[(TempCounter + 2)])[(PolicyOne[(TempCounter + 2)]).Length - 2];
Char Blocking = (PolicyOne[(TempCounter + 3)])[(PolicyOne[(TempCounter + 3)]).Length-2];
PolicyDictionary[SigName] = new List<int> {Enabled,Priority,Blocking};
}
// end if
Counter++;
}
// end for each
foreach (string lines in PolicyTwo)
{
if ((lines.Contains("CheckDescription")) && (!lines.Contains("userdefined network event template")))
{//if true do this
Counter = 0;
TempCounter = Counter;
int FirstSlashes = (PolicyTwo[(TempCounter - 1)]).IndexOf(@"\", 28);
int LastSlashes = (PolicyTwo[(TempCounter - 1)]).LastIndexOf(@"\");
string SigName = (PolicyTwo[(TempCounter - 1)]).Substring(FirstSlashes + 1, (LastSlashes - FirstSlashes) - 1);
Char Enabled = (PolicyTwo[(TempCounter + 1)])[(PolicyOne[(TempCounter + 1)]).Length - 2];
Char Priority = (PolicyTwo[(TempCounter + 2)])[(PolicyOne[(TempCounter + 2)]).Length - 2];
Char Blocking = (PolicyTwo[(TempCounter + 3)])[(PolicyOne[(TempCounter + 3)]).Length - 2];
// here I will just end up overwriting it, but im not sure how to get arround this.
PolicyDictionary[SigName] = new List<int> { Enabled, Priority, Blocking };
}
// end if
Counter++;
}
// end for each
Console.ReadKey();