2012-05-10 40 views
7

Tôi có từ điển C# và tôi muốn tạo tệp .csv từ đó. Ví dụ tôi có từ điển này:Từ điển C# đến .csv

Dictionary<string, string> data = new Dictionary<string, string>(); 
data.Add("0", "0.15646E3"); 
data.Add("1", "0.45655E2"); 
data.Add("2", "0.46466E1"); 
data.Add("3", "0.45615E0"); 

Và tôi muốn đầu ra này tập tin .csv:

0;0.15646E3; 
1;0.45655E2; 
2;0.46466E1; 
3;0.45615E0; 

Làm thế nào tôi có thể làm điều này?

+0

đứng CSV cho "giá trị được phân tách bằng dấu phẩy". Những gì bạn có ở đó là các giá trị được phân cách bằng dấu chấm phẩy (đó là tốt, nó chỉ không phải là CSV). – Servy

+0

@Servy Tôi biết nó ngu ngốc nhưng ở Pháp CSV được phân cách bởi; Vì vậy, nó không thực sự là một lỗi từ tác giả – Guillaume86

+0

@ Guillaume86 Có rất nhiều chất pha loãng được sử dụng trong các tệp văn bản, dấu phẩy là phổ biến, nhưng những người khác sử dụng tab, dấu cách, đường ống ('|'), dấu chấm phẩy, dấu gạch ngang, dấu nháy đơn và chắc chắn những người khác. Chúng là tất cả các tệp phân tách văn bản, nhưng chúng không phải là tất cả các tệp CSV, chỉ các tệp văn bản được phân cách bằng dấu phẩy mới là. Không có gì sai với một dấu chấm phẩy như một dấu phân cách. – Servy

Trả lời

18

Có lẽ đơn giản nhất:

String csv = String.Join(
    Environment.NewLine, 
    data.Select(d => d.Key + ";" + d.Value + ";") 
); 
System.IO.File.WriteAllText(pathToCsv, csv); 

Bạn sẽ cần phải thêm using LINQ và sử dụng ít nhất NET 3,5

+0

cảm ơn, hoạt động tốt :) – user1387150

+0

Giải pháp này sẽ viết khóa và giá trị trong cùng một ô – Ateeq

8

Hãy thử như sau

using (var writer = new StreamWriter(@"the\path\to\my.csv")) { 
    foreach (var pair in data) { 
    writer.WriteLine("{0};{1};", pair.Key, pair.Value); 
    } 
} 

Lưu ý: Điều này sẽ không làm việc nếu các yếu tố chính trị hoặc có thể chứa một ;. Nếu vậy bạn sẽ cần phải thêm một cơ chế để xử lý thoát mà

+0

Điều này sẽ thêm khóa và giá trị trong cùng một ô, thay đổi; đến, giống như writer.WriteLine ("{0}, {1},", pair.Key, pair.Value); – Ateeq

2
File.WriteAllLines(@"pathtocsv.csv", data.Select(x => x.Key + ";" + x.Value + ";")));