Как использовать CSV Helper для чтения по строкам в с #?

Итак, это код, который я использую в настоящее время, но я не хочу специально создавать свой собственный ридер. Моя проблема в том, что я хочу прочитать полный файл csv построчно, но содержимое файла время от времени будет меняться, поэтому оно должно быть общим.

Это то, что я использую сейчас,

try
{
    var Lines = File.ReadAllLines(path);
    var csvRawData = from line in Lines select (line.Split(',')).ToArray();
    var csvData = csvRawData.ToList();
    return csvData;
}
catch (Exception ex)
{                
    MessageBox.Show(ex.Message);
    Logger.Log(ex.Message, true);
    return null;
}

Возвращаемый csvData имеет тип List. Затем я просто вручную отделяю от него контент.


person Kushagra Kasbi    schedule 17.10.2018    source источник
comment
Возможный дубликат - stackoverflow.com/questions/33294738/   -  person Robin Bennett    schedule 17.10.2018
comment
Взгляните на Linq To CSV.   -  person Cetin Basoz    schedule 17.10.2018


Ответы (2)


Вы говорите CsvHelper, но из вашего кода не похоже, что вы на самом деле его используете. Если вы его используете, вы можете использовать GetField методы для извлечения поля по имени заголовка индекса. Дополнительную информацию о том, как его использовать, см. В документации.
https://joshclose.github.io/CsvHelper/examples/reading/

person Josh Close    schedule 17.10.2018

Вот пример построчного чтения, где вторая строка имеет другой «тип», чем первая:

    using (StreamReader reader = new StreamReader(filePath))
    {
        using (CsvReader csv = new CsvReader(reader))
        {
            csv.Read();

            Type1 sample = new Type1();
            sample.Id = csv.GetField<int>(0);
            sample.Lines = csv.GetField<int>(1);

            csv.Read();

            Type2 sample2 = new Type2();
            sample2.Angle = csv.GetField<double>(0);
            sample2.Distance = csv.GetField<int>(1);
        }
    }
person Jahmic    schedule 02.11.2019