我有一个C#对象有8个大小为200的数组元素。我需要将这些数组打印到相应标签上的CSV文件中。数据可能包含string,int和double。
例如:
time time1 time2 Day time4 time4 time5 time6 time7 1 5 9 Mon 7.0 8 9 5 NA 2 3 3 . . 200 200 200 Sun 200 200 200 200 200
哎呀,time1等是标签(Header)数据(8个列表有200个元素)应该在这些标签下写入。 感谢您的回复!
答案 0 :(得分:42)
您可以编写一个通用函数来编写对象:
public void WriteCSV<T>(IEnumerable<T> items, string path)
{
Type itemType = typeof(T);
var props = itemType.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.OrderBy(p => p.Name);
using (var writer = new StreamWriter(path))
{
writer.WriteLine(string.Join(", ", props.Select(p => p.Name)));
foreach (var item in items)
{
writer.WriteLine(string.Join(", ", props.Select(p => p.GetValue(item, null))));
}
}
}
用作:
var people = new List<Person> { new Person("Matt", "Abbott"), new Person("John Smith") };
WriteCSV(people, @"C:\people.csv");
哪个可能输出:
Forename, Surname
Matt", Abbott"
John", Smith"
答案 1 :(得分:4)
假设您的数据都不需要使用逗号转义,这应该会给您一个大致的想法:
string[][] myArray = // your data
string[] myHeaders = // your headers
File.WriteAllText("somefile.csv",
string.Join(Environment.NewLine,
new[]{myHeaders}.Concat(myArray)
.Select(line => string.Join(",", line))));