Exemplo n.º 1
0
        private void Initialize(string source)
        {
            if (!_fileService.Exists(source))
            {
                AddValidationError($"File '{source}' not found");
                return;
            }

            try
            {
                var csvContext = new CsvContext <object> {
                    Culture = Culture
                };

                _reader?.Dispose();
                _reader = _csvReaderService.CreateReader(source, csvContext);
            }
            catch (Exception ex)
            {
                Log.Error(ex, $"Failed to initialize reader for data source '{Source}'");

                _reader?.Dispose();
                _reader = null;

                AddValidationError($"Failed to initialize reader: '{ex.Message}'");
            }
        }
Exemplo n.º 2
0
        private void InjectCsv(string filePath, string fileName, IniParser.Model.SectionData sectionData)
        {
            //var fileWriter = File.OpenWrite(filePath + ".new");
            var          writer    = new StreamWriter(filePath + ".new", false, Encoding.Default);
            var          csvWriter = new CsvHelper.CsvWriter(writer);
            StreamReader reader    = new StreamReader(filePath, Encoding.Default);
            var          csvReader = new CsvHelper.CsvReader(reader);

            while (csvReader.Read())
            {
                if (csvReader.Row == 2)
                {
                    var headers = csvReader.FieldHeaders;
                    foreach (var item in headers)
                    {
                        csvWriter.WriteField(item);
                    }
                    csvWriter.NextRecord();
                }

                var ligne = csvReader.CurrentRecord;

                if (ligne != null)
                {
                    foreach (var sectionKey in sectionData.Keys)
                    {
                        int    valueIndex = ExtractCsvValueIndexFromString(sectionKey.KeyName);
                        string key        = ExtractKeyFromString(sectionKey.KeyName);

                        if (ligne.Length > valueIndex)
                        {
                            if (ligne.Any(k => k == key))
                            {
                                ligne[valueIndex] = sectionKey.Value.RemoveSurroundedQuotes().SanitizeQuotes().Trim();
                                if (this.RemoveSpecialsChars)
                                {
                                    ligne[valueIndex] = ligne[valueIndex].DeleteAccentAndSpecialsChar().RemoveDiacritics();
                                }
                            }
                        }
                    }

                    foreach (var item in ligne)
                    {
                        csvWriter.WriteField(item);
                    }
                    csvWriter.NextRecord();
                }
            }

            reader.Close();
            reader.Dispose();
            csvReader.Dispose();
            writer.Close();
            writer.Dispose();

            // replace old file
            File.Delete(filePath);
            File.Move(filePath + ".new", filePath);
        }
Exemplo n.º 3
0
 public void CloseReader()
 {
     if (csvReader == null)
     {
         return;
     }
     csvReader.Dispose();
     csvReader = null;
 }
Exemplo n.º 4
0
        // Read and export the list of tags from the selected CSV File
        public IList <string> readFile()
        {
            try
            {
                // Retrieve files in folder, if empty, terminate reader and return empty list
                showUserChoicesCsv();
                if (_fileList.Length == 0)
                {
                    return(_csvData);
                }

                using var streamReader = File.OpenText(getUserChoiceCsv());
                using var csvReader    = new CsvHelper.CsvReader(streamReader, CultureInfo.CurrentCulture);
                csvReader.Configuration.HasHeaderRecord  = true;
                csvReader.Configuration.ShouldSkipRecord = row => row[0].Contains("HDA_TAGS");

                while (csvReader.Read())
                {
                    for (int i = 0; csvReader.TryGetField(i, out string value); i++)
                    {
                        _csvData.Add(value);
                    }
                }
                csvReader.Dispose();
                streamReader.Close();
            }
            catch (FileNotFoundException e)
            {
                _logger.Error("File does not exist in the program directory...");
                _logger.Error(e.Message);
            }
            catch (ArgumentNullException e)
            {
                _logger.Error("File path not found in App.config");
                _logger.Error(e.Message);
            }
            catch (Exception e)
            {
                _logger.Error(e.Message);
            }
            return(_csvData);
        }
Exemplo n.º 5
0
 public void Dispose()
 {
     _csvHelperReader.Dispose();
 }
Exemplo n.º 6
0
 public override void Dispose()
 {
     _reader?.Dispose();
 }
Exemplo n.º 7
0
 public override void Dispose()
 {
     csvReader.Dispose();
     streamReader.Dispose();
 }
Exemplo n.º 8
0
 public void Dispose()
 {
     _reader?.Dispose();
 }
