导表工具

本文详细介绍了如何使用Python构建一个自动化工具,将CSV格式的数据表转换为Python代码。该过程涉及解析CSV文件、创建模板映射、中间文件处理以及最终生成可直接使用的Python代码。此外,对于有编译成本的情况,文章提供了针对C++的解决方案,包括使用Python作为工具,将数据加载到内存、保存到文件并进行后续解析。

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

假设采用的数据载体是csv

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

  1.解析csv文件,读到内存中来叫做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

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();

 

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

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

    比如

    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;
    }

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

  
    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);

 

over

转载于:https://www.cnblogs.com/iamkevin/p/3695784.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值