Exemple #1
0
 bool ConvertLine(List <object> line)
 {
     line[0] = ElementTable.FindIndex((string)line[0]);
     line[1] = ElementTable.FindIndex((string)line[1]);
     if ((int)line[1] < 0)
     {
         return(false);
     }
     line[2] = serv.ParseDouble((string)line[2]);
     line[3] = serv.ParseDouble((string)line[3]);
     line[4] = serv.ParseDouble((string)line[4]);
     line[5] = serv.ParseDouble((string)line[5]);
     return(true);
 }
Exemple #2
0
        public bool InitByText(string init_text)
        {
            bool ret = true;

            SrcText = init_text;
            int    i        = 0;
            string error    = "";
            string e_name   = "";
            string sig      = "";
            string val      = "";
            int    st_count = 0;
            string name     = null;

            StLibStandart cur_st = null;

            while (i < init_text.Length)
            {
                string warn = null;
                string line = GetString(init_text, ref i);
                try
                {
                    int comment_index = line.IndexOf("#");
                    if (comment_index >= 0)
                    {
                        line = line.Substring(0, comment_index);
                    }
                    line = line.Trim();
                    if (line.Length == 0)
                    {
                        ResultText += " ";
                    }
                    else
                    {
                        if (line[0] == '-')
                        {
                            st_count++;
                            bool error_found = false;

                            /*for (int t = 0; t < line.Length;t++ )
                             *  if (line[t] != '-')
                             *  {
                             *      error_found = true;
                             *      break;
                             *  }*/
                            name = "";
                            for (int t = 0; t < line.Length; t++)
                            {
                                if (line[t] == '#')
                                {
                                    break;
                                }
                                if (line[t] == '-')
                                {
                                    continue;
                                }
                                name += line[t];
                            }
                            name = name.Trim();
                            if (name.Length == 0)
                            {
                                name = BaseName + st_count;
                            }
                            if (error_found == false)
                            {
                                cur_st = new StLibStandart();
                                St.Add(cur_st);
                                ResultText += Common.MLS.Get(MLSConst, "-Начало стандарта ") + name;
                            }
                            else
                            {
                                ResultText += Common.MLS.Get(MLSConst, "Ошибка!!! В строке начала нового стандарта присутствуют символы отличные от '-'");
                                ret         = false;
                                cur_st      = new StLibStandart();
                                St.Add(cur_st);
                            }
                        }
                        else
                        {
                            if (cur_st == null)
                            {
                                ResultText += Common.MLS.Get(MLSConst, "Ошибка!!! С помощью '-' укажите начало нового стандарта перед заданием концентрации");
                                ret         = false;
                                cur_st      = new StLibStandart();
                                St.Add(cur_st);
                            }
                            string nline = "";
                            int    j     = 0;
                            for (; j < line.Length; j++)
                            {
                                if (char.IsLetterOrDigit(line[j]) ||
                                    line[j] == '.' ||
                                    line[j] == ',' ||
                                    line[j] == '=' ||
                                    line[j] == '~' ||
                                    line[j] == '?')
                                {
                                    nline += line[j];
                                }
                            }
                            e_name = "";
                            sig    = "";
                            val    = "";
                            line   = nline;
                            for (j = 0; j < line.Length; j++)
                            {
                                if (char.IsLetter(line[j]) || line[j] == ' ')
                                {
                                    e_name += line[j];
                                }
                                else
                                {
                                    break;
                                }
                            }
                            bool is_duble = false;
                            int  e_index  = ElementTable.FindIndex(e_name);
                            if (e_index < 0)
                            {
                                ResultText += Common.MLS.Get(MLSConst, "Не существующее имя элемента: ") + e_name;
                                ret         = false;
                                is_duble    = true;
                            }
                            for (int k = 0; k < cur_st.Count; k++)
                            {
                                if (cur_st[k].ElementIndex == e_index)//if (e_name.Equals(cur_st[k].Element))
                                {
                                    ResultText += Common.MLS.Get(MLSConst, "Дубликат элемента: ") + e_name;
                                    ret         = false;
                                    is_duble    = true;
                                    break;
                                }
                            }
                            if (is_duble == false)
                            {
                                if (j < line.Length && (line[j] == '=' || line[j] == '~'))
                                {
                                    sig += line[j];
                                    j++;
                                }
                                for (; j < line.Length; j++)
                                {
                                    if (char.IsDigit(line[j]) || line[j] == '.' ||
                                        line[j] == ',' || line[j] == '?')
                                    {
                                        val += line[j];
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                                if (j < line.Length)
                                {
                                    if (line[j] != '#')
                                    {
                                        warn = Common.MLS.Get(MLSConst, "Некорректное завершение строки: ") +
                                               "'" + line.Substring(j) + "'" +
                                               Common.MLS.Get(MLSConst, " Для комментария используйте #.");
                                        ret = false;
                                    }
                                }
                                ResultText += e_name;
                                StLibElement el = new StLibElement();
                                el.StandartName = name;
                                el.ElementIndex = e_index;//e_name;
                                if (sig.Length == 0 ||
                                    val.Length == 0)
                                {
                                    ResultText += Common.MLS.Get(MLSConst, "-основа");
                                    el.IsBase   = true;
                                }
                                else
                                {
                                    if (sig[0] == '=')
                                    {
                                        el.IsAproxim = false;
                                        if (val[0] != '?')
                                        {
                                            el.Con      = serv.ParseDouble(val);
                                            ResultText += " = " + el.Con + Common.MLS.Get(MLSConst, " (точно)");
                                        }
                                        else
                                        {
                                            el.Con      = -1;
                                            ResultText += Common.MLS.Get(MLSConst, " - не регламентируется");
                                        }
                                    }
                                    else
                                    {
                                        el.IsAproxim = true;
                                        if (val[0] != '?')
                                        {
                                            el.Con      = serv.ParseDouble(val);
                                            ResultText += " ~ " + el.Con + Common.MLS.Get(MLSConst, " (приблизительно)");
                                        }
                                        else
                                        {
                                            el.Con      = -1;
                                            ResultText += Common.MLS.Get(MLSConst, " - может присутствовать");
                                        }
                                    }
                                }
                                cur_st.Add(el);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Log.OutNoMsg(ex);
                    ResultText += Common.MLS.Get(MLSConst, "Ошибка!!! ") + error + ". '" + e_name + "''" + sig + "''" + val + "'";
                    ret         = false;
                }
                if (warn != null)
                {
                    ResultText += Common.MLS.Get(MLSConst, " Предупреждение:") + warn;
                }
                ResultText += ((char)0xD);
                ResultText += ((char)0xA);
            }
            try
            {
                ResultText += Common.MLS.Get(MLSConst, "--------- Конец файла ---------") + serv.Endl;
                ResultText += Common.MLS.Get(MLSConst, "Всего распознано:") + Count + Common.MLS.Get(MLSConst, " стандартов.") + serv.Endl;
                double[] max_cons = null;
                if (Count > 0)
                {
                    max_cons = new double[this[0].Count];
                    for (int mc = 0; mc < max_cons.Length; mc++)
                    {
                        max_cons[mc] = -double.MaxValue;
                    }
                    for (int st = 0; st < Count; st++)
                    {
                        for (i = 0; i < this[st].Count; i++)
                        {
                            try
                            {
                                if (this[st][i].Con > max_cons[i])
                                {
                                    max_cons[i] = this[st][i].Con;
                                }
                            }
                            catch
                            {
                                ResultText += Common.MLS.Get(MLSConst, "Oшибка. В стандарте:") + (st + 1) + " нехватает элементов." + serv.Endl;
                                ret         = false;
                            }
                        }
                    }
                }
                for (int st = 0; st < Count; st++)
                {
                    double sum = 0;
                    double sko = 0;
                    for (i = 0; i < this[st].Count; i++)
                    {
                        if (this[st][i].Con > 0)
                        {
                            sum += this[st][i].Con;
                            double dlt;
                            try
                            {
                                dlt = this[st][i].Con - max_cons[i];
                            }
                            catch (Exception ex)
                            {
                                dlt         = 0;
                                ret         = false;
                                ResultText += Common.MLS.Get(MLSConst, "Ошибка вычисления суммы на стандарте " + (st + 1) + " элемент " + (i + 1));
                            }
                            if (max_cons[i] > 0)
                            {
                                dlt *= 100 / max_cons[i];
                            }
                            else
                            {
                                dlt = 0;
                            }
                            sko += dlt * dlt;
                        }
                    }
                    sko = Math.Sqrt(sko / this[st].Count);
                    if (sum <= 100)
                    {
                        ResultText += Common.MLS.Get(MLSConst, "Сумма концентраций по ") + (st + 1) + Common.MLS.Get(MLSConst, " стандарту ") + Math.Round(sum, 5) + "%";
                    }
                    else
                    {
                        ResultText += Common.MLS.Get(MLSConst, "Предупруждение!!!! Сумма концентраций по ") + (st + 1) + Common.MLS.Get(MLSConst, " стандарту больше 100%: ") + Math.Round(sum, 1) + "%";
                        ret         = false;
                    }
                    ResultText += Common.MLS.Get(MLSConst, " СКО от максимума ") + Math.Round(sko, 1) + "%" + serv.Endl;
                }
            }
            catch (Exception ex)
            {
                ResultText += Common.MLS.Get(MLSConst, "Ошибка вычисления суммы...");
                Log.Out(ex);
            }
            return(ret);
        }