Exemplo n.º 9
0
    private void ProcessCsv(string fullPath)
    {
        CommonStatistic.Init();
        CommonStatistic.IsRun = true;

        var fieldMapping = new Dictionary<string, int>();

        using (var csv = new CsvHelper.CsvReader(new StreamReader(fullPath, Encoding.UTF8)))
        {
            csv.Configuration.Delimiter = ";";
            csv.Configuration.HasHeaderRecord = false;
            csv.Read();
            for (int i = 0; i < csv.CurrentRecord.Length; i++)
            {
                if (csv.CurrentRecord[i] == ProductFields.GetStringNameByEnum(ProductFields.Fields.None)) continue;
                if (!fieldMapping.ContainsKey(csv.CurrentRecord[i]))
                    fieldMapping.Add(csv.CurrentRecord[i], i);
            }
        }

        using (var csv = new CsvHelper.CsvReader(new StreamReader(fullPath, Encoding.UTF8)))
        {
            csv.Configuration.Delimiter = ";";
            csv.Configuration.HasHeaderRecord = true;

            while (csv.Read())
            {
                if (!CommonStatistic.IsRun)
                {
                    csv.Dispose();
                    FileHelpers.DeleteFile(fullPath);
                    return;
                }

                CommonStatistic.RowPosition++;
                try
                {
                    // Step by rows
                    var productInStrings = new Dictionary<ProductFields.Fields, string>();

                    string nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Sku);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        productInStrings.Add(ProductFields.Fields.Sku, SQLDataHelper.GetString(csv[fieldMapping[nameField]]));
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Name).Trim('*');
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        var name = SQLDataHelper.GetString(csv[fieldMapping[nameField]]);
                        if (!string.IsNullOrEmpty(name))
                        {
                            productInStrings.Add(ProductFields.Fields.Name, name);
                        }
                        else
                        {
                            Log(string.Format(Resource.Admin_ImportCsv_CanNotEmpty, ProductFields.GetDisplayNameByEnum(ProductFields.Fields.Name), CommonStatistic.RowPosition + 2), "InvalidData");
                            continue;
                        }
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Enabled).Trim('*');
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        string enabled = SQLDataHelper.GetString(csv[fieldMapping[nameField]]);
                        productInStrings.Add(ProductFields.Fields.Enabled, enabled);
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Discount);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        string discount = SQLDataHelper.GetString(csv[fieldMapping[nameField]]);
                        if (string.IsNullOrEmpty(discount))
                            discount = "0";
                        float tmp;
                        if (float.TryParse(discount, out  tmp))
                        {
                            productInStrings.Add(ProductFields.Fields.Discount, tmp.ToString());
                        }
                        else if (float.TryParse(discount, NumberStyles.Any, CultureInfo.InvariantCulture, out tmp))
                        {
                            productInStrings.Add(ProductFields.Fields.Discount, tmp.ToString());
                        }
                        else
                        {
                            Log(string.Format(Resource.Admin_ImportCsv_MustBeNumber, ProductFields.GetDisplayNameByEnum(ProductFields.Fields.Discount), CommonStatistic.RowPosition + 2), "InvalidData");
                            continue;
                        }
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Weight);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        string weight = SQLDataHelper.GetString(csv[fieldMapping[nameField]]);
                        if (string.IsNullOrEmpty(weight))
                            weight = "0";
                        float tmp;
                        if (float.TryParse(weight, out  tmp))
                        {
                            productInStrings.Add(ProductFields.Fields.Weight, tmp.ToString());
                        }
                        else if (float.TryParse(weight, NumberStyles.Any, CultureInfo.InvariantCulture, out tmp))
                        {
                            productInStrings.Add(ProductFields.Fields.Weight, tmp.ToString());
                        }
                        else
                        {
                            Log(string.Format(Resource.Admin_ImportCsv_MustBeNumber, ProductFields.GetDisplayNameByEnum(ProductFields.Fields.Weight), CommonStatistic.RowPosition + 2), "InvalidData");
                            continue;
                        }
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Size);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        productInStrings.Add(ProductFields.Fields.Size, SQLDataHelper.GetString(csv[fieldMapping[nameField]]));
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.BriefDescription);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        productInStrings.Add(ProductFields.Fields.BriefDescription, SQLDataHelper.GetString(csv[fieldMapping[nameField]]));
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Description);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        productInStrings.Add(ProductFields.Fields.Description, SQLDataHelper.GetString(csv[fieldMapping[nameField]]));
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.MultiOffer);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        var multiOffer = SQLDataHelper.GetString(csv[fieldMapping[nameField]]);
                        if (!string.IsNullOrEmpty(multiOffer))
                        {
                            productInStrings.Add(ProductFields.Fields.MultiOffer, multiOffer);
                        }
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Price).Trim('*');
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        string price = SQLDataHelper.GetString(csv[fieldMapping[nameField]]);
                        if (string.IsNullOrEmpty(price))
                            price = "0";
                        float tmp;
                        if (float.TryParse(price, out  tmp))
                        {
                            productInStrings.Add(ProductFields.Fields.Price, tmp.ToString());
                        }
                        else if (float.TryParse(price, NumberStyles.Any, CultureInfo.InvariantCulture, out tmp))
                        {
                            productInStrings.Add(ProductFields.Fields.Price, tmp.ToString());
                        }
                        else
                        {
                            Log(string.Format(Resource.Admin_ImportCsv_MustBeNumber, ProductFields.GetDisplayNameByEnum(ProductFields.Fields.Price), CommonStatistic.RowPosition + 2), "InvalidData");
                            continue;
                        }
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.PurchasePrice);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        string sypplyprice = SQLDataHelper.GetString(csv[fieldMapping[nameField]]);
                        if (string.IsNullOrEmpty(sypplyprice))
                            sypplyprice = "0";
                        float tmp;
                        if (float.TryParse(sypplyprice, out  tmp))
                        {
                            productInStrings.Add(ProductFields.Fields.PurchasePrice, tmp.ToString());
                        }
                        else if (float.TryParse(sypplyprice, NumberStyles.Any, CultureInfo.InvariantCulture, out tmp))
                        {
                            productInStrings.Add(ProductFields.Fields.PurchasePrice, tmp.ToString());
                        }
                        else
                        {
                            Log(string.Format(Resource.Admin_ImportCsv_MustBeNumber, ProductFields.GetDisplayNameByEnum(ProductFields.Fields.PurchasePrice), CommonStatistic.RowPosition + 2), "InvalidData");
                            continue;
                        }
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.ShippingPrice);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        string shippingPrice = SQLDataHelper.GetString(csv[fieldMapping[nameField]]);
                        if (string.IsNullOrEmpty(shippingPrice))
                            shippingPrice = "0";
                        float tmp;
                        if (float.TryParse(shippingPrice, out  tmp))
                        {
                            productInStrings.Add(ProductFields.Fields.ShippingPrice, tmp.ToString());
                        }
                        else if (float.TryParse(shippingPrice, NumberStyles.Any, CultureInfo.InvariantCulture, out tmp))
                        {
                            productInStrings.Add(ProductFields.Fields.ShippingPrice, tmp.ToString());
                        }
                        else
                        {
                            Log(string.Format(Resource.Admin_ImportCsv_MustBeNumber, ProductFields.GetDisplayNameByEnum(ProductFields.Fields.ShippingPrice), CommonStatistic.RowPosition + 2), "InvalidData");
                            continue;
                        }
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Amount);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        string amount = SQLDataHelper.GetString(csv[fieldMapping[nameField]]);
                        if (string.IsNullOrEmpty(amount))
                            amount = "0";
                        int tmp;
                        if (int.TryParse(amount, out  tmp))
                        {
                            productInStrings.Add(ProductFields.Fields.Amount, amount);
                        }
                        else
                        {
                            Log(string.Format(Resource.Admin_ImportCsv_MustBeNumber, ProductFields.GetDisplayNameByEnum(ProductFields.Fields.Amount), CommonStatistic.RowPosition + 2), "InvalidData");
                            continue;
                        }
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Unit);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        productInStrings.Add(ProductFields.Fields.Unit, SQLDataHelper.GetString(csv[fieldMapping[nameField]]));
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.ParamSynonym);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        string rewurl = SQLDataHelper.GetString(csv[fieldMapping[nameField]]);
                        productInStrings.Add(ProductFields.Fields.ParamSynonym, rewurl);
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Title);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        productInStrings.Add(ProductFields.Fields.Title, SQLDataHelper.GetString(csv[fieldMapping[nameField]]));
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.MetaKeywords);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        productInStrings.Add(ProductFields.Fields.MetaKeywords, SQLDataHelper.GetString(csv[fieldMapping[nameField]]));
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.MetaDescription);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        productInStrings.Add(ProductFields.Fields.MetaDescription, SQLDataHelper.GetString(csv[fieldMapping[nameField]]));
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Photos);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        productInStrings.Add(ProductFields.Fields.Photos, SQLDataHelper.GetString(csv[fieldMapping[nameField]]));
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Markers);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        productInStrings.Add(ProductFields.Fields.Markers, SQLDataHelper.GetString(csv[fieldMapping[nameField]]));
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Properties);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        productInStrings.Add(ProductFields.Fields.Properties, SQLDataHelper.GetString(csv[fieldMapping[nameField]]));
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Producer);
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        productInStrings.Add(ProductFields.Fields.Producer, SQLDataHelper.GetString(csv[fieldMapping[nameField]]));
                    }

                    nameField = ProductFields.GetStringNameByEnum(ProductFields.Fields.Category).Trim('*');
                    if (fieldMapping.ContainsKey(nameField))
                    {
                        var parentCategory = SQLDataHelper.GetString(csv[fieldMapping[nameField]]);
                        if (!string.IsNullOrEmpty(parentCategory))
                        {
                            productInStrings.Add(ProductFields.Fields.Category, parentCategory);
                        }
                    }

                    ImportProduct.UpdateInsertProduct(productInStrings);

                }
                catch (Exception ex)
                {
                    Log(ex.Message, "InvalidData");
                }
            }
            CategoryService.RecalculateProductsCountManual();
        }
        CommonStatistic.IsRun = false;
        FileHelpers.DeleteFile(fullPath);
    }