【问题标题】:How do I insert data at the top of a CSV file?如何在 CSV 文件顶部插入数据?
【发布时间】:2010-07-13 17:07:56
【问题描述】:

如何回到 csv 文件的开头并添加行?

(我正在使用 fprintf() 从 C 打印到 CSV 文件。在打印数千行(5 列)数据的最后,我想回到文件顶部并插入一些动态标头数据(基于打印所有内容的方式)。)

谢谢。

【问题讨论】:

    标签: c file csv


    【解决方案1】:

    由于文件的结构方式,这或多或少是不可能的。为了完成你想要的:

    1. 将 csv 数据写入 file1
    2. 将标头写入file2
    3. 将file1的内容复制到file2
    4. 删除文件1

    或者您可以将 csv 数据保存在 ram 中,并在完成处理并知道标头后将其写入文件。

    另一种选择是为标头留出一定数量的字节,这将以最小的空间成本更快地处理大文件。由于在写入开始时在文件中分配了空间,因此返回并填充它没有任何问题。以随机访问(“r +”)重新打开文件,默认情况下指向文件顶部,写标题,然后关闭。

    【讨论】:

    • 貌似只有2个文件才能添加动态标头数据,谢谢。
    【解决方案2】:

    最简单的方法是将文件的全部内容简单地存储在内存中,直到完成,写出标题,然后写出文件的其余部分。

    如果内存存在问题并且您无法将整个文件安全地存储在内存中,或者只是不想这样做,那么您可以将大量 CSV 数据写入一个临时文件,然后在完成后,将header写入主文件,循环复制临时文件中的数据到主文件中。

    如果您想花点心思,在将主要 CSV 数据写入主文件后,您可以从头开始循环文件,将您将要用标题覆盖的数据读入内存,然后写入该数据顶部的标头等等,将每个块读入内存,用前一个块覆盖它,直到到达末尾并附加最后一个块。通过这种方式,您在开头“插入”数据,我将文件的其余部分向下移动。我真的不建议这样做,因为它只会增加复杂性而没有太多好处,除非有特定原因你不能做一些更简单的事情,比如使用临时文件。

    【讨论】:

      【解决方案3】:

      我认为这是不可能的。可能最简单的方法是将输出写入临时文件,然后创建您需要的数据作为动态标头,将它们写入目标文件并附加之前创建的临时文件。

      【讨论】:

        【解决方案4】:
        • 在第一行写足够的空格
        • 写入数据
        • 寻找(0)
        • 写入标题 - 最后一列将用空格填充

        【讨论】:

        • “在第一行写足够的空格” - 这是假设在一行上添加标题吗?
        • 不,您的标头将占用的实际字节数。这可以跨越任意多行。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-10
        • 2014-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多