在 CSV 文件中写入 C# 对象列表 [关闭]
Posted
技术标签:
【中文标题】在 CSV 文件中写入 C# 对象列表 [关闭]【英文标题】:Write C# Lists of objects in CSV file [closed] 【发布时间】:2011-10-30 04:46:25 【问题描述】:我有一个 C# 对象,它有 8 个大小为 200 的数组元素。我需要将这些数组打印到相应标签上的 CSV 文件中。数据可能包含 string、int 和 double。
例如:
时间 时间1 时间2 白天时间4 时间4 时间5 时间6 时间7 1 5 9 周一 7.0 8 9 5 不适用 2 3 3 . . 200 200 200 周日 200 200 200 200 200哎呀,time1 等是标签(标题)数据(8 个列表有 200 个元素)应该写在这些标签下。 感谢您的回复!
【问题讨论】:
你想让别人为你写程序吗? 请显示一些代码...什么不起作用?任何错误消息/异常? 您等的时候我们可以给您喝杯咖啡吗?顺便说一句,您要求的不是 csv。您的输出缺少逗号 只需要提取数据并将其打印为 CSV 的提示。我是否需要提取每个列表并为每个列表使用 FOR 循环来打印每列(标签)中的数据? @CharithJ,实际上,有两个人已经编写了程序。声望,简直太可取了。 :) 【参考方案1】:假设您的所有数据都不需要逗号转义,这应该会给您一个大致的思路:
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))));
【讨论】:
感谢您的回复。我可以将此方法用于 Text Writer 方法吗?我在使用文件时遇到了一些错误 @user:你为什么不试试告诉我? 我对 string.join 不太熟悉,对于您为文件和文本编写器方法提供的上述解决方案,我遇到了重载错误。请您帮我如何加入字符串并以 CSV 格式打印。谢谢 @user:string.Join
返回一个字符串。上面的代码将生成您需要输出到文件的整个字符串,这就是我使用File.WriteAllText
的原因。如果您有一个准备好编写的 TextWriter,只需调用 Write
方法并将上面的 string.Join
调用返回的字符串传递给它。我敢肯定,如果您将自己应用到问题上,您会解决的。【参考方案2】:
您可以编写一个通用函数来编写对象:
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"
【讨论】:
嗨,马特,感谢您的回复。我在用这种方法修改我的函数时发现了一些问题。我会尝试更多的选项并告诉我。 已将function
更改为 void
。谢谢你。节省了我一些时间。
好吧,你的方法不适用于大数字,例如 111254006420170506
将变为 111270196720170000
我到处搜索如何在 MVC 5 C# 项目中执行此操作。干得好,先生!!!
有什么方法可以将文件保存在内存中而不是写入磁盘?以上是关于在 CSV 文件中写入 C# 对象列表 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章