2012-05-10 30 views
7

Tengo C# Dictionary y quiero crear un archivo .csv a partir de él. Por ejemplo, tengo este diccionario:C# Dictionary to .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"); 

y quiero esta salida archivo .csv:

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

¿Cómo puedo hacer esto?

+0

gradas CSV para "valores separados por comas". Lo que tienes allí son los valores separados por punto y coma (lo cual está bien, simplemente no es CSV). – Servy

+0

@Servy Sé que es estúpido, pero en Francia CSV está separado por; entonces no es realmente un error del autor – Guillaume86

+0

@ Guillaume86 Hay muchos diluidores usados ​​en archivos de texto, las comas son comunes, pero otros usan pestañas, espacios, tuberías ('|'), puntos y comas, guiones, apóstrofes, y estoy seguro otros. Todos son archivos delimitados por texto, pero no son todos archivos CSV, solo son archivos de texto delimitados por comas. No hay nada malo con un punto y coma como delimitador. – Servy

Respuesta

18

Tal vez el más fácil:

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

Usted tendrá que añadir using LINQ y utilizar al menos .NET 3.5

+0

gracias, funciona bien :) – user1387150

+0

Esta solución escribirá la clave y el valor en la misma celda – Ateeq

8

intente lo siguiente

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

Nota: Esto dejará de funcionar si los elementos clave o valor puede contener un ;. Si es así, tendrá que añadir un mecanismo de escape para manejar esa

+0

Esto agregará la clave y el valor en la misma celda, cambie el; a, como este escritor.WriteLine ("{0}, {1},", pair.Key, pair.Value); – Ateeq

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