//Сбор данных private void dataAcq_Click(object sender, EventArgs e) { if (ListDelete.Items.Count != 0) { Stopwatch sw = new Stopwatch(); sw.Start(); TrainData.Train.Clear(); measurementses.Clear(); Dictionary <string, int> newElements = new Dictionary <string, int>(); if (ListDelete.Items.Count != 0) { //Сохранения имен параметров и их ID в справочник newElements foreach (var item in ListDelete.Items) { string t = item.ToString(); int j = elements.Where(s => s.Key == t).Single().Value; newElements.Add(t, j); //Работа с локальной базой данных(сохранения данных туда) XMLWork.AddRow(j, t); } } var stream = File.Open(path.Text, FileMode.Open, FileAccess.Read); var eReader = ExcelReaderFactory.CreateOpenXmlReader(stream); bool check = true; try { _counter = 0; while (eReader.Read()) // Одну строку пропускаем с общей информацией { ++_counter; break; } DateTime lastTime = new DateTime(); while (eReader.Read()) // Считывание информации с EXCEL файла { var date = eReader.GetDateTime(0); var time = eReader.GetDateTime(1); TimeSpan ts = new TimeSpan(time.Hour, time.Minute, time.Second); date = date + ts; if (_counter == 1) { lastTime = date; } else { if (lastTime == date) { continue; } lastTime = date; } Measurements measurements; foreach (var value in newElements) { Decimal parValue; var val = Convert.ToString(eReader.GetValue(value.Value)); val = val.Trim(); if (val == "") { parValue = -1; } else { var extA = Convert.ToString(eReader.GetValue(value.Value)).Replace(",", "."); try { parValue = Decimal.Parse(extA, NumberStyles.Float, _formatProvider); } catch (Exception exe) { throw new Exception("Invalid value format in row " + _counter, exe); } measurements = new Measurements(parValue, date, value.Key, value.Value); // созеания измерения measurementses.Add(measurements); // и добавление его в коллекцию } } ++_counter; } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { eReader.Close(); } try { List <OneRow> dataSet = new List <OneRow>(); var uniqueTimestamp = measurementses.OrderBy(o => o.TimeStamp).Select(o => o.TimeStamp).Distinct(); OneRow lastRow = new OneRow(); // Отделение технологических параметров от показателей качество. //TODO: сделать отдельную колонку в бд, в которой хранить краткую информацию о расположении датчика относительно производственной линии foreach (DateTime dateTime in uniqueTimestamp) { var moveData = measurementses.Where( o => ((dateTime == o.TimeStamp) && (!o.ParameterName.StartsWith("Def")))) .ToDictionary(o => o.ParID, s => s.Value); // Добавление технологических параметров в дикшионари //температуры для усадки var temperatureData = measurementses.Where(o => ((dateTime == o.TimeStamp) && (o.ParameterName.Contains("XT")))) .ToDictionary(o => o.ParameterName, s => s.Value); //скорости для усадки var velocityData = measurementses.Where(o => ((dateTime == o.TimeStamp) && (o.ParameterName.Contains("XV")))) .ToDictionary(o => o.ParameterName, s => s.Value); OneRow row = new OneRow(); row.Input = moveData; row.Temperatures = temperatureData; row.Velocities = velocityData; if (row.Input.Count >= 1) { row.Date = dateTime; var dataOutput = measurementses.Where( o => ((dateTime == o.TimeStamp) && (o.ParameterName.StartsWith("Def")))) .ToDictionary(o => o.ParID, s => s.Value); row.Output = dataOutput; dataSet.Add(row); // Добавление показателя качества в ОЗУ } lastRow = row; } var datas = measurementses.Where(o => dataSet.First().Date == o.TimeStamp) .ToDictionary(o => o.ParID, s => s.ParameterName); TrainData.GetData(); foreach (KeyValuePair <int, string> keyValuePair in datas) { if (!TrainData.Pairs.ContainsKey(keyValuePair.Value)) { TrainData.Pairs.Add(keyValuePair.Value, keyValuePair.Value); } } TrainData.nameParameter = datas; TrainData.Train = dataSet; // Присвоение статической переменной данных } catch (InvalidOperationException iex) { var parameters = measurementses.Where(o => !o.ParameterName.StartsWith("Def")).ToArray(); if (parameters.Count() == 0) { MessageBox.Show( Localization.MyStrings.QualityParameters); } else { MessageBox.Show(iex.ToString()); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } sw.Stop(); var parametersInput = measurementses.Where(o => o.ParameterName.StartsWith("Def")).ToArray(); if (parametersInput.Count() == 0) { MessageBox.Show( Localization.MyStrings.RegimeParameters, Localization.MyStrings.Warning); } MessageBox.Show(Localization.MyStrings.TimeParameters + sw.Elapsed); string pathToShrinkage = System.AppDomain.CurrentDomain.BaseDirectory + "\\Shrinkage.xml"; if (File.Exists(pathToShrinkage)) { File.Delete(pathToShrinkage); } } else { MessageBox.Show(Localization.MyStrings.SelectedParameters); } }