Итак, я читал, что не должен писать свой собственный CSV-ридер/писатель, поэтому я пытался использовать библиотеку CsvHelper, установленную через nuget. CSV-файл представляет собой изображение с серой шкалой, при этом количество строк является высотой изображения и числом столбцов шириной. Я хотел бы прочитать значения row-wise в одном List<string>
или List<byte>
.Прочитайте все значения из CSV в список с помощью CsvHelper
код у меня до сих пор:
using CsvHelper;
public static List<string> ReadInCSV(string absolutePath)
{
IEnumerable<string> allValues;
using (TextReader fileReader = File.OpenText(absolutePath))
{
var csv = new CsvReader(fileReader);
csv.Configuration.HasHeaderRecord = false;
allValues = csv.GetRecords<string>
}
return allValues.ToList<string>();
}
Но allValues.ToList<string>()
бросает:
CsvConfigurationException был необработанным кодом пользователя
исключения типа «CsvHelper.Configuration .CsvConfigurationException 'произошел в CsvHelper.dll, но не был обработан в коде пользователя
Дополнительная информация: Типы, наследующие IEnumerable, не могут быть автоматически сопоставлены. Вы случайно вызвали GetRecord или WriteRecord, которые действуют на одну запись, вместо того, чтобы вызывать GetRecords или WriteRecords, которые действуют в списке записей?
GetRecords
, вероятно, ожидает мой собственный пользовательский класс, но я просто хочу, чтобы значения представляли собой некоторый примитивный тип или строку. Кроме того, я подозреваю, что вся строка преобразуется в одну строку, а не каждое значение является отдельной строкой.
Можете ли вы дать нам дополнительную информацию об исключении CsvConfiguration? Есть ли сообщение? – masinger
Вызов .ToLIst(), как это почти всегда ошибка. Оставайтесь с IEnumerable как можно дольше для лучшей производительности. –