2012-05-10 13 views
7

Ho il dizionario C# e voglio creare un file .csv da esso. Per esempio io ho questo dizionario:C# Dizionario a .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"); 

E voglio questo output file .csv:

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

Come posso fare questo?

+0

stand CSV per "valori separati da virgole". Quello che hai sono valori separati da punti e virgola (che va bene, non è solo CSV). – Servy

+0

@Servy So che è stupido ma in Francia CSV è separato da; quindi non è proprio un errore dall'autore – Guillaume86

+0

@ Guillaume86 Ci sono molti dilimitatori usati nei file di testo, le virgole sono comuni, ma altri usano tabulazioni, spazi, pipe ('|'), semi-colon, trattini, apostrofi, e io sono certo gli altri Sono tutti file delimitati da testo, ma non sono tutti file CSV, solo i file di testo delimitati da virgola sono. Non c'è niente di sbagliato con un punto e virgola come delimitatore. – Servy

risposta

18

Forse il più semplice:

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

Avrai bisogno di aggiungere using LINQ e utilizzare almeno .NET 3.5

+0

grazie, funziona bene :) – user1387150

+0

Questa soluzione scriverà la chiave e il valore nella stessa cella – Ateeq

8

provare il seguente

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

Nota: Questo non funzionare affatto se gli elementi chiave o valore può contenere un ;. Se quindi sarà necessario aggiungere un meccanismo di fuga per gestire tale

+0

Questo aggiungerà la chiave e il valore nella stessa cella, cambierà il; a, come questo writer.WriteLine ("{0}, {1},", pair.Key, pair.Value); – Ateeq

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