2013-04-24 9 views
2

CSV 파일에 데이터를 쓰는 데 csvhelper를 사용하고 있습니다. C#과 VS2010을 사용하고 있습니다.csv 도우미를 사용하여 CSV 파일에 모음집을 작성하십시오.

Dictionary<long, List<HistoricalProfile>> profiles 
    = historicalDataGateway.GetAllProfiles(); 

var fileName = CSVFileName + ".csv"; 
CsvWriter writer = new CsvWriter(new StreamWriter(fileName)); 

foreach (var items in profiles.Values)  
{ 
    writer.WriteRecords(items); 
} 

writer.Dispose(); 

그것이 내가 할 두 번째 루프 : 내가 작성하고자하는 객체 내가 csv 파일에 데이터를 쓸 사용하고있는 코드 아래

유형 Dictionary< long,List<HistoricalProfile>>의 복잡한 데이터 유형의 객체이다 오류

헤더 레코드가 이미 기록되었습니다. 한 번 이상 쓸 수는 없습니다.

내가 여기서 잘못하고있는 것을 말해 줄 수 있습니까? 마지막 목표는 거대한 레코드 목록이있는 단일 CSV 파일을 만드는 것입니다.

미리 감사드립니다.

답변

-2

좀 더 낮은 수준을 가서 컬렉션을 반복 할 것 나 :

var fileName = CSVFileName + ".csv"; 

var writer = new StreamWriter(fileName); 



foreach (var items in profiles.Values) 
{ 
    writer.WriteLine(/*header goes here, if needed*/); 
    foreach(var item in items) 
    { 
     writer.WriteLine(item.property1 +"," +item.propery2...); 
    } 
} 
writer.Close(); 

루틴을 더욱 유용하게 사용하려면 리플렉션을 사용하여 작성하려는 속성 목록을 가져올 수 있습니다. 거기에서 당신의 기록을 만드십시오.

+2

나는 이것이 몇 년 전부터의 회신임을 알고 있지만, 일반적으로 누군가가 CSV 기록을 쓰지 말라고하는 것은 나쁜 충고라고 생각합니다. 필드의 쉼표와 같이 여기에 나오는 예에서 잊어 버리는 복잡성이 많이 있습니다. – Richard

+0

그것은 CSV 문자열입니다. 잘못된 직업에 도움이되는 도서관이 필요한 경우. –

+2

@JuannStrauss : 값에서 줄 바꿈, 따옴표 또는 쉼표를 이스케이프 처리합니까? –

2

당신은

그런 다음 코드는 단지 것이 매우 쉽게 읽기 및 쓰기 CSV 파일을 할 수이 라이브러리 http://www.filehelpers.net/을 본 적이

var profiles = historicalDataGateway.GetAllProfiles(); // should return a list of HistoricalProfile 
var engine = new FileHelperEngine<HistoricalProfile>(); 
// To Write Use: 
engine.WriteFile("FileOut.txt", res); 
+0

매우 큰 csv 파일과 사용자 정의 클래스에 대해 항상이 파일을 사용합니다. – jordanhill123

+0

@Daveo - 저를 용서해주십시오. 그러나 "HistoricalProfile의 목록을 반환해야합니다"는 의미는 OP가 자신의 개체를 변경해야한다고 제안한다는 의미입니다. 옵션이 아닙니다. 그의 복잡한 객체는 이미 목록을 포함하고 있으므로'engine.WriteFile ("FileOut.csv", profiles (counter));를 사용하여 각 목록을 작성하는 루프에 넣을 수 있습니다. 또한 나는 FileHelpers에 대해 아주 친숙하지는 않지만 클래스 (이 경우에는'HistoricalProfile')가'[DelimitedRecord (",")]'로 꾸밀 필요가 없습니까? –

+0

예, 귀하의 올바른, 그리고 수업을 장식해야합니다. 그러나 이것은 매우 간단한 변경입니다. – Daveo

관련 문제