Duplicar posible:
Writing a CSV file in .net¿Buen escritor CSV para C#?
¿Hay buenos escritores CSV para C#?
No necesita un lector, solo un escritor.
Duplicar posible:
Writing a CSV file in .net¿Buen escritor CSV para C#?
¿Hay buenos escritores CSV para C#?
No necesita un lector, solo un escritor.
No hay mucho a ella, de verdad ... aquí hay un código que he usado durante varios años:
public static class Csv
{
public static string Escape(string s)
{
if (s.Contains(QUOTE))
s = s.Replace(QUOTE, ESCAPED_QUOTE);
if (s.IndexOfAny(CHARACTERS_THAT_MUST_BE_QUOTED) > -1)
s = QUOTE + s + QUOTE;
return s;
}
public static string Unescape(string s)
{
if (s.StartsWith(QUOTE) && s.EndsWith(QUOTE))
{
s = s.Substring(1, s.Length - 2);
if (s.Contains(ESCAPED_QUOTE))
s = s.Replace(ESCAPED_QUOTE, QUOTE);
}
return s;
}
private const string QUOTE = "\"";
private const string ESCAPED_QUOTE = "\"\"";
private static char[] CHARACTERS_THAT_MUST_BE_QUOTED = { ',', '"', '\n' };
}
Se puede utilizar el método de escape para asegurar que los valores estén debidamente citados. Yo uso esta clase en conjunto con un simple lector, pero dije que no es necesario que ...
actualización Es muy sencillo, pero hay más a él que string.Join
. Sin embargo, todavía puede salirse con algo bastante simple, si usted tiene una serie de values
(y está usando C# 3 +):
string.Join(",", values.Select(Csv.Escape));
La escritura es bastante trivial, pero las bibliotecas pueden hacer muchas cosas buenas para tú. Como escribir objetos personalizados.
Aquí hay un ejemplo de CsvHelper (una biblioteca que mantengo) escribiendo objetos.
// Custom object.
public class MyCustomObject
{
public string StringProperty { get; set; }
public int IntProperty { get; set; }
}
// Writing the CSV file.
var myCustomObjectList = new List<MyCustomObject>
{
new MyCustomObject { StringProperty = "one", IntProperty = 1 },
new MyCustomObject { StringProperty = "two", IntProperty = 2 }
};
var csv = new CsvHelper(File.OpenWrite("some-file.csv"));
csv.Writer.WriteRecords(myCustomObjectList);
De manera predeterminada, las convenciones se utilizan para escribir los encabezados. Esto es todo configurable.
// Output:
StringProperty,IntProperty
one,1
two,2
cosas buenas. Me alegro de que sea fácilmente inyectable y burlable también. – Ian1971
Gran biblioteca, hizo construir un csv desde un objeto tan simple. Sin embargo, recomendaría 'usar' para operaciones IO. Un buen ejemplo de uso encontrado [aquí] (https://stackoverflow.com/a/38088636/692942). – Lankymart
http://stackoverflow.com/questions/1941392/are-there-any-csv-readers-writer-libs-in-c específicamente, este comentario: http://stackoverflow.com/questions/ 1941392/are-there-any-csv-readers-writer-libs-in-c/2094885 # 2094885 – CanSpice
lo siento mal. comentario eliminado – Simon