用C++覆盖CSV文件中的一行

问题描述:

我正在用C++编写一个工资单程序,需要能够读取文件中的行,进行计算,然后覆盖文件中的读取行。是否有一个函数/方法,我可以简单地覆盖特定的行,插入新的行,添加到现有文件的末尾?用C++覆盖CSV文件中的一行

+1

由于您想读取和写入某些行,您应该考虑读取和写入文本文件。在std库中的fstream处理一个gander。 http://www.cplusplus.com/doc/tutorial/files/ –

+0

这听起来像是一种可以用脚本语言解决的问题。这会是一个可行的选择吗? – Gnosophilon

+0

如果可能的话,我会建议您使用SQL数据库 – Lochemage

没有C++功能来在文本文件中“插入”或“删除”文本。要做到这一点的唯一方法是读取现有文本,并写出修改后的文本。

如果新文本与旧文件放在同一个空间中,您只需要覆盖现有文本 - 当然,您可以在.CSV文件中的逗号前/后添加额外的空格,没有它成为“领域”的一部分。但是如果新数据更长,肯定不会“覆盖到位”。

使用ios_base::ate修饰符添加到最后是相对容易的。但插入中间仍然涉及到基本阅读,直到找到相关位置,然后,如果新文本更长,则必须先阅读以下所有行,然后才能写出新的文本。

+0

所以如果我覆盖特定的行它需要是相同长度的字符?或者它需要是相同长度的字符串(包括值/逗号) – user2611318

+0

整行必须是完全相同的字符数,否则旧行中的某些“剩余”将保留在文件中(如果新行较短),或下一行(的一部分)将被覆盖(如果新行比旧行更长)。在典型情况下,我会将每行读入一个数组,然后修改该数组中的相关行[换句话说'std :: vector'],并将其重新写回。 [数组可能是每行一个字符串,或者每个元素类型的向量,它们是相同的,或者某种类型的结构 - 取决于您输入的内容...] –

+0

好的非常感谢,这有很大帮助。最后一个问题对我有很大帮助,可以根据我的程序中的行数创建数组吗? – user2611318