С помощью C# получить количество строк содержащих диапазон чисел

Reaver_ua

Client
Регистрация
24.02.2020
Сообщения
8
Благодарностей
3
Баллы
3
Помогите плиз! Есть список "log", в конце каждой строки есть timestamp, например: "Письмо отправлено! TIME:[14.08.2023 23:09:46], TIMESTAMP[1692054586]".
Вопрос: Как подсчитать количество строк в списке в диапазоне от (timestamp-3600) до timestamp, например 1692050986 - 1692054586? Это нужно для того, чтобы включив лог в шаблоне, который записывает время отправки каждого письма, получить информацию сколько отправлено писем за минуту, за час, за день
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 385
Баллы
113
C#:
var seconds = 3600;
var path = @"путь к файлу";
return File.ReadLines(path)//project.Lists["или список"]
    .Count(x => int.TryParse(Regex.Match(x, @"(?<=\[).*?(?=])", RegexOptions.RightToLeft).Value, out int timestamp)
                && timestamp + seconds > DateTimeOffset.Now.ToUnixTimeSeconds());
 
Последнее редактирование:
  • Спасибо
Реакции: Reaver_ua

Deisler

Client
Регистрация
26.10.2019
Сообщения
482
Благодарностей
183
Баллы
43
В проекте должны лежать значения диапазона от и до

C#:
IZennoList list = project.Lists["log"];
int timestampMin = Convert.ToInt32(project.Variables["timestampMin"].Value);
int timestampMax = Convert.ToInt32(project.Variables["timestampMax"].Value);
int countGoodTimestamp = 0;
    
for (int i=0; i<list.Count; i++)
{
    var timestamp = Convert.ToInt32(Regex.Match(list[i], @"(?<=TIMESTAMP\[).*?(?=])").Value);
    
    if (timestampMin<=timestamp && timestamp<=timestampMax)
    {
        countGoodTimestamp++;
    }
}
    return countGoodTimestamp;
 
  • Спасибо
Реакции: Reaver_ua

Reaver_ua

Client
Регистрация
24.02.2020
Сообщения
8
Благодарностей
3
Баллы
3
В проекте должны лежать значения диапазона от и до

C#:
IZennoList list = project.Lists["log"];
int timestampMin = Convert.ToInt32(project.Variables["timestampMin"].Value);
int timestampMax = Convert.ToInt32(project.Variables["timestampMax"].Value);
int countGoodTimestamp = 0;
   
for (int i=0; i<list.Count; i++)
{
    var timestamp = Convert.ToInt32(Regex.Match(list[i], @"(?<=TIMESTAMP\[).*?(?=])").Value);
   
    if (timestampMin<=timestamp && timestamp<=timestampMax)
    {
        countGoodTimestamp++;
    }
}
    return countGoodTimestamp;
Спасибо! Пишет:
Выполнение действия CSharp OwnCode. Входная строка имела неверный формат.
Может строку списка брать через кубик отдельно?
 

Reaver_ua

Client
Регистрация
24.02.2020
Сообщения
8
Благодарностей
3
Баллы
3
C#:
var seconds = 3600;
var path = @"путь к файлу";
return File.ReadLines(path)//project.Lists["или список"]
    .Count(x => int.TryParse(Regex.Match(x, @"(?<=\[).*?(?=])", RegexOptions.RightToLeft).Value, out int timestamp)
                && timestamp + seconds > DateTimeOffset.Now.ToUnixTimeSeconds());
Спасибо! Всё работает!
 

Deisler

Client
Регистрация
26.10.2019
Сообщения
482
Благодарностей
183
Баллы
43
Спасибо! Пишет:
Выполнение действия CSharp OwnCode. Входная строка имела неверный формат.
Может строку списка брать через кубик отдельно?
Нет, строки должны перебираться именно внутри кубика c#. У меня вчера мой вариант отработал. Соответственно в проекте должен быть нужный список, и две переменные, в которых уже лежат значения для сравнения Min и Max. Но если вашу задачу полностью решает код от Alexmd, то, видимо, можно и не терять время
 
  • Спасибо
Реакции: Reaver_ua

Reaver_ua

Client
Регистрация
24.02.2020
Сообщения
8
Благодарностей
3
Баллы
3
Нет, строки должны перебираться именно внутри кубика c#. У меня вчера мой вариант отработал. Соответственно в проекте должен быть нужный список, и две переменные, в которых уже лежат значения для сравнения Min и Max. Но если вашу задачу полностью решает код от Alexmd, то, видимо, можно и не терять время
Благодарю! проверю ещё раз, должно работать. Уже 2 варианта есть, этого вполне достаточно
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)