删除两个特定字符之间的文本文件中的内容

时间:2014-03-14 09:33:54

标签: c++ visual-studio-2010

我正在制作一个简单的错误跟踪器并使用文本文件作为数据库。现在,我通过密钥读取所有信息并将它们导入特定的数组。

for (int i = 0; i < 5; i++)
{
    getline(bugDB, title[i], '@');
    getline(bugDB, importance[i], '!');
    getline(bugDB, type[i], '$');
    getline(bugDB, description[i], '*');
}

以下是我(非常难以理解的)文件中的内容

  

无法跳跃@温和!Bug $每当我进入厄运之洞时,我都无能为力   跳马。*马太贵了@中等!改善$马的成本方式   太多黄金,请降低成本。*启动时崩溃@严重!Bug $ I&#39; m   在我的Win8.1机器上启动崩溃,似乎是一个8.1   在* Imperial March @ Minimal的漂浮树!Bug $有一棵树   漂浮在地面附近约半英尺的地方   区域。*允许我们实施我们的团队@Smprate!改善$我们愿意   就像一个让我们能够独自与我们的团队一起玩的功能   在地牢里面。*

输出:output

这对我很有用,但我希望能够删除特定的错误。我可以通过让用户按编号选择错误,找到相应的*键,并删除所有信息直到程序到达下一个*键来完成此操作。

我很感激任何建议,我不知道从哪里开始。

2 个答案:

答案 0 :(得分:1)

没有直接机制从文件中间删除一些数据块,没有delete(file, start, end)功能。要执行此类删除,您必须移动显示在该区域之后的数据;要从文件中间删除10个字节,您必须将所有后续字节移回10,循环数据,然后截断以使文件缩小10个字节。

但是,在您的情况下,您已经编写了代码来将文件解析到内存中,填充数组。为什么不实现一个函数来将数组的内容写回文件?截断文件(在模式中打开&#34; w&#34;而不是&#34; w +&#34;),循环遍历将您的内容以您首选格式写回文件的数组,但跳过该条目你想删除。

答案 1 :(得分:0)

只能通过手动将数据从输入文件复制到输出文件并省略要删除的条目来实现。

但是:我强烈建议使用一些小型数据库来保存信息(查看sqlite)

如果解决错误意味着“从数据库中删除它”(它甚至不是跟踪器),它也是一个糟糕的错误跟踪器。给它一个状态字段(打开,拒绝,复制,修复,工作......)。

补充说明:

  1. 使用一个数组来保存一些具有n个信息的结构,而不是n个数组。
  2. 请提醒某人可能会在说明中使用您的分隔符(使用一些不常见的字符并替换其在保存文本中的用法)
  3. 解释1:
    而不是使用

    std::vector<std::string> title;
    std::vector<int> importance;
    std::vector<std::string> description;
    

    定义结构或类并创建此结构的向量。

    struct Bug{
      std::string title;
      int importance; // better define an enum for importance
      std::string description;
    };
    std::vector<Bug> bugs;