Как прочитать файл csv без цитирования с помощью библиотеки CsvHelper? - PullRequest
1 голос
/ 06 августа 2020

Мне нужно прочитать содержимое файла csv с помощью библиотеки CsvHelper. Вот мой метод, отвечающий за чтение файла:

        public virtual async Task<ICollection<Shipment>> GetMaterialReleaseReceiptsAsync(string filePath)
        {
            var validShipmentData = new List<Shipment>();

            try
            {
                using var reader = new StreamReader(filePath);
                using var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture);

                csvReader.Configuration.Delimiter = ";";
                csvReader.Configuration.HeaderValidated = null;
                csvReader.Configuration.MissingFieldFound = null;

                var shipment = await csvReader
                    .GetRecordsAsync<ShipmentData>()
                    .Select(s => new Shipment
                        {
                            Issue = s.Issue,
                            MaterialReleaseReceipt = s.MaterialReleaseReceipt,
                            FileLocation = filePath
                        })
                    .ToListAsync();

                validShipmentData = SortOutShipmentData(shipment, filePath)
                    .ToList();
            }
            catch (Exception e)
            {
                var errorMessage = e.InnerException != null
                    ? $"{e.Message} {e.InnerException.Message}"
                    : e.Message;

                await EventBus
                    .PublishAsync(new FileProcessExceptionEvent
                    {
                        Description = errorMessage,
                        CreatedAt = DateTime.Now,
                        FileLocation = filePath
                    });
            }

            return validShipmentData;
        }

Пример строки моего файла csv выглядит так:

... "06/08/2020"; "ABCD"; " 1234 "...

Проблема в том, что некоторые файлы, импортированные в мой api, не содержат кавычек. Примерная строка, показанная ниже:

... 08.06.2020; ABCD; 1234 ...

Когда такой файл попадает в мое приложение, возникает исключение при попытке получить записи из файла. Цитированные файлы обрабатываются правильно. Исключение содержит следующее сообщение:

«Для типа '...' элементы не отображаются»

Конечно, столбцы, указанные в заголовке, соответствуют определению ShipmentData. Единственная проблема, которую я заметил, - это отсутствие кавычек вокруг ячеек. Я хотел бы переписать свой метод, чтобы иметь возможность получать записи из обоих типов csv. Как этого добиться с помощью библиотеки CsvHelper ?? Спасибо за любые ответы.

1 Ответ

0 голосов
/ 06 августа 2020

Возможно, вам придется использовать Read () и l oop по строкам, как описано в этой проблеме , примере в этом комментарии .

...