Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2015, 17:45   #1
Fil_1990
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 76
По умолчанию Условие LINQ

Есть запрос LINQ
Код:
var error = (from line in readText
                         let a = line.Split(',')
                         where a.Length >= 5 && Regex.IsMatch(a[4], @"\d{2}:\d{2}:\d{2}")
                         let Num = a[2]
                         let timeAttr = a[4].Split(':')
                         let timeUsage = TimeSpan.FromHours(int.Parse(timeAttr[0])) + TimeSpan.FromMinutes(int.Parse(timeAttr[1])) + TimeSpan.FromSeconds(int.Parse(timeAttr[2]))
                         select new { Num, timeUsage } into Uzel
                         group Uzel by Uzel.Num into g
                         select new { Num = g.Key, TotalTime = new TimeSpan(g.Sum(arg => arg.timeUsage.Ticks)), AverageTime = new TimeSpan((long)g.Average(arg => arg.timeUsage.Ticks)) }
                  );
Как написать условие, если время более 2 часов чтоб этот элемент не учитывался?
Fil_1990 вне форума Ответить с цитированием
Старый 08.10.2015, 17:48   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
var error = (from line in readText
                         let a = line.Split(',')
                         let Num = a[2]
                         let timeAttr = a[4].Split(':')
                         let timeUsage = TimeSpan.FromHours(int.Parse(timeAttr[0])) + TimeSpan.FromMinutes(int.Parse(timeAttr[1])) + TimeSpan.FromSeconds(int.Parse(timeAttr[2]))
                         where a.Length >= 5 && Regex.IsMatch(a[4], @"\d{2}:\d{2}:\d{2}") && timeUsage<=TimeSpan.FromHours(2)
                         select new { Num, timeUsage } into Uzel
                         group Uzel by Uzel.Num into g
                         select new { Num = g.Key, TotalTime = new TimeSpan(g.Sum(arg => arg.timeUsage.Ticks)), AverageTime = new TimeSpan((long)g.Average(arg => arg.timeUsage.Ticks)) }
                  );
поидее так
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.10.2015, 17:56   #3
Fil_1990
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 76
По умолчанию

Попробывал ругнулась на индекс вне границ массива
Fil_1990 вне форума Ответить с цитированием
Старый 09.10.2015, 10:01   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
var error = (from line in readText
                         let a = line.Split(',')
                         where a.Length >= 5 && Regex.IsMatch(a[4], @"\d{2}:\d{2}:\d{2}")
                         let Num = a[2]
                         let timeAttr = a[4].Split(':')
                         let timeUsage = TimeSpan.FromHours(int.Parse(timeAttr[0])) + TimeSpan.FromMinutes(int.Parse(timeAttr[1])) + TimeSpan.FromSeconds(int.Parse(timeAttr[2]))
                         where timeUsage<=TimeSpan.FromHours(2)
                         select new { Num, timeUsage } into Uzel
                         group Uzel by Uzel.Num into g
                         select new { Num = g.Key, TotalTime = new TimeSpan(g.Sum(arg => arg.timeUsage.Ticks)), AverageTime = new TimeSpan((long)g.Average(arg => arg.timeUsage.Ticks)) }
                  );
а если так?

PS: если уже создали эту тему, то в ней и ведите вопрос, а не втыкайте его в прошлую.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.10.2015, 10:05   #5
Fil_1990
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 76
По умолчанию

Так пошло, я как раз пытался так писать. Спасибо!
Fil_1990 вне форума Ответить с цитированием
Старый 09.10.2015, 10:11   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Если у вас во всех ваших темах структура файла одинаковая, то думаю стоит сначала сделать класс/структуру с полями нужных типов (TimeSpan и т.п.) и преобразовать строки в список этих объектов, а потом уже с ним делать запросы, чтоб не втыкать везде парсинг строк, пропуск заголовков и т.п.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.10.2015, 10:23   #7
Fil_1990
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 76
По умолчанию

У меня вопрос как сгруппировать правильно, так как для разных узлов номер ошибки одинаковый а значение ошибок разное?
Код:
162,05,001,09/14/15 12:51,00:00:14,00,01,00,Test Site Pick cannot home (Motor timeout)
	Line 192: 173,04,001,09/04/15 17:01,00:03:43,00,00,00,Double Stack device on Sort Platform - D
	Line 226: 207,06,001,08/21/15 20:47,00:00:18,00,01,00,VAT Y-axis Stack Precisor failed to extend.
	Line 256: 237,04,001,08/19/15 03:33,00:00:04,00,01,00,Double Stack device on Sort Platform - D
	Line 257: 238,04,001,08/19/15 03:33,00:00:17,00,01,00,Double Stack device on Sort Platform - D
вот код для подсчёта времени по ошибкам
Код:
var error = (from line in readText
                         let a = line.Split(',')
                         where a.Length >= 5 && Regex.IsMatch(a[4], @"\d{2}:\d{2}:\d{2}")
                         let Us=a[1]????????
                         let Num = a[2]
                         let timeAttr = a[4].Split(':')
                         let timeUsage = TimeSpan.FromHours(int.Parse(timeAttr[0])) + TimeSpan.FromMinutes(int.Parse(timeAttr[1])) + TimeSpan.FromSeconds(int.Parse(timeAttr[2]))
                          where timeUsage<=TimeSpan.FromHours(2)
                         select new {Us, Num, timeUsage } into Uzel
                         group Uzel by Uzel.Num into g
                         select new { Num = g.Key, TotalTime = new TimeSpan(g.Sum(arg => arg.timeUsage.Ticks)), AverageTime = new TimeSpan((long)g.Average(arg => arg.timeUsage.Ticks)) }
                  );
или завести сюда ещё один элемент?
Fil_1990 вне форума Ответить с цитированием
Старый 09.10.2015, 10:28   #8
Fil_1990
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 76
По умолчанию

Так как сейчас программа считает общее время например для 01 ошибки для 02 и т.д, а надо чтоб брала узел например 01 для него 01 сток время
узел 02 для него такие то шибки и к каждой время
Fil_1990 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LINQ to SQL VB Silvan90 Общие вопросы .NET 2 26.02.2014 16:34
LINQ C# sir.andrey Помощь студентам 5 24.10.2011 15:35
Снова LINQ C# sir.andrey Помощь студентам 5 01.10.2011 09:10
LINQ C# sir.andrey Помощь студентам 5 29.09.2011 11:52
LINQ + MySQL tavrocotaps Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 20.07.2010 17:21