【发布时间】:2010-07-13 17:07:56
【问题描述】:
如何回到 csv 文件的开头并添加行?
(我正在使用 fprintf() 从 C 打印到 CSV 文件。在打印数千行(5 列)数据的最后,我想回到文件顶部并插入一些动态标头数据(基于打印所有内容的方式)。)
谢谢。
【问题讨论】:
如何回到 csv 文件的开头并添加行?
(我正在使用 fprintf() 从 C 打印到 CSV 文件。在打印数千行(5 列)数据的最后,我想回到文件顶部并插入一些动态标头数据(基于打印所有内容的方式)。)
谢谢。
【问题讨论】:
由于文件的结构方式,这或多或少是不可能的。为了完成你想要的:
或者您可以将 csv 数据保存在 ram 中,并在完成处理并知道标头后将其写入文件。
另一种选择是为标头留出一定数量的字节,这将以最小的空间成本更快地处理大文件。由于在写入开始时在文件中分配了空间,因此返回并填充它没有任何问题。以随机访问(“r +”)重新打开文件,默认情况下指向文件顶部,写标题,然后关闭。
【讨论】:
最简单的方法是将文件的全部内容简单地存储在内存中,直到完成,写出标题,然后写出文件的其余部分。
如果内存存在问题并且您无法将整个文件安全地存储在内存中,或者只是不想这样做,那么您可以将大量 CSV 数据写入一个临时文件,然后在完成后,将header写入主文件,循环复制临时文件中的数据到主文件中。
如果您想花点心思,在将主要 CSV 数据写入主文件后,您可以从头开始循环文件,将您将要用标题覆盖的数据读入内存,然后写入该数据顶部的标头等等,将每个块读入内存,用前一个块覆盖它,直到到达末尾并附加最后一个块。通过这种方式,您在开头“插入”数据,我将文件的其余部分向下移动。我真的不建议这样做,因为它只会增加复杂性而没有太多好处,除非有特定原因你不能做一些更简单的事情,比如使用临时文件。
【讨论】:
我认为这是不可能的。可能最简单的方法是将输出写入临时文件,然后创建您需要的数据作为动态标头,将它们写入目标文件并附加之前创建的临时文件。
【讨论】:
【讨论】: