コード例 #1
0
        /// <summary>
        /// Парсер для формата файла TXT
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding("Utf-8")))
            {
                string line;
                var    rejectFound = false;
                //Читаем, пока не кончатся строки в файле
                while ((line = reader.ReadLine()) != null)
                {
                    var fields = line.Split(';');
                    if (fields[0].Trim() == "Код")
                    {
                        rejectFound = true;
                        continue;
                    }

                    //Если мы еще не дошли до места с которого начинаются отказы, то продолжаем
                    if (!rejectFound)
                    {
                        continue;
                    }

                    //Если мы дошли до этого места, значит все что осталось в файле - это строки с отказами
                    fields = line.Trim().Split(';');
                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    rejectLine.Code    = fields[0].Trim();
                    rejectLine.Product = fields[1].Trim();
                    rejectLine.Ordered = NullableConvert.ToUInt32(fields[2].Trim());
                    var rejected = NullableConvert.ToUInt32(fields[3].Trim());
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Парсер для формата файла TXT
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                string line;
                var    rejectFound = false;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("Заказали"))
                    {
                        rejectFound = true;
                        continue;
                    }

                    if (line == "")
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var rejectLine = new RejectLine();
                    var fields     = line.Split('\t');
                    reject.Lines.Add(rejectLine);
                    rejectLine.Code    = fields[0];
                    rejectLine.Product = fields[5];
                    rejectLine.Ordered = NullableConvert.ToUInt32(fields[1]);
                    var rejected = NullableConvert.ToUInt32(fields[3]);
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Парсер для формата файла DBF
        /// </summary>
        protected void ParseDBF(RejectHeader reject, string filename)
        {
            DataTable data;

            try
            {
                data = Dbf.Load(filename);
            }
            catch (Exception e)
            {
                var err = string.Format("Не удалось получить файл с отказами '{0}' для лога документа {1}", filename, reject.Log.Id);
                Logger.Warn(err, e);
                return;
            }
            for (var i = 0; i < data.Rows.Count; i++)
            {
                var rejectLine = new RejectLine();
                reject.Lines.Add(rejectLine);
                rejectLine.Product = data.Rows[i][10].ToString();
                rejectLine.Code    = data.Rows[i][9].ToString();
                rejectLine.Cost    = NullableConvert.ToDecimal(data.Rows[i][13].ToString());
                rejectLine.Ordered = NullableConvert.ToUInt32(data.Rows[i][14].ToString());
                var rejected = NullableConvert.ToUInt32(data.Rows[i][15].ToString());
                rejectLine.Rejected = rejected != null ? rejected.Value : 0;
            }
        }
コード例 #4
0
 /// <summary>
 /// Парсер для формата файла TXT
 /// </summary>
 protected void ParseTXT(RejectHeader reject, string filename)
 {
     using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
     {
         string line;
         while ((line = reader.ReadLine()) != null)
         {
             if (line != "")
             {
                 var rejectLine = new RejectLine();
                 reject.Lines.Add(rejectLine);
                 var splat          = line.Trim().Split(' ');
                 var splatCountLast = splat.Count() - 1;
                 var splatLast      = splat[splatCountLast];
                 splat[splatCountLast] = "";
                 var product = String.Join(" ", splat, 0, splat.Count());
                 rejectLine.Product = product.Trim();
                 var ordered = splatLast.Split('>');
                 rejectLine.Ordered = NullableConvert.ToUInt32(ordered[0].Replace("-", ""));
                 var received = NullableConvert.ToUInt32(ordered[1]);
                 var rejected = rejectLine.Ordered - received;
                 rejectLine.Rejected = rejected != null ? rejected.Value : 0;
             }
         }
     }
 }
コード例 #5
0
        /// <summary>
        /// Парсер для формата файла TXT
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                string line;
                var    rejectFound = false;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("ИД заявки"))
                    {
                        rejectFound = true;
                        reader.ReadLine();
                        continue;
                    }

                    if (line == "")
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    var splat = line.Trim().Split(':');
                    rejectLine.Product = splat[0].Trim();
                    rejectLine.Ordered = NullableConvert.ToUInt32(splat[1].Replace("-", ""));
                    var rejected = NullableConvert.ToUInt32(splat[1]);
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
コード例 #6
0
        /// <summary>
        /// Парсер для формата файла TXT и OTK
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                //пропускаем первую строку и начинаем считывание
                reader.ReadLine();
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    var splat = line.Trim().Split(new[] { "\t" }, StringSplitOptions.None);

                    //по причине того,что есть файлы без поля кода товара
                    if (splat.Count() <= 2)
                    {
                        rejectLine.Product = splat[0].Replace("|", "");
                        rejectLine.Ordered = NullableConvert.ToUInt32(splat[1]);
                        var splat2 = NullableConvert.ToUInt32(splat[1]);
                        rejectLine.Rejected = splat2 != null ? splat2.Value : 0;
                    }
                    else
                    {
                        rejectLine.Product = splat[1];
                        rejectLine.Code    = splat[0];
                        rejectLine.Ordered = NullableConvert.ToUInt32(splat[2]);
                        var rejected = NullableConvert.ToUInt32(splat[2]);
                        rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                    }
                }
            }
        }
