【问题标题】:Problem in CSV file : Delimiter and column title declarationCSV 文件中的问题:分隔符和列标题声明
【发布时间】:2019-01-31 09:44:13
【问题描述】:

我在我的代码中打开一个 .csv 文件,我希望给出我选择的分隔符并定义列(标题名称)。我需要知道如何定义它们。我使用以下方式来生成我的文件:

fnresultfile = new StreamWriter("Resultfile_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".csv", true); //Filename

fnresultfile.WriteLine("Data recorded on date : " + DateTime.Now);  
fnresultfile.WriteLine("The parameters of this Test Sequence were set to :");
fnresultfile.WriteLine("X =" + Xactual + ",Y =" + Yactual + ",Z =" + Zactual);
fnresultfile.WriteLine("Key Orientation = " + Key_OrientationBox.Text);

fnresultfile.Close();

【问题讨论】:

  • 你写的有一个问题 - 它是什么?
  • 文件的格式似乎不是 CSV(逗号分隔值),而是 name = value
  • 请问您需要什么文件格式?
  • 我写的方式和我在论坛上看到的不一样。但这也会生成一个 csv 文件,但我不知道如何给出分隔符和列标题。
  • 使用数据构建列标题的方式与使用 csv 的方式不同。一个 csv 像一张桌子一样建立起来,请参阅下面的答案。

标签: c# csv


【解决方案1】:

CSV 文件只是一个文本文件。 根据约定/协议,它将数据保存在带有记录的行中,这些记录由逗号(','或';')分隔。有或没有标题(标题)。

因此,您可以像在示例中添加数据一样添加列标题。 分隔符也可以作为变量添加,就像添加数据一样。

不确定您的示例是否正在编写列标题。 如果是这样,下面有一个例子。例如,您可以更改字符串数组以首先使用 StringBuilder 构建数据。

using System;
using System.IO;

// Based on an example from Microsoft: https://docs.microsoft.com/en-us/dotnet/standard/io/how-to-write-text-to-a-file
class Program
{
    static void Main(string[] args)
    {
        string delimitor = ",";

        // Create a string array with the lines of text
        string[] lines = 
        { 
           $"data record 1,data record 2,data record 3,data record 4", // First data line
           $"data record 1,data record 2,data record 3,data record 4", // Second data line
           $"data record 1,data record 2,data record 3,data record 4"  // Third data line
        };

        var filename = "Resultfile_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".csv"

        // Set a variable to the Documents path.
        string docPath =
            Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

        // Write the string array to a new file named "WriteLines.txt".
        using (StreamWriter outputFile = new StreamWriter(Path.Combine(docPath, filename)))
        {
            foreach (string line in lines)
                outputFile.WriteLine(line);
        }
    }
}

结果是:

Data recorded on date,The parameters of this Test Sequence were set to,X,Key Orientation
data record 1,data record 2,data record 3,data record 4
data record 1,data record 2,data record 3,data record 4
data record 1,data record 2,data record 3,data record 4

【讨论】:

    【解决方案2】:

    使用 string.Join() 方法:

               string[] line = { 
                                    "Data recorded on date : " + DateTime.Now, 
                                    "The parameters of this Test Sequence were set to :",
                                    "X =" + Xactual + ",Y =" + Yactual + ",Z =" + Zactual,
                                    "Key Orientation = " + Key_OrientationBox.Text,
                                };
                string separator = ",";
    
                fnresultfile.WriteLine(string.Join(separator,line));
                fnresultfile.Close();
    

    【讨论】:

    • 这只是重新格式化 OP 发布的内容,并没有回答问题(公平地说,OP 实际上并没有提出问题。)
    • 问题是:“给出我选择的分隔符”
    • 我认为 OP 是在谈论 "X =" + Xactual + ",Y =" + Yactual + ",Z =" + Zactual 中的逗号/分隔符,但也说这不是 CSV。
    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 2015-01-06
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多