如何将数据插入预先分配的CSV?

时间:2010-07-14 21:12:17

标签: c++ c file file-io

文本文件(或CSV)是:

Data:,,,,,\n  

(但有100“,”s)

在C或C ++中,我想打开文件,然后在“,”之间填写值 ie- Data:,1,2,3,4,\n

我猜我需要某种搜索来查找下一个逗号,插入数据,找到下一个逗号插入等。

我正在查看memchr()的缓冲区,并想知道文本文件是否有类似内容?

如果你能指出我正确的方向,我将不胜感激。

(我不介意读一本书来找到这样的东西,我只是不知道哪本书会有这些信息?)

谢谢。

4 个答案:

答案 0 :(得分:3)

你无法在C中实际执行此操作...如果在读/写模式下打开,您将覆盖字符,而不是插入字符。

http://c-faq.com/stdio/fupdate.html

您需要打开文件,将行读入内存,将新行写入临时文件。

插入完所有行后,将临时文件复制到原始文件上。我认为没有其他办法可以做到。

答案 1 :(得分:2)

(这是针对C ++的情况) 只需使用保存数据的对象将数据解析为链接列表,修改数据并覆盖文件。

首先需要将数据拆分为行(\ n创建新的链表元素):

Data:,,,,,\n
Data2:,,,,,\n

将获得字符串(伪列):

[“数据:,,,,,”,“数据2:,,,,,”]

所以现在你需要为每一行定义你的对象,如:

class LineStruct {
   public:
    string head;
    LinkedList<string> data;
};

并填写。

然后编辑数据结构,然后将其写回磁盘。

答案 2 :(得分:1)

如果你有

Data:,,,,,\n

那么之间没有空间,要填补,你必须写出全新的线条。

但是,如果你有

Data:   ,   ,   ,   ,   ,   \n

然后你可以只覆盖' '

代表的那些部分

在C中,你会寻找文件的一部分然后写下来然后寻找下一个pos,抱歉没有任何代码。

答案 3 :(得分:1)

这就是我要看的地方:

根据wmils answer的建议,您必须使用临时文件,或者在内存中保留所有新行,直到处理完所有行,然后覆盖原始文件。