/// <summary> /// Считываем и распознаём множества из строкового представления /// </summary> /// <param name="text">Входная строка</param> public void read(String text) { Mass.Clear(); //очищаем предыдущее чтение Error_Log_textBox.Text += "[info] Начали распознавание чисел. "; //логи String[] _Temp = text.Replace(" ", "").Replace("\n", "").Replace("\r", "").Replace("\t", "").Replace(".", ",").Split(';'); //режем по строчкам множеств Error_Log_textBox.Text += "Предположительное количество: " + _Temp.Length + "\r\n"; //логи foreach (String s in _Temp) //пробегаем { try //отлов исключений и ошибок, {самая забагованная часть кода :D} { Fuzzy_numbers <Double> _F_Temp = ParseDouble(s); //преобразуем строку в нечёткое число if (_F_Temp == null) { break; } Mass.Add(new Fuzzy_numbers <Double>(_F_Temp, _F_Temp.Name)); Error_Log_textBox.Text += "[info] Число: \"" + _F_Temp.Name + "\" распознано \r\n";//логи } catch (System.Exception ex) { Error_Log_textBox.Text += "[Ошибка] " + ex.Message + " произошла на \"" + s + "\" \r\n";//логи } } Error_Log_textBox.Text += "[info] Распознано: " + Mass.Count + " из " + _Temp.Length + "\r\n";//логи }
/// <summary> /// Преобразует строковое представление в объект типа Fuzzy_numbers если это возможно /// </summary> /// <param name="s">Строковое представление объекта типа Fuzzy_numbers</param> /// <returns>Восстановленный из строки объект типа Fuzzy_numbers</returns> public Fuzzy_numbers <Double> ParseDouble(String s) { Fuzzy_numbers <Double> _Temp; String[] Name_F = s.Split('=');//отделяем название от описания try { //задаём имя числу if (Name_F.Length >= 2) { _Temp = new Fuzzy_numbers <Double>(Name_F[0]); s = Name_F[1]; } else { _Temp = new Fuzzy_numbers <Double>(); } //заменяем знаки в соответствии с форматом и режем на элементы String[] _Split_s = s.Replace(" ", "").Replace(".", ",").Split('+'); //бежим по элементам и добавляем в число foreach (String _s in _Split_s) { String[] _Split_Slash = _s.Replace("\\", "/").Split('/'); if (_Split_Slash.Length == 2) { _Temp.Add(new Element_Fuzzy_numbers <Double>(Double.Parse(_Split_Slash[1]), Double.Parse(_Split_Slash[0]))); } } } catch (System.Exception ex) { throw new FormatException("Input string was invalid.\n" + ex.Message + "\n" + ex.Data); } return(_Temp); }
void plot(Fuzzy_numbers <Double> e, Brush _Brush) { Int32 _Height = pictureBox1.Height, _Width = pictureBox1.Width; //размеры холста Point[] _p = new Point[e.Count]; //линии //сортировка элементов по оси х Fuzzy_numbers <Double> _T = e.Sort_from_Element; for (int i = 0; i < e.Count; i++) { _p[i].X = (int)((int)(e[i].Element * ((_Width / 2d) / MAX))); //добавляем точку x для контура _p[i].Y = (int)((int)((e[i].Accessory_Function) * (_Height - 25) + 25)); //точку y для контура gr.FillEllipse(_Brush, (int)(e[i].Element * ((_Width / 2d) / MAX)) - 3, (int)((e[i].Accessory_Function) * (_Height - 25) + 22), 6, 6); } if (checkBox1.Checked) { gr.DrawLines(new Pen(_Brush), _p); } }
private void построитьГрафикToolStripMenuItem_Click(object sender, EventArgs e) { CheckedListBox CheckedListBoxs = (contextMenuStrip1.SourceControl as CheckedListBox); if (CheckedListBoxs != null) { //Список чисел для отправки на постройку List <Fuzzy_numbers <Double> > Selected_Items = new List <Fuzzy_numbers <Double> >(); foreach (var it in CheckedListBoxs.CheckedItems)//пробегаемся по отмеченным { Fuzzy_numbers <Double> _Temp = ParseDouble(it.ToString()); if (_Temp != null)//если преобразовалось то добавляем в список отправки { Selected_Items.Add(_Temp); } } if (Selected_Items.Count != 0) //если количество больше 0 { new Graphics1(Selected_Items).Show(); //отправляем на построение } } }