2016-10-06 10 views
0

良い日、私はEventlogメソッドを使いこなしていました。周りをぐるっと回って、私はいくつのentry.replacementstrings [5]ユーザー名がそこにあるのかを数えることができました。ユーザーをカウントするイベントログ

public int countUsers { get; set; } 
public string User { get; set; } 
public Users(int count, string name) 
{ 
    countUsers = count; 
    User = name; 
} 

public void getCountUsers() 
{ 
    number = 0; // 
    UserList = new ObservableCollection<Users>(); 
    EventLog myNewLog = new EventLog(); 
    myNewLog.Log = "Security"; 
    foreach (EventLogEntry entry in myNewLog.Entries) 
    { 
     if (entry.InstanceId == 4624 && entry.TimeWritten.Date == DateTime.Today) 
     { 
      if (UserList.Count > 0) 
      { 
       bool check = false; 
       foreach (var user in UserList) 
       { 
        if (user.User == entry.ReplacementStrings[5]) 
        { 
         user.countUsers += 1; 
         check = true; 
        } 
       } 
       if (!check) 
       { 
        Users u = new Users(1, entry.ReplacementStrings[5]); 
        UserList.Add(u); 
       } 
      } 
      else 
      { 
       Users u = new Users(1, entry.ReplacementStrings[5]); 
       UserList = new ObservableCollection<Users>(); 
       UserList.Add(u); 
      } 
     } 
    } 
} 

public void counter() 
{ 

    var totalUsers = UserList.Sum(user => user.countUsers); 
    foreach (var user in UserList) 
    { 

     Console.WriteLine("There has been {0} users on {1}", user.countUsers, DateTime.Today.ToShortDateString()); 
    } 
} 

私は現在持っているものです。今私ができることをしたいのは、正規表現を書き込み行に追加して、ユーザーSYSTEMを数えないようにすることです。

私はそれを行うことができましたが、それはすべての個々のユーザーを印刷するのではなく、その日にオンラインで何人いるかという一般的な/グローバルな考えが欲しいです。

だから、forループを取り除き、user.countUsersを取得する方法を知る必要があります。

foreach (var user in UserList) 
{ 
    Regex User = new Regex(@"SYSTEM"); 
    Match match = User.Match(user.User); 
    if (!match.Success) 
    {} 
} 

ここで、私の正規表現が動作するように変数を呼び出す方法がわかりません。誰もそれを修正する方法を知っている、多分おそらく正規表現なし?

(サイドノート:私もそれが合法的なもので1であるべきときEventLogには、2倍であるという事実に助けを必要と私はそれをフィルタリングする方法を参照してくださいする必要があります)

答えて

0

あなたドンあなたが除外したい文字列がリテラルなので、Regexを使用する必要はありません。Linqを使用することができます:

foreach (var user in UserList.Where(u => u.User != "SYSTEM")) 
{ 
    Console.WriteLine("There has been {0} users on {1}", user.countUsers, DateTime.Today.ToShortDateString()); 
} 
+0

私はもっと謝罪すべきです。 それぞれにaを使用したくありません。 1人のユーザーが何回ログオンされたかをもう知る必要はありません。私はそれを一般的に知る必要があります。これは、別のユーザーがログオンした回数を出力します。 – 308075

+0

それから、 'Dictionary ' @ 308075 –

関連する問題