#c#
#c#
Вопрос:
Добрый день, я возился с методом 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 amp;amp; 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());
}
}
Это то, что у меня сейчас есть. Теперь я хочу иметь возможность добавить регулярное выражение в строку записи, чтобы оно не учитывало пользовательскую СИСТЕМУ.
Я смог это сделать, но это распечатало бы каждого отдельного пользователя, но вместо этого мне нужно общее / глобальное представление о том, сколько людей было в Сети на указанную дату.
Итак, мне нужно знать, как это сделать, избавившись от цикла for each и просто получив user.countUsers.
foreach (var user in UserList)
{
Regex User = new Regex(@"SYSTEM");
Match match = User.Match(user.User);
if (!match.Success)
{}
}
Теперь я не знаю, как вызвать переменную, чтобы мое регулярное выражение работало. Кто-нибудь знает, как это исправить, может быть, возможно, без регулярного выражения?
(Примечание: мне также нужна помощь с тем фактом, что журнал событий равен 2x, тогда как для тех, которые являются законными, он должен быть равен 1. Мне нужно было бы посмотреть, как я буду это фильтровать)
Ответ №1:
Вам не нужно использовать регулярное выражение, поскольку строка, которую вы хотите исключить, является буквальной, вы можете использовать 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());
}
Комментарии:
1. Я должен был более четко выразить свои извинения. Я не хочу использовать a для каждого. Мне больше не нужно знать, сколько раз один пользователь входил в систему, мне нужно знать это в целом. Это выведет, сколько раз другой пользователь входил в систему.
2. Тогда вы можете использовать
Dictionary<string, int>
@308075