当前位置: 首页 > 知识库问答 >
问题:

用C语言将数据写入CSV文件#

苍烨然
2023-03-14

我正试图用C#语言逐行写入一个csv文件。这是我的功能

string first = reader[0].ToString();
string second=image.ToString();
string csv = string.Format("{0},{1}\n", first, second);
File.WriteAllText(filePath, csv);

整个函数在一个循环中运行,每一行都应该写入csv文件。在我的例子中,下一行覆盖现有行,最后,我在csv文件中只得到一条记录,这是最后一条。如何写入csv文件中的所有行?

共有3个答案

裘嘉木
2023-03-14

手工编写csv文件可能很困难,因为您的数据可能包含逗号和换行符。我建议你改用现有的图书馆。

这个问题提到了几个选项。

C#中是否有任何CSV阅读器/编写器库?

宫晟
2023-03-14

我强烈建议你走更乏味的路线。尤其是当你的文件很大的时候。

using(var w = new StreamWriter(path))
{
    for( /* your loop */)
    {
        var first = yourFnToGetFirst();
        var second = yourFnToGetSecond();
        var line = string.Format("{0},{1}", first, second);
        w.WriteLine(line);
        w.Flush();
    }
}

文件。AppendAllText()打开一个新文件,写入内容,然后关闭文件。打开文件比将数据写入开放流要耗费大量资源。在循环中打开/关闭文件会导致性能下降。

Johan建议的方法通过将所有输出存储在内存中,然后写入一次来解决这个问题。然而(在大文件的情况下),你的程序将消耗大量的内存,甚至崩溃与OutOfMemoryExc0019

我的解决方案的另一个优点是,可以通过在输入数据中保存当前位置来实现暂停\恢复。

upd。放在正确的地方

鞠边浩
2023-03-14

使现代化

在我还很幼稚的时候,我建议手动操作(这是一个简单问题的简单解决方案),但是由于这种方法越来越流行,我建议使用库CsvHelper来进行所有安全检查,等等。

CSV比问题/答案暗示的要复杂得多。

原始答案

因为你已经有了一个循环,考虑这样做:

//before your loop
    var csv = new StringBuilder();

//in your loop
    var first = reader[0].ToString();
    var second = image.ToString();
    //Suggestion made by KyleMit
    var newLine = string.Format("{0},{1}", first, second);
    csv.AppendLine(newLine);  

//after your loop
    File.WriteAllText(filePath, csv.ToString());

或者类似的东西。我的理由是:您不需要为每个项目都写入文件,只需打开流一次,然后再写入。

你可以替换

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

具有

File.AppendAllText(filePath, csv.ToString());

如果要将以前版本的csv保留在同一个文件中

C#6

如果您使用的是c#6.0,那么您可以执行以下操作

var newLine = $"{first},{second}"

编辑

下面是一个问题的链接,该问题解释了什么是环境。新行是这样的。

 类似资料:
  • 我在pandas中有一个数据帧,我想把它写到CSV文件中。我使用的是: 并得到错误: 有没有什么方法可以很容易地解决这个问题(例如,我的数据帧中有unicode字符)?还有,有没有一种方法可以使用“to-tab”方法(我认为不存在)写入以制表符分隔的文件,而不是CSV?

  • 我正在使用Spark 2.3,我需要将Spark数据帧保存到csv文件中,我正在寻找更好的方法。。查看相关/类似的问题,我发现了这个问题,但我需要一个更具体的: 如果DataFrame太大,如何避免使用Pandas?因为我使用了函数(下面的代码),它产生了: 内存不足错误(无法分配内存)。 使用文件I/O直接写入csv是更好的方法吗?它可以保留分隔符吗? 使用df。聚结(1)。写选项(“标题”、“

  • 我正在尝试将以下数据写入csv文件。这些数据是employdetails name1-surname1-place1 名称4-surname4-place4 我希望输出在CSV文件上,一个在另一个下面,在单独的行上。 我写了下面的代码 -KD

  • 问题内容: 嗨,我正在尝试使用python将csv文件写入SQL Server数据库中的表中。传递参数时遇到错误,但是手动进行操作时不会遇到任何错误。这是我正在执行的代码。 错误:pyodbc.DataError :(“ 22001”,“ [22001] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]字符串或二进制数据将被截断。(8152)(SQLEx

  • 本文向大家介绍Python将列表数据写入文件(txt, csv,excel),包括了Python将列表数据写入文件(txt, csv,excel)的使用技巧和注意事项,需要的朋友参考一下 写入txt文件 写入csv文件 写入excel文件 以上所述是小编给大家介绍的Python将列表数据写入文件(txt, csv,excel)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回

  • 我在文本文件中插入的代码如下: 我想将所有这些数据插入到csv文件中,但我尝试了以下方法: 如何将此数据逐行插入到带有列标题的csv文件中?