在应用程序中嵌入csv文件的最佳方法

时间:2018-07-13 07:56:16

标签: c++

我有一个程序,在启动时会读取csv文件。最初,我认为更改程序行为而不必重新编译它会很有用。但是,事实证明,对该文件进行更改需要部署该程序的新版本。

  • csv文件包含大量数字,这些数字内部存储为std::map<SomeId, std::vector<double/int>>,并可以通过double get(SomeId id, size_t idx)之类的函数进行访问
  • 非程序员定期查看和修改文件。他们使用Excel来做到这一点。因此,我想将该文件保留为程序的“源”。
  • 我仅将Windows用作操作系统。不需要其他平台。

现在,我考虑将文件的内容嵌入程序中。这是我考虑过的一些替代方法:

  • 将文件嵌入为文本资源,并使用LoadResource等获取std::string或类似内容,然后解析该文本并填充我的数据结构。
  • 编写一个简单的代码生成器来创建char const * const text = "<the content of the file>;,解析该文本并填充我的数据结构。
  • 编写一个更复杂的代码生成器来解析csv并直接初始化数据结构

    std::map<SomeId, std::vector<double>> initialize()
    {
      std::map<SomeId, std::vector<double>> data; 
      data[id1] = std::vector<double> { ... the numbers from the file ... };
      ...
      return data;
    }
    
  • 转储数据结构并直接生成get函数:

    std::array<double, N> const data1 { ... the numbers from the file ... };
    double get(SomeId id, size_t idx)
    {
      switch(id)
      {
        case id1 : return data1[idx];      
        case id2 : return data2[idx];
        ...
      }
    }
    

我应该使用哪种技术?我错过了什么吗?

0 个答案:

没有答案