【问题标题】:Writing csv file from C# [duplicate]从 C# 编写 csv 文件 [重复]
【发布时间】:2016-11-28 16:48:01
【问题描述】:

我将我的插入文本文件代码为:

foreach (var kvauthor in _tauthorData)
{
   foreach (var coAuthor in kvauthor.Value.CoAuthors)
   {
      twObjClus.WriteLine("AuthorID: {0}, AuthorName: {1}, ClusterID: {2}, PaperID: {3},  
                           CoAuthors: {4}, PaperCategory: {5}, Venue: {6}, Year: {4}",  
                           eAuthor.AuthorID, eAuthor.AuthorName, curCluster.GetClusterID(),  
                           kvauthor.Key, coAuthor, kvauthor.Value.PaperCategory,  
                           kvauthor.Value.VenueID, kvauthor.Value.Year);

   }
}  

我想将所有这些数据插入到一个 csv 文件中,而我已经尝试过:

var csv = new StringBuilder();  

foreach (var kvauthor in _tauthorData)
{
   foreach (var coAuthor in kvauthor.Value.CoAuthors)
   {
      csv.AppendFormat("{0},{1},{2},{3},{4},{5},{6}",AuthorID: {0}, AuthorName: {1}, ClusterID: {2}, PaperID: {3},  
                           CoAuthors: {4}, PaperCategory: {5}, Venue: {6}, Year: {4}",  
                           eAuthor.AuthorID, eAuthor.AuthorName, curCluster.GetClusterID(),  
                           kvauthor.Key, coAuthor, kvauthor.Value.PaperCategory,  
                           kvauthor.Value.VenueID, kvauthor.Value.Year);

   }
}  

如何将这些数据逐行插入到带有列标题的 csv 文件中?

【问题讨论】:

  • 不是这样,我要写入的数据来自代码中的变量
  • 而我需要在顶部有列标题和 csv 格式的值
  • 试着说出你不能做什么。 Append line to file?或者您可能不知道 csv-file 是什么?也许问题是how to insert column headers
  • 我无法在 csv 顶部显示一次列标题
  • 那是easy。您必须创建文件(或StringBuilder)并在循环之外(之前)添加列标题行。然后在循环中,您只需将数据添加到相应的列中(通常使用索引)。

标签: c# file csv text


【解决方案1】:

添加列标题很简单,只需一次(在打开文件或创建例如StringBuilder 的实例时,稍后将用于添加行)。

var csv = new StringBuilder();  

// add column headers first
csv.AppendLine("AuthorID,AuthorName, ..."); // and so on

// add data
foreach (var kvauthor in _tauthorData)
    foreach (var coAuthor in kvauthor.Value.CoAuthors)
    {
        csv.AppendLine($"{coAuthor.AuthorId},{coAuthor.Name}, ..."); // and so on
        // if you don't have C# 6.0
        // csv.AppendFormat("{0},{1}, ... {N}", coAuthor.AuthorId, coAuthor.Name, ..., Environmental.NewLine");
    }

File.WriteAllText(path, csv.ToString());

注意:您可以使用AppendLine自动添加Environmental.NewLine,否则(如果使用AppendFormat)将其手动添加到string的末尾。

【讨论】:

  • 有一些错误,即 ) 预期
  • 我将其用作csv.AppendLine($"{eAuthor.AuthorID},{eAuthor.AuthorName},{curCluster.GetClusterID()},{kvauthor.Key},{coAuthor},{kvauthor.Value.PaperCategory},{kvauthor.Value.VenueID},{kvauthor.Value.Year}");,但出现错误,即) 预期
  • 还有意外的$ 符号
  • 如果您寻求调试帮助,请发布您的代码和确切的错误消息(当然是一个新问题)。我无法提供该评论行中提供的信息。如果您没有interpolated strings(需要C# 6.0),那么您必须使用string.Format() 或保持现在的AppendLine,但只需在末尾添加Environmental.NewLine(根据答案中的注释) .
  • 查看编辑。 C# 7.0 很快...
猜你喜欢
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
相关资源
最近更新 更多