Exemple #1
0
// 解析excel文件
bool parse_excel(const std::string &excel, const enum_parse_option parse_option, cfgbase_t &cfgbase){
    if(false == filetool::exist(excel)){
        ECHO_ERR("错误: 找不到excel文件<%s>", excel.c_str());
        return false;
    }

    errvec_t errvec;
    if (!parser::parse_excel(excel, cfgbase, errvec, parse_option)){
        ECHO_ERR("错误:解析<%s>文件失败,请确保该文件存在且未被打开", excel.c_str());
        echotool::echo_errvec(errvec);
        return false;
    }

    return true;
}
Exemple #2
0
    char* get_whole_file_buf(const std::string &path)
    {
        if(false == exist(path)){
            return NULL;
        }

        /* 若要一个byte不漏地读入整个文件,只能采用二进制方式打开 */
        errno_t err;
        FILE *file = NULL;
        err = fopen_s(&file, path.c_str(), "rb" );  
        if (NULL == file || err > 0){
            ECHO_ERR("打开<%s>文件失败,错误号:%u", path.c_str(), err);
            return NULL;
        }  

        /* 获取文件大小 */  
        fseek (file , 0 , SEEK_END);  
        long size = ftell (file);  
        rewind (file);  

        /* 分配内存存储整个文件 */   
        char *buf = new char[size];  
        if (buf == NULL)        {  
            ECHO_ERR("载入<%s>文件失败,错误原因:分配<%ubyte>的内存失败", path.c_str(), size);
            return NULL;
        }  

        /* 将文件拷贝到buffer中 */  
        size_t ret = fread (buf, 1, size, file);  
        if (ret != size){  
            ECHO_ERR("载入<%s>文件失败,错误原因:文件读取大小不符<%u> != <%u>", path.c_str(), ret, size);
            return NULL;
        }  

        /* 现在整个文件已经在buffer中 */
        /* 关闭文件并释放内存 */
        fclose (file);
        return buf;
    }
Exemple #3
0
bool gen_xsds(string &excel, string &xsd_dir)
{
	if(false == fileuitl::exist(excel))
	{
		ECHO_ERR("´íÎó: %s ·¾¶²»´æÔÚ", excel.c_str());
		return false;
	}

	if(false == fileuitl::exist(xsd_dir))
	{
		ECHO_ERR("´íÎó: %s ·¾¶²»´æÔÚ", xsd_dir.c_str());
		return false;
	}

	propunit_t unit;
	errvec_t errvec;

    bool ok = parseutil::parse_excel(excel, unit, errvec);
    if (!ok){
        ECHO_ERR("´íÎó: %s ½âÎöÎļþʧ°Ü", xsd_dir.c_str());
        proputil::echo_errvec(errvec);
        return false;
    }
	
	// proputil::parse(excel, unit, errvec);

	for(propdeclvec_t::iterator itr = unit.propdecls.begin(); itr != unit.propdecls.end(); ++itr)
	{
		propdecl_t &decl = *itr;
		string xsd = xsd_dir + "\\" + strip_ext(strip_dir(decl.filename)) + ".xsd";

		gen_xsd(decl, xsd);
	}

	return true;
}
Exemple #4
0
    bool overwrite_file(const std::string &path, const std::string &new_text)
    {
        string old_text;
        get_whole_file_str(path, old_text);
        if (old_text == new_text){
            return true;
        }

        ofstream o(path);
        if (!o.good()){
            ECHO_ERR("无法生成文件,路径错误:<%s>", path.c_str());
            return false;
        }

        o << new_text;
        o.flush();
        o.close();

        return true;
    }
Exemple #5
0
int main(int argc, char **argv)
{
    if (argc < 2){
        ECHO_ERR("参数格式错误,格式应为:");
        ECHO_ERR("   excel文件的路径  命令1  命令1的参数  命令2  命令2的参数...");
        ECHO_ERR("   比如: e:/hello.xlsx  -xsd  ../xsd/  -saveasxml ../xml/");

        return 0;
    }

    std::string excel = argv[1]; // excel文件的路径
    cfgbase_t cfgbase;
    enum_parse_option parse_option = get_parse_option(argc, argv);

    // 解析excel文件,结果存放在 cfgbase 中
    if (!parse_excel(excel, parse_option, cfgbase)){
        return 0;
    }

    // 根据传入参数,开始执行命令
    int pos = 2;
    while(pos < argc){
        std::string cmd = argv[pos++];
        if(cmd == "-xsd"){
            if(pos + 1 > argc){
                ECHO_ERR("生成xsd的命令错误,格式应为: ");
                ECHO_ERR("   -xsd 生成的xsd文件放到哪个文件夹下");
                ECHO_ERR("   比如: -xsd  ../xsd/");

                return 0;
            }

            std::string xsd_dir  = argv[pos++];

            // 生成xsd文件
            xsd_generator xsd_gen(cfgbase, xsd_dir);
            xsd_gen.generate();
        }else if(cmd == "-c++"){
            if(pos + 3 > argc){
                ECHO_ERR("生成c++源代码文件的命令错误,格式应为: ");
                ECHO_ERR("   -c++  h模板文件 cpp模板文件 生成的c++文件放在哪个文件夹下");
                ECHO_ERR("   比如: -c++  ../h_template.h  ../cpp_template.cpp  ./c++/");

                return 0;
            }

            std::string h_templet   = argv[pos++];
            std::string cpp_templet = argv[pos++];
            std::string cpp_dir	    = argv[pos++];

            // 生成c++文件
            cpp_generator cpp_gen(cfgbase, cpp_dir, h_templet, cpp_templet);
            cpp_gen.generate();
        }else if(cmd == "-go"){
            if(pos + 2 > argc){
                ECHO_ERR("生成go源代码文件命令错误,格式应为: ");
                ECHO_ERR("   -go  go模板文件  生成的go文件放在哪个文件夹下");
                ECHO_ERR("   比如: -go  ../go_template.go   ./go/");

                return 0;
            }

            // 生成go文件(未开放)
            std::string go_templet = argv[pos++];
            std::string go_dir	   = argv[pos++];
        }else if(cmd == "-saveasxml"){
            if(pos + 1 > argc){
                ECHO_WARN("导出xml文件的命令错误,格式应为: ");
                ECHO_WARN("   -saveasxml  生成的xml文件存放在哪个文件夹下");
                ECHO_WARN("   比如: -saveasxml  ./xml/");

                return 0;
            }

            std::string xml_dir = argv[pos++];

            // 生成xml文件
            xml_generator xml_gen(cfgbase, xml_dir);
            xml_gen.generate();
        }else if(cmd == "-json"){
            if(pos + 1 > argc){
                ECHO_WARN("导出json文件的命令错误,格式应为: ");
                ECHO_WARN("   -json  生成的json文件存放在哪个文件夹下");
                ECHO_WARN("   比如: -json  ./json/");

                return 0;
            }

            std::string json_dir = argv[pos++];

            // 生成json文件
            json_generator json_gen(cfgbase, json_dir);
            json_gen.generate();
        }
    }

    return 0;
}