Предположим, у меня есть большой файл csv, который я бы хотел прочитать, изменить и написать. Возможно, я хочу изменить разделитель полей с запятой на вкладку. Возможно, я хочу изменить символ котировки от «до». Может быть, я хочу добавить знак плюса к каждому значению в первом столбце. Поскольку файл большой, я не хочу загружать его в память сразу, Я хотел бы прочитать его запись записьюИзменение файла csv, чтение и запись с динамическим сопоставлением
Так я пишу такой код:.
var inPath = @"infile.txt";
var outPath = @"outfile.txt";
CsvConfiguration readCf = GetReadConfiguration();
CsvConfiguration writeCf = GetWriteConfiguration();
using (var streamin = new FileStream(inPath, FileMode.Open))
using (var streamReader = new StreamReader(streamin))
{
using (var csvReader = new CsvReader(streamReader, readCf))
using (var csvWriter = new CsvWriter(new StreamWriter(outPath), writeCf))
{
while (csvReader.Read())
{
var currentRecord = csvReader.GetRecord<dynamic>();
UpdateRecord(currentRecord);
csvWriter.WriteRecord(currentRecord);
}
}
}
Это терпит неудачу во время выполнения со следующей ошибкой:
Types that inherit IEnumerable cannot be auto mapped. Did you accidentally call GetRecord or WriteRecord which acts on a single record instead of calling GetRecords or WriteRecords which acts on a list of records?
Заметим, что ничего интересного не происходит в UpdateRecord
, на самом деле эта строка выше может быть полностью прокомментирована ou т.
Что происходит, так это то, что GetRecord
возвращает ExpandoObject
, а затем WriteRecord
дроссели на этом объекте.
Каков наилучший способ сделать эту работу?
Update Просто так ясно: я полностью понимаю, что я получаю эту ошибку, потому что CSVHelper не поддерживает ExpandoObject
с для WriteRecord
вызова. Я ищу предложения, чтобы облегчить эту работу.
Ошибка говорит вам использовать GetRecords (множественное число) вместо единственного числа. Я имею в виду, что это намекает. Вы попробовали это? – CodingYoshi
@CodingYoshi, нет, это не то, что мне нужно. –
Посмотрите на ответ Мар L [здесь] (http://stackoverflow.com/questions/33294738/read-all-values-from-csv-into-a-list-using-csvhelper) и посмотрите, поможет ли это вам. – CodingYoshi