C# Как поймать пустые строки в файле CSV с помощью CSVReader?

Я использую С# 2005 и класс CSVreader, все работает хорошо, за исключением случаев, когда файл CSV содержит пустую строку в конце:

Пример:

1,2,3,4,5
2,3,5,6,7
,,,,

Мои ошибки программы, так как здесь нет значений, проблема в том, что не все столбцы содержат значение, поэтому 2 строки ниже будут действительными.

1,2,,4,5
2,,5,6,7

но пустая строка, содержащая ,,,, не будет. Последним препятствием является то, что я точно не знаю, сколько столбцов будет.

Как бы вы предложили мне проверить пустую строку?


person Community    schedule 26.01.2009    source источник


Ответы (4)


Этот конкретный CSVReader, похоже, хорошо обрабатывает отсутствующие поля:

Быстрая программа для чтения CSV

Вы можете обработать пустую строку, используя код, подобный этому, перед вызовом считывателя:

csv.MissingFieldAction = MissingFieldAction.ReplaceByNull;

или заменить пустой строкой:

csv.MissingFieldAction = MissingFieldAction.ReplaceByEmpty;

Затем вы можете проверить наличие пустой строки, перебирая ее после прочтения, и если какой-либо столбец не равен нулю, обработайте строку.

person Turnkey    schedule 26.01.2009

Прочитайте всю строку и работайте в обратном порядке.

person Mitch Wheat    schedule 26.01.2009

Способ, которым я сталкивался с подобной проблемой в прошлом, заключается в использовании считывателя между вашим считывателем CSV и фактическим потоком/строкой, из которой вы читаете. Используйте промежуточное звено, чтобы удалить мусор и проверить наличие дополнительных строк и т. д., чтобы предотвратить ужасную смерть считывателя на каком-то вводе, который является плохим.

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

person Spence    schedule 26.01.2009

Это был вопрос давным-давно, но вопрос все еще возник для меня. Если вы используете CSVHelper, доступный для .NET C# в NuGet(), вы можете использовать этот код, чтобы пропустить пустые места:

 SoupToNuts record; //class with same columns found in csv file
 List<SoupToNuts> SoupToNutsList = new List<SoupToNuts>(); 

 while (csv.Read())
 {
      if (!csv.IsRecordEmpty())
      {
          record = csv.GetRecord<SoupToNuts>();
          SoupToNutsList.Add(record);
      }
 }
person Brian    schedule 26.10.2015