Esempio n. 1
0
        private int ParseOneEl(string sD, List <ElemDef> lE, ref int nEl, out string sF, List <string> lM)
        {
            bool bOut;

            string[] aF;
            int      i,
                     nL,
                     nRet = AppC.RC_CANCEL;
            string  s;
            ElemDef x;

            sF = "";
            if (sD.IndexOf(sLevSign) < 0)
            {
                // это действительно детальная
                try
                {
                    bOut = true;                            // Элемент присутствует в выводе

                    if (sD[0] == ';')
                    {
                        sD   = sD.Substring(1);
                        bOut = false;
                    }

                    aF = sD.Split(aSep);
                    nL = aF.Length - 1;

                    if (aF[nL].Length >= 2)
                    {
                        i = aF[nL].IndexOf("//");
                        if (i > 0)
                        {
                            aF[nL] = aF[nL].Substring(0, i).Trim();
                        }
                        if (aF[nL].Length > 0)
                        {
                            nL++;
                        }
                    }


                    if (nL < 4)
                    {
                        throw new SystemException("Неверное описание:" + sD);
                    }

                    int iT = int.Parse(aF[1]);
                    x = new ElemDef(nEl, aF[0], (ELTYPES)iT, aF[2], int.Parse(aF[3]));
                    // Точность
                    x.nTOCH = (nL >= 5) ? int.Parse(aF[4]) : 0;
                    // Внутренний тип
                    if (nL >= 6)
                    {
                        s = aF[5].Trim();
                        if (s.Length > 0)
                        {
                            x.cTYPI = s[0];
                        }
                    }

                    // Длина (внутр.)
                    x.nLENI = (nL >= 7) ? int.Parse(aF[6]) : 0;

                    // Имя поля
                    if (nL >= 8)
                    {
                        s = aF[7].Trim();
                        if (s.Length > 0)
                        {
                            x.sFLD = s;
                            sF     = s;
                        }
                    }

                    // Выражение (макросы ключевых полей)
                    if (nL >= 9)
                    {
                        s = aF[8].Trim();
                        if (s.Length > 0)
                        {
                            x.sBC = s;
                        }
                    }

                    // Формат представления
                    x.sFMT = (nL >= 10) ? aF[9].Trim() : "";
                    if (nL >= 10)
                    {
                        s = aF[9].Trim();
                        if (s.Length > 0)
                        {
                            x.sFMT = s;
                        }
                    }

                    // Присутствие в выходном файле
                    x.bOUT = bOut;

                    lE.Add(x);


                    nEl = nEl + 1;



                    nRet = AppC.RC_OK;
                }
                catch
                {
                    nEl = -1;
                }
            }
            return(nRet);
        }
Esempio n. 2
0
            // получить все элементы уровня
            public string ParseOneEl(byte[] b, ref int nOfs, ElemDef xE, out object x)
            {
                DateTime d;
                string   s = "";
                long     i64;
                double   dBl;

                x = null;

                switch (xE.cTYPD)
                {
                case T_N: // Числа
                    if ((xE.cTYPI != T_E) && (bBin == true))
                    {     // Бинарное представление
                    }
                    else
                    {    // Символьное представление чисел
                        if (xE.nTOCH == 0)
                        {
                            s    = Encoding.ASCII.GetString(b, nOfs, xE.nLEN);
                            nOfs = nOfs + xE.nLEN;
                            i64  = long.Parse(s);
                            x    = i64;
                        }
                        else
                        {
                            s = Encoding.ASCII.GetString(b, nOfs, xE.nLEN - 1);
                            s.Insert(xE.nLEN - xE.nTOCH, ".");
                            dBl  = double.Parse(s);
                            s    = dBl.ToString();
                            nOfs = nOfs + xE.nLEN - 1;
                            x    = dBl;
                        }
                    }
                    break;

                case T_C: // Символьные данные
                    if ((xE.cTYPI != T_E) && (bBin == true))
                    {     // упакованное представление
                    }
                    else
                    {    // Символьное представление
                        s    = Encoding.ASCII.GetString(b, nOfs, xE.nLEN);
                        nOfs = nOfs + xE.nLEN;
                    }
                    break;

                case T_D: // Даты
                    if ((xE.cTYPI != T_E) && (bBin == true))
                    {     // упакованное представление
                        d    = new DateTime(b[nOfs + 2], b[nOfs + 1], b[nOfs]);
                        nOfs = nOfs + 3;
                    }
                    else
                    {    // Символьное представление
                        s    = Encoding.ASCII.GetString(b, nOfs, 6);
                        d    = DateTime.ParseExact(s, "yyMMdd", null);
                        nOfs = nOfs + 6;
                    }
                    if (xE.sFMT.Length > 0)
                    {
                        s = d.ToString(xE.sFMT);
                    }
                    else
                    {
                        s = d.ToString("dd.MM.yyyy");
                    }
                    x = d;
                    break;
                }


                return(s);
            }