python之自动化生成解析ini文件的Qt类
来源:互联网 发布:病假条淘宝暗语大全 编辑:程序博客网 时间:2024/05/18 02:35
## genQtSetting.py
import os,sys,reimport shutil,stringfrom string import TemplategHearFile = "hcs_setting"gSrcFile = "hcs_setting"gClassName = "HCS_Setting"#[OK]class CObject(object): def __init__(self): self._group = "" self._gList = [] self._gMap = {} self._gSaveList = "" def setGroup(self,group): self._group = group def addMember(self,key,value): self._gList.append(key) self._gMap[key] = value ########################################################################### # Header File. # QString getGroupFiled(); ########################################################################### def toFunc_Def_List(self): res = "" for item in self._gList: tmp = "\t%s get%s%s();\n" % ("QString",self._group.capitalize() ,item.capitalize()) res = res + tmp return res ########################################################################### # Header File. ########################################################################### def toFunc_Imp_List(self): return "" ########################################################################### # Header File. # QString m_a; # QString m_b; ########################################################################### def toVal_Def_List(self): res = "" for item in self._gList: tmp = "%s m_%s%s;\n\t" % ("QString",self._group[0].lower() + self._group[1:] ,item.capitalize()) res = res + tmp return res ########################################################################### # void loadSetting(const QString & fname){ # m_a = ""; # } ########################################################################### def toFunc_Init_List(self): res = "" for item in self._gList: tmp = "\tm_%s%s = \"\";\n" % (self._group[0].lower() + self._group[1:] ,item.capitalize()) res = res + tmp res = res + "\n"; return res ########################################################################### # void loadSetting(const QString & fname){ # m_a = ""; # m_a = _data.value("a/b").value; # } ########################################################################### def toFunc_Set_List(self): res = "" for item in self._gList: tmp = "\tm_%s%s = _data.value(\"%s/%s\").toString();\n" % (self._group[0].lower() + self._group[1:] ,item.capitalize(),self._group,item) res = res + tmp return res ########################################################################### # void setGrouoOption(const QString & fname){ # m_a = fname; # } ########################################################################### def toFunc_OutSet_List(self): res = "" for item in self._gList: s1 = "void %s::set%s%s(const QString & _value){\n" % (gClassName ,self._group.capitalize(),item.capitalize()) s2 = "\tm_%s%s = %s;\n" % (self._group[0].lower() + self._group[1:] ,item.capitalize(),"_value"); s3 = "}\n\n"; s = s1 + s2 + s3 res = res + s return res ########################################################################### # void setGrouoOption(const QString & fname){ # m_a = fname; # } ########################################################################### def toFunc_DefSet_List(self): res = "" for item in self._gList: s = "\tvoid set%s%s(const QString & _value);\n" % (self._group.capitalize(),item.capitalize()) res = res + s return res ########################################################################### # QString getGroupField(){ # return m_member; # } ########################################################################### def toFunc_Get_List(self): res = "" for item in self._gList: s1 = "%s %s::get%s%s(){\n" % ("QString",gClassName,self._group.capitalize(),item.capitalize()) s2 = "\treturn m_%s%s;\n" % (self._group[0].lower() + self._group[1:] ,item.capitalize()) s3 = "}\n\n" s = s1 + s2 + s3 res = res + s return res ########################################################################### # QString getGroupField(){ # return m_member; # } ########################################################################### def toFunc_Save_List(self): list = "" for item in self._gList: s1 = "\t_data.setValue(\"%s/%s\" ,m_%s%s);\n" % (self._group ,item , self._group[0].lower() + self._group[1:] ,item.capitalize()) list = list + s1 return list############################################################################ write string to file.###########################################################################def writeToFile(str,fname): fp = open(fname,"w+") fp.write(str) fp.close()############################################################################ write the result to test.h | test.cpp file.###########################################################################def saveHeadFile(defList,varList ,defSetList): m_hContent = Template("""/******************************************************************************File name : ${FILE_NAME}.hTile : Header of the ${CLASS_NAME} class******************************************************************************/ #ifndef ${FILE_NAME}_H #define ${FILE_NAME}_H #include <QString> #include <QSettings> #include <QColor>class ${CLASS_NAME}{public: ${CLASS_NAME}(){} static ${CLASS_NAME} * getInstance(); void loadFile(const QString & fname); void saveFile(); /*Getter/Setter*/${FUNCTION_DEF_LIST}${FUNCTION_DEFSET_LIST}private: ${VAR_LIST} QSettings _data; QString m_iniFileName;};#endif""") h_str = m_hContent.substitute(FILE_NAME=gHearFile, CLASS_NAME=gClassName, FUNCTION_DEF_LIST=defList, FUNCTION_DEFSET_LIST=defSetList, VAR_LIST=varList) writeToFile(h_str,gHearFile + ".h")def saveBodyFile(impList,getList,setList,instance,saveList): m_bContent = Template("""/******************************************************************************** File name : ${FILE_NAME}.cpp* Title : Implementation of the ${CLASS_NAME} class*******************************************************************************/#include "${FILE_NAME}.h"static ${CLASS_NAME} * gSetting = NULL;${FUNCTION_INSTANCE}${FUNCTION_IMPL_LIST}${FUNCTION_GET_LIST}${FUNCTION_SET_LIST}${FUNCTION_SAVE_LIST}""") b_str = m_bContent.substitute(FILE_NAME=gSrcFile, CLASS_NAME=gClassName, FUNCTION_INSTANCE=instance, FUNCTION_IMPL_LIST=impList, FUNCTION_GET_LIST=getList, FUNCTION_SET_LIST=setList, FUNCTION_SAVE_LIST=saveList) writeToFile(b_str,gSrcFile + ".cpp")gObjList = []gObj = CObject()####################################################################################################[OK] key=value###################################################################################################def processWord(s): global gObj s = s.strip() key,value = s.split("=",1) key = key.strip(" \r\n") value = value.strip(" \r\n") gObj.addMember(key,value)####################################################################################################[OK] getGroup("[Cache]") => "Cache"###################################################################################################def getGroup(str): str = str.strip() ret = re.match(r"\[(.+)\]$",str) if ret != None: return ret.group(1) return None####################################################################################################[OK] isGroup("[Cache]") => true###################################################################################################def isGroup(str): str = str.strip() ret = re.match(r"\[\w|\d]+\]$",str) if ret != None: return True return False####################################################################################################[OK] whether string is empty.###################################################################################################def isEmpty(str): if len(str) <= 1: return True else: return False####################################################################################################[OK] parse the content of ini file,# and generate the Node to gObjList.###################################################################################################def doParse(iniContent): global gObj,gObjList #getCin(hd) varList = "" fun_def_list = "" lineList = [] m_group = "" lineList = iniContent.split("\n") isStart = True for s in lineList: s = s.strip() # standared the string. if isEmpty(s): # ignore the space line. continue if re.match("#",s) != None: # ignore the conment line. continue if isGroup(s): # is [Cache] field. m_group = getGroup(s) if isStart == True: gObj.setGroup(m_group) isStart = False else: gObjList.append(gObj) gObj = CObject() gObj.setGroup(m_group) else: processWord(s) gObjList.append(gObj)####################################################################################################[OK] read content from fname.###################################################################################################def readFile(fname): with open(fname, 'r') as f: return f.read()####################################################################################################[OK] baseFilename("test.ini") => test###################################################################################################def baseFilename(fname): name,ext = fname.rsplit(".") return name####################################################################################################[OK] genSetting.py test.ini , True# check the user`s input args.###################################################################################################def checkArgs(): arg_len = len(sys.argv) if arg_len != 2: print "[Usage: genSetting.py test.ini]" return False return True####################################################################################################[OK] checkFileFormat("test.ini") True###################################################################################################def checkFileFormat(fname): ret = re.search(r'\w+\.ini$',fname) if ret != None: return True return False####################################################################################################[OK] Main Function.###################################################################################################def main(): global gObjList if checkArgs() == False: return if checkFileFormat(sys.argv[1]) == False: return base_name = baseFilename(sys.argv[1]) iniContent = readFile(sys.argv[1]) doParse(iniContent) m_varList = "" m_defList = "" m_impFunc = "" m_getList = "" m_initList = "" m_instance = "" m_setList = "" m_saveList = "" m_defSetList = "" for obj in gObjList: m_varList = m_varList + obj.toVal_Def_List() m_defList = m_defList + obj.toFunc_Def_List() m_getList = m_getList + obj.toFunc_Get_List() m_setList = m_setList + obj.toFunc_OutSet_List() m_impFunc = m_impFunc + obj.toFunc_Set_List() m_initList = m_initList + obj.toFunc_Init_List() m_saveList = m_saveList + obj.toFunc_Save_List() m_defSetList = m_defSetList + obj.toFunc_DefSet_List() m_instanceContent = Template("""${CLASS_NAME} * ${CLASS_NAME}::getInstance(){if ( NULL == gSetting )gSetting = new ${CLASS_NAME}();return gSetting;}""") sv1 = "void %s::saveFile(){\n" % (gClassName) sv2 = "\tQSettings _data(m_iniFileName, QSettings::IniFormat);\n\t_data.setIniCodec(\"UTF-8\");\n"; sv3 = m_saveList; m_saveList = sv1 + sv2 + sv3 + "}\n\n" m_instance = m_instanceContent.substitute(CLASS_NAME=gClassName) s1 = "void %s::loadFile(const QString & fname){\n" % (gClassName) s2 = "\tQSettings _data(fname, QSettings::IniFormat);\n\t_data.setIniCodec(\"UTF-8\");\n"; s3 = "\t%s = %s;\n" % ("m_iniFileName" , "fname") s4 = "}\n" loadFunc = s1 + s2 + s3 + m_initList + m_impFunc + s4 saveHeadFile(m_defList,m_varList ,m_defSetList) saveBodyFile(loadFunc,m_getList,m_setList,m_instance,m_saveList)main()
@@用法说明
genQtSetting.py config.ini
生成解析config.ini文件的类
0 0
- python之自动化生成解析ini文件的Qt类
- Python之自动生成解析ini文件的C++类(基于libiniparser.a)
- Python写自动化之ini文件的读写
- Python之自动化生成解析XML的C++类(基于tinyxml库解析)
- python 解析ini 文件
- python解析ini文件
- Python解析INI文件
- python菜鸟升级路--自动化解析生成xml文件
- Qt读写ini文件的C++类
- python之生成Qt pro文件
- INI文件解析类
- Python自动化之select解析
- python解析ini、conf、cfg文件
- Qt开发之读写ini文件
- QT 学习之------ 读写ini文件
- Qt解析INI配置文件
- python文件操作之ini文件
- QT进行ini文件的读写
- 免费赠与c/c++海量视频 学习资料的
- 利用xShell实现windows与虚拟机的文件交换
- 用java实现计算String类型的四则运算——用栈和后缀表达式实现
- APP安全测试-数据安全性/通讯安全性/人机接口安全性
- 南大软院大神养成计划-第三天
- python之自动化生成解析ini文件的Qt类
- Android Studio 导入Volley模块后 gradle的修改。
- Android 接口定义语言AIDL使用解说
- 无法启动tomcat服务器,屏幕一闪而过
- Java Socket通信实现带联机功能的俄罗斯方块
- Jsonlib使用PropertyNameProcessor处理属性首字母为大写的情况
- 淘宝客推广教程-飞鸟淘宝客推广教程
- github SSH authentication
- JavaWeb---框架SpringMvc+Mybatis开发项目第一季(共三季)