Как получить дополнительную строку заголовка при чтении файла CSV? - PullRequest
0 голосов
/ 17 мая 2019

Мне нужно импортировать файл CSV, который может иметь или не иметь запись заголовка.

Если я читаю файл, который не имеет строки заголовка, он предполагает, что первая строка данных является заголовком и нене вернуть его.Если я укажу HasHeaderRecord = false, то при возникновении записи заголовка возникнет исключение.

Есть ли способ использовать библиотеку CsvHelper и иметь дополнительную запись заголовка?

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

csvReader.Configuration.HasHeaderRecord = false;

while (csvReader.Read())
{
    try
    {
        var record = csvReader.GetRecord<MyModel>();
        myRecordList.Add(record);
    }
    catch (ReaderException rex)
    {
        // Check if this is an error with no header record and ignore
        if (rex.ReadingContext.CurrentIndex == 1 &&
            rex.ReadingContext.RawRecord.ToLower().Contains("myHeaderColumnName"))
        {
            continue;
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

Я не уверен, что это лучший способ, но он обходит выдачу исключения.

public static void Main(string[] args)
{
    using (var reader = new StreamReader("path\\to\\file.csv"))
    using (CsvReader csv = new CsvReader(reader))
    {
        csv.Read();
        csv.ReadHeader();

        if (!csv.Context.HeaderRecord.Contains("myHeaderColumnName"))
        {
            csv.Configuration.HasHeaderRecord = false;
            reader.BaseStream.Position = 0;
        }

        var records = csv.GetRecords<MyModel>().ToList();                        
    }
}
1 голос
/ 17 мая 2019

Я думаю, что нет встроенного способа узнать о csvReader.Есть два способа узнать:

  1. Информация "строка заголовка да / нет" предоставляется пользователем.
  2. Вы реализуете логику обнаружения самостоятельно, читая первые несколько строк ипроверьте несколько свойств.Например.тип содержимого в несколько столбцов.

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

...