읽고 수정하고 다시 쓰고 싶은 커다란 csv 파일이 있다고 가정합니다. 아마도 필드 구분 기호를 쉼표에서 탭으로 변경하려고합니다. 아마도 인용 부호 문자를 '에서'로 변경하려고합니다. 또는 첫 번째 열의 각 값에 더하기 기호를 추가하고 싶을 수 있습니다. 파일 크기가 커서 메모리에 한 번에로드하지 않으려 고합니다. 나는 그것이 기록에 의해 기록 읽고 싶은csv 파일 변경, 동적 매핑으로 읽기 및 쓰기
를 그래서 나는이 같은 코드 쓰기 :., 그
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?
참고 :
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);
}
}
}
이 다음과 같은 오류와 런타임에 실패합니다 재미있는 일은 UpdateRecord
에서 일어난다. 실제로 위의이 줄은 완전히 주석 처리 될 수있다. 티.
GetRecord
은 ExpandoObject
을 반환하고이 개체에 WriteRecord
초크를 반환합니다.
이 방법을 만드는 가장 좋은 방법은 무엇입니까?
업데이트 그냥은 분명 그렇게 : 나는 완전히 내가 CSVHelper이 WriteRecord
통화 ExpandoObject
의를 지원하지 않기 때문에이 오류가 받고 있어요 실현. 이 작업을 수행하는 가장 쉬운 방법은 제안을 찾고 있습니다.
이 오류는 단수 대신 GetRecords (복수형)를 사용한다는 것을 알려줍니다. 나는 그것이 그것을 암시하고있는 것을 의미한다. 너 그거 해봤 니? – CodingYoshi
@ 코딩 요시, 아니, 그게 내가 원하는 건 아니야. –
Mar L 's answer [여기] (http://stackoverflow.com/questions/33294738/read-all-values-from-csv-into-a-list-using-csvhelper)에서 도움이되는지 확인하십시오. – CodingYoshi