/// <summary> /// Преобразовать данные /// </summary> /// <param name="Value"> Значение ячейки таблицы. </param> /// <param name="ParentTable"> Родительская таблица (из которой выгружаются данные). </param> /// <returns></returns> public new string ConvertData(string Value, Table ParentTable) { string[] Index = Value.Split(';'); // Простая ссылка на ячейку родительской таблицы в формате "1;2" (где 1 - номер строки родительской таблицы; 2 - номер столбца родительской таблицы) if (Index.Count() == 2 && ParentTable != null) { return(ParentTable.GetCellValue(Convert.ToInt32(Index[0]), Convert.ToInt32(Index[1]))); } else { // Ссылка на ячейку родительской таблицы в формате "1;2;.;3" (где 1 - номер строки родительской таблицы; 2 - номер столбца родительской таблицы; //. - разделитель целой и дробной части; 3 - количество знаков после разделителя, до которых требуется округлить значение) if (Index.Count() == 4 && ParentTable != null) { String CellValue = ParentTable.GetCellValue(Convert.ToInt32(Index[0]), Convert.ToInt32(Index[1])); String Delimiter = (CellValue.IndexOf(Index[2]) < 0) ? "," : Index[2]; Int32 Accuracy = Convert.ToInt32(Index[3]); Int32 ValueLength = Accuracy > 0 ? Accuracy + 1 : Accuracy; string MyCellValue = CellValue.Contains(" ") ? CellValue.Substring(0, CellValue.IndexOf(" ")).Replace(Delimiter, ".") : CellValue.Replace(Delimiter, "."); return(Math.Round(Convert.ToDecimal(MyCellValue), Accuracy).ToString()); //return CellValue.Substring(0, CellValue.IndexOf(Delimiter) + ValueLength).Replace(Delimiter, "."); } // Ссылка на ячейку родительской таблицы в формате "1;2;+;3;4;.;5" (где 1 - номер строки первой ячейки родительской таблицы; 2 - номер столбца первой ячейки родительской таблицы; // + - операция над значениями двух ячеек; 3 - номер строки второй ячейки родительской таблицы; 4 - номер столбца второй ячейки родительской таблицы; //. - разделитель целой и дробной части; 5 - количество знаков после разделителя, до которых требуется округлить значение) if (Index.Count() == 7 && ParentTable != null) { String StringOperand1 = ParentTable.GetCellValue(Convert.ToInt32(Index[0]), Convert.ToInt32(Index[1])); String StringOperand2 = ParentTable.GetCellValue(Convert.ToInt32(Index[3]), Convert.ToInt32(Index[4])); String Operator = Index[2]; String Delimiter = (StringOperand1.IndexOf(Index[5]) < 0) && (StringOperand1.IndexOf(Index[5]) < 0) ? "," : Index[5]; Int32 Accuracy = Convert.ToInt32(Index[6]); Int32 ValueLength = Accuracy > 0 ? Accuracy + 1 : Accuracy; String NumDecimalSeparator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator; Unit UnitOperand1 = UnitsOfMeasure.GetResistanceValue(StringOperand1, Delimiter); //Convert.ToDouble(StringOperand1.Substring(0, StringOperand1.IndexOf(Delimiter) + ValueLength).Replace(Delimiter, NumDecimalSeparator)); Unit UnitOperand2 = UnitsOfMeasure.GetResistanceValue(StringOperand2, Delimiter); // Convert.ToDouble(StringOperand2.Substring(0, StringOperand2.IndexOf(Delimiter) + ValueLength).Replace(Delimiter, NumDecimalSeparator)); Unit Result; // Оператор вычитания if (Operator == "-") { Result = UnitsOfMeasure.GetSubtraction(UnitOperand1, UnitOperand2, UnitOperand1.UnitsName); return(Math.Round(Result.Value, Accuracy).ToString().Replace(NumDecimalSeparator, ".") + " " + Result.UnitsName); } // Оператор вычисления отношения ((арг1 - арг2)/(арг2))*100 if (Operator == "%") { Result = UnitsOfMeasure.GetRatio(UnitOperand1, UnitOperand2, UnitOperand1.UnitsName); if (Result != null) { return(Math.Round(Result.Value, Accuracy).ToString().Replace(NumDecimalSeparator, ".")); } else { return("-"); } } } else { if (Value.IndexOf("Random") >= 0) { int randomIndex = Convert.ToInt32(Value.Substring(Value.IndexOf("[") + 1, Value.IndexOf("]") - Value.IndexOf("[") - 1)); string value = Value.IndexOf("]") + 1 < Value.Length ? Value.Substring(Value.IndexOf("]") + 1) : ""; if (Value.IndexOf("RandomActualValue") >= 0) { return(Convert.ToString(RandomActualValue[randomIndex]) + value); } if (Value.IndexOf("RandomActualInterval") >= 0) { return(Convert.ToString(RandomActualInterval[randomIndex]) + value); } if (Value.IndexOf("RandomMeasuredValue") >= 0) { return(Convert.ToString(RandomMeasuredValue[randomIndex]) + value); } if (Value.IndexOf("RandomMotionStartValue") >= 0) { return(Convert.ToString(RandomMotionStartValue[randomIndex]) + value); } if (Value.IndexOf("RandomError") >= 0) { return(Value.IndexOf("RandomError") > 0 ? Value.Substring(0, Value.IndexOf("RandomError")) + Convert.ToString(RandomError[randomIndex]) + value : Convert.ToString(RandomError[randomIndex]) + value); } if (Value.IndexOf("RandomIndication") >= 0) { return(Convert.ToString(RandomIndication[randomIndex]) + value); } } if (Value.IndexOf("Variables") >= 0) { int randomIndex = Convert.ToInt32(Value.Substring(Value.IndexOf("[") + 1, Value.IndexOf("]") - Value.IndexOf("[") - 1)); string value = Value.IndexOf("]") + 1 < Value.Length ? Value.Substring(Value.IndexOf("]") + 1) : ""; return(Value.IndexOf("Variables") > 0 ? Value.Substring(0, Value.IndexOf("Variables")) + Convert.ToString(Variables[randomIndex]) + value : Convert.ToString(Variables[randomIndex]) + value); } } } return(Value); }
/// <summary> /// Преобразовать данные json /// </summary> /// <param name="Value"> Значение ячейки таблицы. </param> /// <param name="ParentDocument"> Объект с данными измерений. </param> /// <returns></returns> public string ConvertData(string Value, RootObject ParentDocument) { string[] Index = Value.Split(';'); if (Index.Count() == 2 && ParentDocument != null) { return(ParentDocument.GetMeasure(Convert.ToInt32(Index[0])).Index(Convert.ToInt32(Index[1]))); } else { if (Index.Count() == 4 && ParentDocument != null) { String CellValue = ParentDocument.GetMeasure(Convert.ToInt32(Index[0])).Index(Convert.ToInt32(Index[1])); String Delimiter = (CellValue.IndexOf(Index[2]) < 0) ? "," : Index[2]; Int32 Accuracy = Convert.ToInt32(Index[3]); Int32 ValueLength = Accuracy > 0 ? Accuracy + 1 : Accuracy; return(CellValue.Substring(0, CellValue.IndexOf(Delimiter) + ValueLength).Replace(Delimiter, ".")); } if (Index.Count() == 7 && ParentDocument != null) { String StringOperand1 = ParentDocument.GetMeasure(Convert.ToInt32(Index[0])).Index(Convert.ToInt32(Index[1])); String StringOperand2 = ParentDocument.GetMeasure(Convert.ToInt32(Index[3])).Index(Convert.ToInt32(Index[4])); String Operator = Index[2]; String Delimiter = (StringOperand1.IndexOf(Index[5]) < 0) && (StringOperand1.IndexOf(Index[5]) < 0) ? "," : Index[5]; Int32 Accuracy = Convert.ToInt32(Index[6]); Int32 ValueLength = Accuracy > 0 ? Accuracy + 1 : Accuracy; String NumDecimalSeparator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator; Unit UnitOperand1 = UnitsOfMeasure.GetResistanceValue(StringOperand1, Delimiter); //Convert.ToDouble(StringOperand1.Substring(0, StringOperand1.IndexOf(Delimiter) + ValueLength).Replace(Delimiter, NumDecimalSeparator)); Unit UnitOperand2 = UnitsOfMeasure.GetResistanceValue(StringOperand2, Delimiter); // Convert.ToDouble(StringOperand2.Substring(0, StringOperand2.IndexOf(Delimiter) + ValueLength).Replace(Delimiter, NumDecimalSeparator)); Unit Result; // Оператор вычитания if (Operator == "-") { Result = UnitsOfMeasure.GetSubtraction(UnitOperand1, UnitOperand2, UnitOperand1.UnitsName); return(Math.Round(Result.Value, Accuracy).ToString().Replace(NumDecimalSeparator, ".") + " " + Result.UnitsName); } // Оператор вычисления отношения ((арг1 - арг2)/(арг2))*100 if (Operator == "%") { Result = UnitsOfMeasure.GetRatio(UnitOperand1, UnitOperand2, UnitOperand1.UnitsName); if (Result != null) { return(Math.Round(Result.Value, Accuracy).ToString().Replace(NumDecimalSeparator, ".")); } else { return("-"); } } } else { if (Value.IndexOf("Random") >= 0) { int randomIndex = Convert.ToInt32(Value.Substring(Value.IndexOf("[") + 1, Value.IndexOf("]") - Value.IndexOf("[") - 1)); string value = Value.IndexOf("]") + 1 < Value.Length ? Value.Substring(Value.IndexOf("]") + 1) : ""; if (Value.IndexOf("RandomActualValue") >= 0) { return(Convert.ToString(RandomActualValue[randomIndex]) + value); } if (Value.IndexOf("RandomActualInterval") >= 0) { return(Convert.ToString(RandomActualInterval[randomIndex]) + value); } if (Value.IndexOf("RandomMeasuredValue") >= 0) { return(Convert.ToString(RandomMeasuredValue[randomIndex]) + value); } if (Value.IndexOf("RandomMotionStartValue") >= 0) { return(Convert.ToString(RandomMotionStartValue[randomIndex]) + value); } if (Value.IndexOf("RandomError") >= 0) { return(Value.IndexOf("RandomError") > 0 ? Value.Substring(0, Value.IndexOf("RandomError")) + Convert.ToString(RandomError[randomIndex]) + value : Convert.ToString(RandomError[randomIndex]) + value); } if (Value.IndexOf("RandomIndication") >= 0) { return(Convert.ToString(RandomIndication[randomIndex]) + value); } } if (Value.IndexOf("Variables") >= 0) { int randomIndex = Convert.ToInt32(Value.Substring(Value.IndexOf("[") + 1, Value.IndexOf("]") - Value.IndexOf("[") - 1)); string value = Value.IndexOf("]") + 1 < Value.Length ? Value.Substring(Value.IndexOf("]") + 1) : ""; return(Value.IndexOf("Variables") > 0 ? Value.Substring(0, Value.IndexOf("Variables")) + Convert.ToString(Variables[randomIndex]) + value : Convert.ToString(Variables[randomIndex]) + value); } } } return(Value); }