コード例 #7
0
        /// <summary>
        /// Парсер для формата файла TXT
        /// для формата txt много различных типов файлов
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            try {
                using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251))) {
                    //считываем весь текст из файла и проверяем на наличие слова Отказы
                    //из-за проблемы с кодировкой в некоторых файлах
                    //это сделано на случай страховки,если вдруг текст в файле все же не будет считываться правильно
                    string file = reader.ReadToEnd();
                    if (!file.ToLower().Contains("отказаны следующие позиции"))
                    {
                        Logger.WarnFormat("Файл '{0}' не может быть распарсен, так как парсер {1} не может парсить данный файл из-за проблемы с кодировкой", filename, GetType().Name);
                    }
                    else
                    {
                        var parts = file.Split(new[] { "\r\n" }, StringSplitOptions.None);
                        for (var i = 1; i < parts.Count(); i++)
                        {
                            var rejectFound = true;

                            if (parts[i].Contains("По Клиент"))
                            {
                                rejectFound = false;
                            }

                            if (parts[i].Contains("По заявке"))
                            {
                                rejectFound = false;
                            }

                            if (parts[i] == "")
                            {
                                rejectFound = false;
                            }

                            if (!rejectFound)
                            {
                                continue;
                            }


                            var rejectLine = new RejectLine();
                            reject.Lines.Add(rejectLine);
                            var splat = parts[i].Split(new[] { '\t' }, StringSplitOptions.None);
                            rejectLine.Code    = splat[0];
                            rejectLine.Product = splat[1];
                            var rejected = NullableConvert.ToUInt32(splat[2]);
                            rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                var err = string.Format("Файл '{0}' не может быть распарсен, так как парсер {1} не может парсить данный файл так как он либо иного типа,либо с опечаткой", filename, GetType().Name);
                Logger.Warn(err, e);
            }
        }
        /// <summary>
        /// Парсер для формата файла XLS
        /// </summary>
        protected void ParseXLS(RejectHeader reject, string filename)
        {
            HSSFWorkbook hssfwb;

            using (FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Read))
            {
                try
                {
                    hssfwb = new HSSFWorkbook(file);
                }
                catch (Exception e)
                {
                    var err = string.Format("Не удалось получить файл с отказами '{0}' для лога документа {1}", filename, reject.Log.Id);
                    Logger.Warn(err, e);
                    return;
                }
            }

            ISheet sheet = hssfwb.GetSheetAt(0);
            //запускаем цикл по строкам
            var rejectFound = false;

            for (var i = 0; i <= sheet.LastRowNum; i++)
            {
                var row = sheet.GetRow(i);
                if (row != null)
                {
                    var cell = row.GetCell(0);
                    if (cell != null && cell.ToString() == "Товар")
                    {
                        rejectFound = true;
                        continue;
                    }

                    //проверяем ячейку на null и остальные невидимые значения
                    if (cell == null || string.IsNullOrWhiteSpace(cell.StringCellValue))
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    rejectLine.Product  = row.GetCell(0).StringCellValue;
                    rejectLine.Code     = row.GetCell(6).NumericCellValue.ToString();
                    rejectLine.Producer = row.GetCell(4).StringCellValue;
                    rejectLine.Ordered  = NullableConvert.ToUInt32(row.GetCell(7).NumericCellValue.ToString());
                    var rejected = NullableConvert.ToUInt32(row.GetCell(8).NumericCellValue.ToString());
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
コード例 #9
0
        /// <summary>
        /// Парсер для формата файла DBF
        /// </summary>
        protected void ParseDBF(RejectHeader reject, string filename)
        {
            var data = Dbf.Load(filename);

            for (var i = 0; i < data.Rows.Count; i++)
            {
                var rejectLine = new RejectLine();
                reject.Lines.Add(rejectLine);
                rejectLine.Code    = data.Rows[i][0].ToString();
                rejectLine.Product = data.Rows[i][1].ToString();
                var ordered = data.Rows[i][2].ToString().Split(',');
                rejectLine.Ordered = NullableConvert.ToUInt32(ordered[0]);
                var rejected = NullableConvert.ToUInt32(ordered[0]);
                rejectLine.Rejected = rejected != null ? rejected.Value : 0;
            }
        }
コード例 #10
0
        /// <summary>
        /// Парсер для формата файла DBF
        /// </summary>
        protected void ParseDBF(RejectHeader reject, string filename)
        {
            var data = Dbf.Load(filename);

            for (var i = 0; i < data.Rows.Count; i++)
            {
                var rejectLine = new RejectLine();
                reject.Lines.Add(rejectLine);
                rejectLine.Product  = data.Rows[i][1].ToString();
                rejectLine.Producer = data.Rows[i][2].ToString();
                rejectLine.Ordered  = NullableConvert.ToUInt32(data.Rows[i][3].ToString());
                var rejected = NullableConvert.ToUInt32(data.Rows[i][4].ToString());
                rejectLine.Cost     = NullableConvert.ToDecimal(data.Rows[i][5].ToString());
                rejectLine.Rejected = rejected != null ? rejected.Value : 0;
            }
        }
コード例 #11
0
 /// <summary>
 /// Парсер для формата файла TXT
 /// </summary>
 protected void ParseTXT(RejectHeader reject, string filename)
 {
     using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
     {
         string line;
         var    rejectFound = false;
         while ((line = reader.ReadLine()) != null)
         {
             if (line.Trim() == "О Т К А З Ы")
             {
                 rejectFound = true;
                 continue;
             }
             if (line.Trim() == "СФОРМИРОВАННЫЙ ЗАКАЗ")
             {
                 break;
             }
             if (!rejectFound)
             {
                 continue;
             }
             if (line.Length == 0)
             {
                 continue;
             }
             //пропускаем заголовок
             if (line[0] == '¦')
             {
                 continue;
             }
             //пропускаем разделители строк
             if (line.All(c => c == '-'))
             {
                 continue;
             }
             var rejectLine = new RejectLine();
             reject.Lines.Add(rejectLine);
             rejectLine.Product  = line.Substring(0, 35).Trim();
             rejectLine.Producer = line.Substring(35, 13).Trim();
             rejectLine.Cost     = NullableConvert.ToDecimal(line.Substring(48, 9).Trim(), CultureInfo.InvariantCulture);
             rejectLine.Ordered  = (uint?)NullableConvert.ToFloatInvariant(line.Substring(57, 9).Trim());
             var rejectedCount = (rejectLine.Ordered - (uint?)NullableConvert.ToFloatInvariant(line.Substring(66, 9).Trim()));
             rejectLine.Rejected = rejectedCount.GetValueOrDefault();
         }
     }
 }
コード例 #12
0
        /// <summary>
        /// Парсер для формата файла TXT
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251))) {
                string line;
                var    rejectFound = false;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("К сожалению вся позиция уже отсутствует:"))
                    {
                        rejectFound = true;
                        continue;
                    }

                    if (line == "")
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var index = line.IndexOf("Добавлено:");
                    if (index <= 0)
                    {
                        continue;
                    }

                    var first      = line.Substring(0, index).Trim();
                    var product    = first.Remove(0, 2);
                    var rejectLine = new RejectLine();
                    rejectLine.Product = product;

                    var second = line.Substring(index).Trim().Replace(",", " ");
                    var fields = second.Split(' ');
                    rejectLine.Cost = NullableConvert.ToDecimal(fields[7].Trim().Replace(".", ","));
                    var ordered   = NullableConvert.ToUInt32(fields[4]);
                    var delivered = NullableConvert.ToUInt32(fields[1].Trim());
                    rejectLine.Ordered = ordered;
                    var rejected = ordered - delivered;
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                    reject.Lines.Add(rejectLine);
                }
            }
        }
