【问题标题】:writing two lines in a csv file at the same time同时在一个csv文件中写入两行
【发布时间】:2014-07-23 08:38:01
【问题描述】:

我有 7 个文本框,我想将它们的值写入 csv 文件。另外,我想为这些信息写一个标签。最终的 csv 文件应如下所示:

label1----label2----label3----label7

value1----value2----value3----value7

这是我的代码:

public void CreatingCsvFiles()
        {
            string filePath = "C:\\Users\\User\\Desktop\\project2\\" + "filename.csv";
            if (!File.Exists(filePath))
            {
                File.Create(filePath).Close();
            }
            string delimiter = ",";
            string[][] output = new string[][]{
                new string[]{this.labels}
            };
            int length = output.GetLength(0);
            StringBuilder sb = new StringBuilder();
            for (int index = 0; index < length; index++)
                sb.AppendLine(string.Join(delimiter, output[index]));
            File.AppendAllText(filePath, sb.ToString());
        }

如你所见,我使用了new string[] {this.labels} 其中 this.labels 是 csv 格式 字符串。

一切正常,但问题是我不知道谁将this.values 写入同一个 csv 文件。

其中this.valuescsv 格式 字符串。

【问题讨论】:

  • 嗯?当然,您只是在进入循环之前写下标签... p.s.尝试使用 StyleCop
  • 不确定为什么要使用输出数组。您可以将this.labelsthis.values 一个接一个地直接添加到StringBuilder 中吗?或者甚至直接将它们写入文件,而不使用 StringBuilder?
  • Pau:我试图创建一个循环,但只是打印在 csv 文件上的最后一个值
  • Mike:我不知道 StringBuilder 是做什么用的,我在 Internet 页面上找到了该代码。如果您知道更好的解决方案,请告诉我。谢谢
  • 正在输入与 Mike 类似的评论。如果 this.labels 已经是一个字符串数组(这是真的吗?),那么您不需要创建一个新的输出字符串数组。直接用就行了。此外,您不需要为附加/检查现有文件执行任何复杂的逻辑。只需致电File.Open(filePath, FileMode.Append)。如果文件存在,这将自动附加,如果不存在,则创建一个新文件。不要像在您的代码中那样立即关闭文件。使用来自File.Open 的返回值写入您的文件。

标签: c# csv


【解决方案1】:

File.AppendAllText 之前添加sb.AppendLine(this.values)

注意您所做的是在 StringBuilder 对象中创建文本行,然后将它们一次全部写入文件,另一种常见的替代方法是单独写入每一行。

如果您既需要显示它又需要编写它,StringBuilder 方法可能很有用,但如果您开始处理大量文本,请小心,因为 StringBuilder 对象也会增长。

要逐行编写,那么以下内容应该可以帮助您入门:

using(StreamWriter sw = new StreamWriter(@"C:\temp\csvfile.csv",true))
            {
                sw.WriteLine("HEADER");
                sw.WriteLine("======");
                sw.WriteLine("1,2,3,4");
            }

【讨论】:

  • 请注意,StreamWriter 构造函数的true 参数将导致它附加到现有文件,这将导致多个标题行。使用false 替换任何现有文件的全部内容。
【解决方案2】:

如果 this.labelsthis.values已经是 csv 格式的字符串,那么您可以简单地将它们添加到文件中:

using (StreamWriter w = File.AppendText("filename.csv"))
{
  w.WriteLine(this.labels);
  w.WriteLine(this.values);
}

【讨论】:

    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2011-03-09
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多