示例#1
0
        private void FillRows(IList markingFields)
        {
            int countx = 1;

            if (markingFields.Count > 0)
            {
                TxtFieldDef prevTFD, currTFD = (TxtFieldDef)markingFields[0];

                if (1 == currTFD.posBegin)
                {
                    AddRow(currTFD.fieldName, 1, currTFD.posEnd);
                }
                else
                {
                    AddRow(String.Format("x{0}", countx), 1, currTFD.posBegin - 1);
                    countx++;
                    AddRow(currTFD.fieldName, currTFD.posBegin, currTFD.posEnd);
                }
                var i = 1;
                for (i = 1; i <= markingFields.Count - 1; i++)
                {
                    prevTFD = (TxtFieldDef)markingFields[i - 1];
                    currTFD = (TxtFieldDef)markingFields[i];
                    if (currTFD.posBegin == prevTFD.posEnd + 1)
                    {
                        AddRow(currTFD.fieldName, currTFD.posBegin, currTFD.posEnd);
                    }
                    else
                    {
                        AddRow(String.Format("x{0}", countx), prevTFD.posEnd + 1, currTFD.posBegin - 1);
                        countx++;
                        AddRow(currTFD.fieldName, currTFD.posBegin, currTFD.posEnd);
                    }
                }
                var lastTFD = (TxtFieldDef)markingFields[i - 1];
                if (lastTFD.posEnd < 255)
                {
                    AddRow(String.Format("x{0}", countx), lastTFD.posEnd + 1, 255);
                }
            }
            else
            {
                AddRow("x1", 1, 255);
            }
        }
示例#2
0
        public static DataTable OpenPriceTable(string filePath, DataTableMarking dataTableMarking, PriceFormat?priceFormat, PriceEncode encode)
        {
            DataTable dataTablePrice = null;

            if (dataTableMarking.Rows.Count > 1)
            {
                var fields = new ArrayList();
                for (var i = 0; i < dataTableMarking.Rows.Count; i++)
                {
                    var row           = dataTableMarking.Rows[i];
                    var fieldName     = row["MNameField"].ToString();
                    var beginPosition = Convert.ToInt32(row["MBeginField"]);
                    var endPosition   = Convert.ToInt32(row["MEndField"]);
                    fields.Add(new TxtFieldDef(fieldName, beginPosition, endPosition));
                }
                fields.Sort(new TxtFieldDef());

                var schemaFile = Path.GetDirectoryName(filePath) + Path.DirectorySeparatorChar + "Schema.ini";
                using (var w = new StreamWriter(schemaFile, false, Encoding.GetEncoding(1251))) {
                    w.WriteLine("[" + Path.GetFileName(filePath) + "]");
                    w.WriteLine(((priceFormat == PriceFormat.FixedWIN) || (priceFormat == PriceFormat.NativeFixed && encode == PriceEncode.Cp1251)) ?
                                "CharacterSet=ANSI" : "CharacterSet=OEM");
                    w.WriteLine("Format=FixedLength");
                    w.WriteLine("ColNameHeader=False");
                    w.WriteLine("MaxScanRows=300");

                    if (fields.Count > 0)
                    {
                        int         j = 1;
                        TxtFieldDef prevTFD, currTFD = (TxtFieldDef)fields[0];

                        if (1 == currTFD.posBegin)
                        {
                            w.WriteLine(String.Format("Col{0}={1} Text Width {2}", j, currTFD.fieldName, currTFD.posEnd));
                            j++;
                        }
                        else
                        {
                            w.WriteLine(String.Format("Col{0}={1} Text Width {2}", j, "x", currTFD.posBegin - 1));
                            j++;
                            w.WriteLine(String.Format("Col{0}={1} Text Width {2}", j, currTFD.fieldName, currTFD.posEnd - currTFD.posBegin + 1));
                            j++;
                        }

                        for (var i = 1; i <= fields.Count - 1; i++)
                        {
                            prevTFD = (TxtFieldDef)fields[i - 1];
                            currTFD = (TxtFieldDef)fields[i];
                            if (currTFD.posBegin == prevTFD.posEnd + 1)
                            {
                                w.WriteLine(String.Format("Col{0}={1} Text Width {2}", j, currTFD.fieldName, currTFD.posEnd - currTFD.posBegin + 1));
                                j++;
                            }
                            else
                            {
                                w.WriteLine(String.Format("Col{0}={1} Text Width {2}", j, "x", currTFD.posBegin - prevTFD.posEnd - 1));
                                j++;
                                w.WriteLine(String.Format("Col{0}={1} Text Width {2}", j, currTFD.fieldName, currTFD.posEnd - currTFD.posBegin + 1));
                                j++;
                            }
                        }
                    }
                    else
                    {
                        w.WriteLine(String.Format("Col{0}=x1 Text Width {1}", 1, 255));
                    }
                }

                var connectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Text\"",
                                                     Path.GetDirectoryName(filePath));
                using (var connection = new OleDbConnection(connectionString)) {
                    connection.Open();
                    var dataAdapter = new OleDbDataAdapter(String.Format("select * from {0}",
                                                                         Path.GetFileName(filePath).Replace(".", "#")), connection);
                    dataTablePrice = new DataTable();
                    dataAdapter.SyncFill(dataTablePrice);
                    if (dataTablePrice.Rows.Count == 0)
                    {
                        throw new Exception("При открытии файла таблица с полями прайс-листа оказалась пуста. Предположительно неверный формат или файл поврежден");
                    }
                }
            }
            return(dataTablePrice);
        }