コード例 #13
0
        /// <summary>
        /// Парсер для формата файла CSV
        /// </summary>
        protected void ParseCSV(RejectHeader reject, string filename)
        {
            //Открываем файл, при помощи unsing, чтобы вконце си шарп отпустил занятые ресурсы. Подробнее гугли IDisposable.
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                string line;
                var    rejectFound = false;
                //Читаем, пока не кончатся строки в файле
                while ((line = reader.ReadLine()) != null)
                {
                    //Делим строку на части по разделителю.
                    //CSV файл, который ожидает данный парсер - это эксел таблица, строки которой разделены переносом строки, а ячейки символом ";"
                    var fields = line.Split(';');
                    //Ищем в ячейке место, с которого начинаются отказы в таблице
                    if (fields[1].Trim() == "ОТКАЗАНО")
                    {
                        //После строчки с этой надписью, будет еще одна строка с наименованием таблицы, ее мы пропустим
                        //И со следующей строчки будут уже идти отказы
                        //В итоге надо пропустить 2 строчки и проставить флаг, что дальше пора считывать отказы
                        //Отказы идут прямо до конца файла, так что в условии остановки считывания нужды нет
                        reader.ReadLine();
                        rejectFound = true;
                        continue;
                    }
                    //Если мы еще не дошли до места с которого начинаются отказы, то продолжаем
                    if (!rejectFound)
                    {
                        continue;
                    }

                    //Если мы дошли до этого места, значит все что осталось в файле - это строки с отказами
                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    rejectLine.Code     = fields[1];
                    rejectLine.Product  = fields[2];
                    rejectLine.Producer = fields[3];
                    rejectLine.Cost     = NullableConvert.ToDecimal(fields[4].Trim());
                    rejectLine.Ordered  = NullableConvert.ToUInt32(fields[5].Trim());
                    //тонкий момент - это поле является обязательным, но теоретически может отсутствовать в файле
                    //в случае отсутствия мы записываем 0, тогда далее другие классы разберут этот случай
                    //и сделают необходимые действия по урегулированию ситуации
                    var rejected = NullableConvert.ToUInt32(fields[7].Trim());
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
コード例 #14
0
        /// <summary>
        /// Парсер для формата файла TXT
        /// В файле допущена ошибка с тем что в графе запрошено стоит ноль
        /// Раз неизвестно количество заказанных товаров,то невозможно вычислить отказы
        /// Строки, где в запрошено стоит ноль - игнорируем
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                string line;
                var    rejectFound = false;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("Следующие расхождения с заявкой:"))
                    {
                        rejectFound = true;
                        continue;
                    }

                    if (line == "")
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    var first     = line.Replace("Отказ по количеству: ", "");
                    var splat     = first.Split(new[] { " - запрошено" }, StringSplitOptions.None);
                    var product   = splat[0];
                    var other     = splat[1];
                    var splat2    = other.Split(new[] { ", к получению " }, StringSplitOptions.None);
                    var ordered   = NullableConvert.ToUInt32(splat2[0]);
                    var requested = NullableConvert.ToUInt32(splat2[1]);
                    if (ordered == 0)
                    {
                        continue;
                    }
                    var rejected = ordered - requested;
                    rejectLine.Product  = product.Trim();
                    rejectLine.Ordered  = ordered;
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
コード例 #15
0
        /// <summary>
        /// Парсер для формата файла CSV
        /// </summary>
        protected void ParseCSV(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251))) {
                string line;
                var    rejectFound = false;
                //Читаем, пока не кончатся строки в файле
                while ((line = reader.ReadLine()) != null)
                {
                    //Делим строку на части по разделителю.
                    //CSV файл, который ожидает данный парсер - это эксел таблица, строки которой разделены переносом строки, а ячейки символом ";"
                    var fields = line.Split(';');
                    if (fields.Length == 0)
                    {
                        continue;
                    }
                    //Ищем в ячейке место, с которого начинаются отказы в таблице
                    if (fields[0].Trim() == "Номер заказа ПОСТАВЩИКу")
                    {
                        rejectFound = true;
                        continue;
                    }
                    //Если мы еще не дошли до места с которого начинаются отказы, то продолжаем
                    if (!rejectFound)
                    {
                        continue;
                    }
                    if (fields.Length < 11)
                    {
                        continue;
                    }

                    //Если мы дошли до этого места, значит все что осталось в файле - это строки с отказами
                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    rejectLine.Code    = fields[5];
                    rejectLine.Product = fields[6];
                    rejectLine.Cost    = NullableConvert.ToDecimal(fields[10].Trim());
                    rejectLine.Ordered = NullableConvert.ToUInt32(fields[7].Trim());
                    var rejected = NullableConvert.ToUInt32(fields[9].Trim());
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
コード例 #16
0
        /// <summary>
        /// Парсер для формата файла TXT
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                string line;
                var    rejectFound = false;
                while ((line = reader.ReadLine()) != null)
                {
                    //доходим до строчки, в которой содерится слово ТОВАР и начинаем чтение
                    if (line.Contains("ТОВАР"))
                    {
                        rejectFound = true;
                        //пропускаем линию-разделения таблицы
                        reader.ReadLine();
                        continue;
                    }

                    if (line == "")
                    {
                        rejectFound = false;
                    }

                    var rejectLine = new RejectLine();
                    //проверяем на наличие линий-разделения таблицы
                    if (line.Contains("+="))
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var fields = line.Split('|');
                    reject.Lines.Add(rejectLine);
                    rejectLine.Product = fields[2];
                    rejectLine.Ordered = NullableConvert.ToUInt32(fields[5]);
                    var rejected = NullableConvert.ToUInt32(fields[5]);
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
コード例 #17
0
        /// <summary>
        /// Парсер для формата файла TXT
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                string line;
                var    rejectFound = false;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("Следующие расхождения с заявкой:"))
                    {
                        rejectFound = true;
                        continue;
                    }

                    if (line == "")
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var rejectLine = new RejectLine();
                    var fields     = line.Split(new[] { "; - запрошено" }, StringSplitOptions.None);
                    var product    = fields[0].Replace("Отказ по количеству:", "");
                    var fields2    = fields[1].Split(',');
                    var fields3    = fields2[0].Replace("шт.", "").Trim();
                    var ordered    = fields3.Split('.');
                    var fields4    = fields2[1].Replace("к получению", "").Replace("шт.", "");
                    var received   = fields4.Split('.');
                    reject.Lines.Add(rejectLine);
                    rejectLine.Product = product.Trim();
                    rejectLine.Ordered = NullableConvert.ToUInt32(ordered[0]);
                    var rejected = NullableConvert.ToUInt32(ordered[0]) - NullableConvert.ToUInt32(received[0]);
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
コード例 #18
0
        /// <summary>
        /// Парсер для формата файла XLS
        /// Но на самом деле это файлы dbf
        /// </summary>
        protected void ParseXLS(RejectHeader reject, string filename)
        {
            DataTable data;

            try
            {
                data = Dbf.Load(filename);
            }
            catch (Exception e)
            {
                var err = string.Format("Не удалось получить файл с отказами '{0}' для лога документа {1}", filename, reject.Log.Id);
                Logger.Warn(err, e);
                return;
            }
            for (var i = 0; i < data.Rows.Count; i++)
            {
                var rejectLine = new RejectLine();
                reject.Lines.Add(rejectLine);
                rejectLine.Code     = data.Rows[i][0].ToString();
                rejectLine.Product  = data.Rows[i][1].ToString();
                rejectLine.Producer = data.Rows[i][2].ToString();

                //высчитываем сколько отказов (из того сколько заказано вычитаем то сколько доставлено)
                var ordered   = NullableConvert.ToUInt32(data.Rows[i][3].ToString());
                var delivered = NullableConvert.ToUInt32(data.Rows[i][4].ToString());
                rejectLine.Ordered = ordered;

                //если в ячейке доставлено пусто-считаем что доставлено ноль
                if (delivered == null)
                {
                    delivered = 0;
                }

                var rejected = ordered - delivered;
                rejectLine.Rejected = rejected != null ? rejected.Value : 0;
            }
        }
コード例 #19
0
        /// <summary>
        /// Парсер для формата файла OTK
        /// </summary>
        protected void ParseOTK(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                //пропускаем первую строку и начинаем считывание
                reader.ReadLine();
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    //для файлов в которых нет отказов и присутствует пустая строка
                    if (!line.IsNullOrEmpty())
                    {
                        var rejectLine = new RejectLine();
                        reject.Lines.Add(rejectLine);
                        var splat = line.Trim().Split(new[] { "\t" }, StringSplitOptions.None);

                        // проверяем на файл в котором нет кода товара
                        if (splat.Count() <= 2)
                        {
                            rejectLine.Product = splat[0].Replace("|", "");
                            rejectLine.Ordered = NullableConvert.ToUInt32(splat[1]);
                            var splatRejected = NullableConvert.ToUInt32(splat[1]);
                            rejectLine.Rejected = splatRejected != null ? splatRejected.Value : 0;
                        }
                        else
                        {
                            rejectLine.Product = splat[1];
                            rejectLine.Code    = splat[0];
                            rejectLine.Ordered = NullableConvert.ToUInt32(splat[2]);
                            var rejected = NullableConvert.ToUInt32(splat[2]);
                            rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Парсер для формата файла DBF
        /// </summary>
        protected void ParseDBF(RejectHeader reject, string filename)
        {
            var data = Dbf.Load(filename);

            //файлы в которых нет наименования товара не разбираем
            if (!data.Columns[0].ToString().Contains("KOD"))
            {
                Logger.WarnFormat("Файл '{0}' не может быть распарсен, так как парсер {1} не может парсить данный файл из-за отсутсвия наименования товара", filename, GetType().Name);
            }
            else
            {
                for (var i = 0; i < data.Rows.Count; i++)
                {
                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    rejectLine.Product = data.Rows[i][1].ToString();
                    rejectLine.Code    = data.Rows[i][0].ToString();
                    var kolvo = data.Rows[i][4].ToString().Split(',');
                    rejectLine.Ordered = NullableConvert.ToUInt32(kolvo[0]);
                    var rejected = NullableConvert.ToUInt32(kolvo[0]);
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
コード例 #21
0
        /// <summary>
        /// Парсер для формата файла TXT
        /// Типов отказов формата txt два
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251))) {
                string file = reader.ReadToEnd();
                //если в файле содержится слово HEAD, то это первый тип файла формата txt
                //если в файле содержится слово Ваша заявка, то это второй тип файла формата txt
                if (file.Contains("HEAD"))
                {
                    var parts       = file.Split(new[] { "\r\n" }, StringSplitOptions.None);
                    var rejectFound = false;
                    for (var i = 0; i < parts.Count(); i++)
                    {
                        var fields = parts[i].Split(';');
                        if (fields[0].Trim() == "Код товара")
                        {
                            rejectFound = true;
                            continue;
                        }

                        if (parts[i] == "")
                        {
                            rejectFound = false;
                        }

                        if (!rejectFound)
                        {
                            continue;
                        }

                        var rejectLine = new RejectLine();
                        fields = parts[i].Trim().Split(';');
                        reject.Lines.Add(rejectLine);
                        rejectLine.Code    = fields[0].Trim();
                        rejectLine.Product = fields[1].Trim();
                        rejectLine.Ordered = NullableConvert.ToUInt32(fields[3].Trim());
                        var rejected = NullableConvert.ToUInt32(fields[4].Trim());
                        rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                    }
                }
                else if (file.Contains("Ваша заявка"))
                {
                    var parts       = file.Split(new[] { "\r\n" }, StringSplitOptions.None);
                    var rejectFound = false;

                    for (var i = 0; i < parts.Count(); i++)
                    {
                        if (parts[i].Contains("L"))
                        {
                            rejectFound = true;
                            continue;
                        }

                        if (parts[i] == "")
                        {
                            rejectFound = false;
                        }
                        if (!rejectFound)
                        {
                            continue;
                        }
                        if (parts.Length == 0)
                        {
                            continue;
                        }

                        var rejectLine = new RejectLine();
                        reject.Lines.Add(rejectLine);
                        var parts2 = parts[i].Trim().Split('|');
                        rejectLine.Product = parts2[1].Trim();
                        rejectLine.Ordered = NullableConvert.ToUInt32(parts2[2].Trim());
                        var rejected = NullableConvert.ToUInt32(parts2[4].Trim());
                        rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                    }
                }
            }
        }