导表工具

时间:2014-04-30 01:08:47   收藏:0   阅读:455

确认怎么写导表工具需要先确定开发环境,数据存储结构.

假设采用的数据载体是csv

如果没有编译成本比如python这样的脚本语言,做法很简单:(假设使用的是python)

  1.解析svn文件,读到内存中来叫做sheet_map

  2.通过读出来的sheet_map写成python代码

  3.写一些通用的读数据函数

  细节:

    目录结构:

      tool

        csv----------用于存放csv文件

        tplfile-------用于存放模板文件

        midfile------用于存放中间文件

        outfile------用于存放最终文件

    

      csv文件不用说就是策划填写的数据表格

      tplfile是模板,主要是策划数据表和数据类型的映射关系

        比如 tpl = {

          "编号":("id", TO_INT, ),

          "名字":("name", TO_STR, ),

          "职业":("sch", TO_INT, ),

          }

      midfile是中间文件,也就是上面说的sheet_map,是从csv中读出来的数据,这里可以把所有的数据都存成string,这一步不需要考虑数据类型

        比如 sheet_map = {

          1:("name":"test",  "sch":"1", ),

          }

      outfile是最终的文件通过模板解析sheet_map,最终写的py文件,有了sheet_map和tpl就可以很轻松的分析出来name的类型是string,sch的类型是int

        data = {

          1:("name":"test", "sch":1),

        }

如果有编译成本,比如C++

  1.工具依然选择用python写,解析svn,load到内存一个sheet_map

  2.因为是c++所以不能直接使用sheet_map,这是要写成文件,提供给C++使用,假设叫做data_table

  3.读data_table和tpl文件分析每个数据的类型写成头文件

    比如

      xxx.h

bubuko.com,布布扣
1 struct xxx{
2     std::string name; // 名字
3     int sch; // 职业
4 };
5 
6 typedef std::map<int, xxx> xxx_pool;
7 
8 bool load_xxx();
bubuko.com,布布扣

 

      这里一定不要赋值,不然表格少做修改,而带来的编译代价是很大的,所以写一个load的函数

   4.通过头文件和tpl写源文件

    比如

bubuko.com,布布扣
    static xxx_pool s_xxx;
        bool load_xxx()
    {
        auto table = openTable("midfile/xxx.data");
        if ( !table )
            return false;

        for ( auto iter : (*table) )
        {
            xxx v;

            int key;
            (*iter) >> key;

            parse_data(v.name, "name", iter); // 名字
            parse_data(v.sch, "sch", iter); // 职业

            s_xxx[key] = v;

        }

        return true;
    }
bubuko.com,布布扣

   5. cpp中包含一个common.h,这个文件不是生成的,是本地存在的一些同用函数,用来实现openTable和parse_data

bubuko.com,布布扣
  
    template<typename T>
    void parse_data(T & v, const std::string & field, DataTablePtr value);
    void parse_data(int & prev, const std::string & field, DataTablePtr value);
    DataTablePtr openTable(const std::string & filename);
bubuko.com,布布扣

 

over

导表工具,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!