2012-05-10 25 views
7

Mam słownik C# i chcę utworzyć z niego plik .csv. Na przykład mam tego słownika:Słownik C# do .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"); 

I chcę tego pliku .csv wyjście:

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

Jak mogę to zrobić?

+0

stoisk CSV dla "wartości rozdzielonych przecinkami". To, co tam masz, to wartości rozdzielone średnikami (co jest w porządku, to po prostu nie CSV). – Servy

+0

@Servy Wiem, że to głupie, ale we Francji CSV jest oddzielone; tak naprawdę nie jest to błąd od autora – Guillaume86

+0

@ Guillaume86 W plikach tekstowych jest wiele dilimitatorów, przecinki są wspólne, ale inni używają tabulatorów, spacji, potoków ('|'), średników, kresek, apostrofów i jestem pewni inni. Są to wszystkie pliki rozdzielane tekstem, ale nie wszystkie są plikami CSV, tylko pliki tekstowe rozdzielane przecinkami. Nie ma nic złego w półkolonie jako ograniczniku. – Servy

Odpowiedz

18

Może najłatwiej:

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

Będziesz musiał dodać using LINQ i używać przynajmniej .NET 3.5

+0

dziękuje, działa dobrze :) – user1387150

+0

To rozwiązanie zapisze klucz i wartość w tej samej komórce – Ateeq

8

Spróbuj następującą

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

Uwaga: To nie działa, jeśli klucz lub wartość elementy mogą zawierać ;. Jeśli tak, trzeba będzie dodać mechanizm ucieczki obsłużyć że

+0

To doda klucz i wartość w tej samej komórce, zmień; do, jak ten writer.WriteLine ("{0}, {1},", pair.Key, pair.Value); – Ateeq

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