public AnalogChannelsViewModel() { AnalogChannels = new AnalogChannels(5800); ClickedOnChannelCommand = new DelegateCommand<object>(o => { Debug.WriteLine(o); DataPoints = null; }); }
public void Parse() { using (StreamReader reader = new StreamReader(FilePath)) { List <string> lines = new List <string>(); string line; while ((line = reader.ReadLine()) != null) { lines.Add(line); } int LineNum = 1; //Кол-во каналов, кол-во аналоговых каналов, кол-во цифровых каналов #region парсинг второй строки string[] second = lines[LineNum].Split(','); NumberOfChannels = int.Parse(second[0]); StringBuilder StrBuilder = new StringBuilder(); foreach (char c in second[1]) { if (c != 'A') { StrBuilder.Append(c); } } NumberOfAnalogs = int.Parse(StrBuilder.ToString()); StrBuilder.Clear(); foreach (char c in second[2]) { if (c != 'D') { StrBuilder.Append(c); } } NumberOfDigitals = int.Parse(StrBuilder.ToString()); LineNum++; #endregion //Парсинг ирнформации о каналах #region парсинг каналов AnalogChannel GetAnalog(string[] s) { if (s.Length != 13) { throw new ArgumentException("Ошибка чтения строки, неверное количество данных по аналогу"); } AnalogChannel analog = new AnalogChannel(); analog.Number = int.Parse(s[0]); analog.Id = s[1]; analog.Phase = s[2]; analog.Circuit = s[3]; analog.Unit = s[4]; analog.A = float.Parse(s[5].Replace('.', ',')); analog.B = float.Parse(s[6].Replace('.', ',')); analog.Skew = float.Parse(s[7].Replace('.', ',')); analog.Min = int.Parse(s[8]); analog.Max = int.Parse(s[9]); analog.Primary = int.Parse(s[10]); analog.Secondary = int.Parse(s[11]); analog.PS = s[12]; return(analog); } DigitalChannel GetDigital(string[] s) { if (s.Length != 3) { throw new ArgumentException("Ошибка чтения строки, неверное количество данных по дискрету"); } DigitalChannel digital = new DigitalChannel(); digital.Number = int.Parse(s[0]); digital.Id = s[1]; digital.DefaultState = int.Parse(s[2]); return(digital); } for (int i = 1; i <= NumberOfChannels; i++) { string[] chan = lines[LineNum].Split(','); if (chan.Length == 3) { DigitalChannels.Add(GetDigital(chan)); } else { AnalogChannels.Add(GetAnalog(chan)); } LineNum++; } #endregion GridFrequency = int.Parse(lines[LineNum]); LineNum++; if (int.Parse(lines[LineNum++]) != 1) { throw new NotImplementedException("Не реализована работа с несколькими частотами дискретизации"); } string[] SmplRate = lines[LineNum++].Split(','); SampleRate = int.Parse(SmplRate[0]); BeginTime = DateTime.Parse(lines[LineNum++]); TripTime = DateTime.Parse(lines[LineNum++]); if (lines[LineNum] == "BINARY") { dataType = DataType.BINARY; } else if (lines[LineNum] == "ASCII") { dataType = DataType.ASCII; } else { throw new InvalidDataException("Неверный тип представления данных (допускается BINARY или ASCII"); } LineNum++; TimeMultiplyer = int.Parse(lines[LineNum]); } #if DEBUG MessageBox.Show("Успешно"); #endif }