2013-04-24 68 views
2

我正在使用csvhelper將數據寫入csv文件。我正在使用C#和VS2010。我希望寫的對象類型Dictionary< long,List<HistoricalProfile>>使用csv helper將集合寫入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文件。

在此先感謝!

回答

-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(); 

如果你想使例程更有用,你可以使用反射來獲得你想寫出的屬性列表d從那裏構建你的記錄。

+2

我知道這是來自很多年前的答覆,但我認爲通常不好的建議是告訴某人自己編寫CSV記錄,而不需要圖書館。在你的例子中你忘記了很多複雜性,比如你的字段中的逗號。 – Richard 2016-04-24 09:46:34

+0

這是一個CSV字符串。如果你需要一個圖書館來幫助你,你就錯了。 – 2016-04-26 07:55:23

+2

@JuannStrauss:所以會在值中處理轉義換行符,引號或逗號? – 2016-04-26 09:20:41

2

你見過這個庫http://www.filehelpers.net/這使得它非常容易讀取和寫入CSV文件

那麼你的代碼也只是

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 2013-04-24 08:35:06

+0

@Daveo - 請原諒我,但您的評論「應該返回HistoricalProfile列表」意味着您建議OP必須更改其可能的對象不是一個選擇。他的複雜對象已經包含一個列表,所以他可以使用'engine.WriteFile(「FileOut.csv」,profiles(counter));'在循環中寫出每個列表。另外我並不完全熟悉FileHelpers,但是它不需要你的類(在這種情況下是'HistoricalProfile')被這樣裝飾'[DelimitedRecord(「,」)]'? – 2013-04-24 09:08:02

+0

是的你的正確,而且課堂確實需要裝飾。但這是一個非常簡單的改變 – Daveo 2013-04-24 13:20:03