在 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# 对象列表 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

CSV文件转换帮助类

你能推荐一个 Java 库来读取(并且可能写入)CSV 文件吗? [关闭]

在 C# 中将数据写入 CSV 文件

在c ++中写入csv文件失败[关闭]

在 c# 中有效地读取 .csv 文件? [关闭]

如何在 CSV 文件的一行中写入任意数量的列表元素?