首页 > python 自动生成C++代码 (代码生成器)

python 自动生成C++代码 (代码生成器)

python 代码自动生成的方法 (代码生成器)

遇到的问题

工作中遇到这么一个事,需要写很多C++的底层数据库类,但这些类大同小异,无非是增删改查,如果人工来写代码,既费力又容易出错;而借用python的代码自动生成,可以轻松搞定;

(类比JAVA中的Hibernate自动生成的数据库底层操作代码)

下面介绍使用python字符串替换的方法;

Python字符串替换的几种方法

1. 字符串替换

将需要替换的内容使用格式化符替代,后续补上替换内容;

template = "hello %s , your website  is %s " % ("大CC","http://blog.me115.com")
print(template)

也可使用format函数完成:

template = "hello {0} , your website  is {1} ".format("大CC","http://blog.me115.com")
print(template)

注:该方法适用于变量少的单行字符串替换;

2. 字符串命名格式化符替换

使用命名格式化符,这样,对于多个相同变量的引用,在后续替换只用申明一次即可;

template = "hello %(name)s ,your name is %(name), your website  is %(message)s" %{"name":"大CC","message":"http://blog.me115.com"}
print(template)

使用format函数的语法方式:

template = "hello {name} , your name is {name}, your website  is {message} ".format(name="大CC",message="http://blog.me115.com")
print(template)

注:适用相同变量较多的单行字符串替换;

3.模版方法替换

使用string中的Template方法;

from string import Template
tempTemplate = string.Template("Hello $name ,your website is $message")
print(tempTemplate.substitute(name='大CC',message='http://blog.me115.com'))

有了模版方法后,就可以将模版保存到文件单独编辑,在生成的地方替换为需要的变量;

示例:代码生成

这个示例使用以上讲到的第三种方法;

建立一个模版文件,里面需要替换的内容使用${}变量替换;

dao_cpp.template

///
/// @class ${CLASSNAME}
/// @brief Redis底层接口类 操作${TABLE_NAME}表
/// TABLE ${TABLE_NAME_UPPER}
/// @author dao_cpp_generator.py
/// @generate date: ${GENE_DATE}
/// [注:本文件为自动生成,不需要人为编辑,若有修改,请通过配置py脚本来重新生成.]#include "${CLASSNAME}.h"
#include "include/${TABLE_NAME}_t.h"
#include "RedisManager.h"
#include "common/LogMacros.h"
#include "common/StringUtility/OtherStringFunc.h"
#include "common/DateTime.h"namespace redisdao{#define PRIMARY_KEY "${PRIMER_KEY}"
const string ${CLASSNAME}::TABLE_NAME = "${TABLE_NAME}";
const string ${CLASSNAME}::TABLE_ID = "${TABLE_ID}"; //在数据库中的表的唯一性标识符
const string ${CLASSNAME}::KEY_SEPARETER = "${KEY_SEPARETER}";${CLASSNAME}::${CLASSNAME}(void)
{if ( 0 == m_reHandler.EnsureConnect())m_bRedisConnected = true;elsem_bRedisConnected = false;
}${CLASSNAME}::~${CLASSNAME}(void)
{
}int ${CLASSNAME}::InsertRecord(const string& strVal)
...

python代码生成程序:

cpp_generator.py

#! /usr/bin/env python
#coding=utf-8
#Redis底层操作类CPP文件生成程序(*RedisDao.cpp)
#author [email protected] 2014-7-22
import os,sys,re,traceback
from datetime import datetime
from string import Templateclass DaoCppGenerator:def generate(self):tableName = 'students'className = '%sRedisDao' %  tableName.capitalize()filePath = r'include/%s.cpp' % classNameclass_file = open(filePath,'w')lines = []#模版文件template_file = open(r'dao_cpp.template','r')tmpl = Template(template_file.read())#模版替换lines.append(tmpl.substitute(CLASSNAME = className,TABLE_NAME = tableName,TABLE_NAME_UPPER = tableName.upper(), GENE_DATE = datetime.now().strftime('%Y-%m-%d %H:%M:%S'),TABLE_ID = '115',EXPIRE_DATE = '06JUN14'))# 0.将生成的代码写入文件class_file.writelines(lines)class_file.close()print 'generate %s over. ~ ~' % filePath

有了这个程序,再配合一堆XML配置文件,就可以轻松生成各种C++程序代码了;

Posted by: 大CC | 25JUL,2014

博客:blog.me115.com [订阅]

微博:新浪微博

转载于:https://www.cnblogs.com/me115/p/3867382.html

更多相关:

  • 当我们在Vim的命令行模式中,进行查找替换时不可避免地涉及到特殊字符的转义问题,记录如下: 1.我想将网上copy的一段代码中的“/n”替换为“ ”时,注意/应该转为/,应该转换为\n,于是替换表达式如下: :%s//n/\n/gc...

  • Spec: TS36.211 - Table 5.7.1-2...

  • 阿里云介绍: 1. 下载安装包。作为阿里主要的数据传输工具Datax,阿里已经完全开源到github上面了。下载地址(https://github.com/alibaba/DataX)。 2. 安装环境: JDK(1.6以上,推荐1.6)Python(推荐Python2.6.X)Apache Maven 3.x (Compile D...

  • xmlns xml namespaces 参考 http://www.w3school.com.cn/tags/tag_prop_xmlns.asp http://www.w3school.com.cn/xml/xml_namespaces.asp

    这是一行
  • 1.创建数据库:create database database-name 2.删除数据库:delete database database-name 3.选择:select * from table where ... 4.插入:insert into table(field1,field2) values(value1,value...