C++读写文件代码自动生成器(python3完成)
来源:互联网 发布:淘宝店招收藏店铺代码 编辑:程序博客网 时间:2024/05/20 15:39
最近写c++读写文件的代码写的非常痛苦,于是想出来用python写个自动的,这也是这篇文章出来的原因,写程序到了一定时候,正好也在学习python这么语言,于是就选择它来完成这个工作了。目前只完成了二进制的版本。
下面我就简单说明下,这个生成器是如何运作的,首先我们知道在c++中有些关键词,我们只要将这些词列为关键词,这些词,大致分为两类,一类是直接可以写入写出的,另一类是不可以的,我们把它们分成两个列表存储。
然后设计自己的定义生成文件的格式,我暂时定义为下面的情况:
第一行标识是文件名字,第二行是模式,为了以后加入文本文件做准备,然后就是一些结构体,我们来生成读写这些结构体的代码:
import sys # Load the sys module (导入sys模块) SimpleKeyWordInCplusplus = ['int', 'float', 'char', 'unsigned char', 'long', 'unsigned int', 'unsigned long', 'unsigned float', 'wchar_t', 'double', 'unsigned double']SpecialKeyWordInCplusplus = ['string', 'wstring', 'bool']def OutputStructToList(ss,FileNameAndFileMode, TheStructS, FunctionName): lineNumbers = len(ss) for i in range(0, len(ss)): lines = ss[i] if(-1!=lines.find("fileName",0,len(lines))): FileNameSplit= lines.split() FileNameAndFileMode.append(FileNameSplit[1]) if(-1!=lines.find("functionName",0,len(lines))): tmpFunctionName = lines.split() FunctionName.append(tmpFunctionName[1]) if(-1!=lines.find("modle",0,len(lines))): if(-1==lines.find(";",0,len(lines))): FileMode = lines.split() FileNameAndFileMode.append(FileMode[1]) FileNameAndFileMode.append(FileMode[2]) if(-1!=lines.find("struct",0,len(lines))): if((i+1)<lineNumbers): nextLines = ss[i+1] if(-1!=nextLines.find("{", 0, len(nextLines))): tmp = [] StructName = lines.split()[1]; TheStructS.append(StructName) for j in range(i+2,lineNumbers): theStructLine = ss[j] if(-1!=theStructLine.find('}',0,len(theStructLine))): break else: theStructLine=theStructLine.replace(';', ' ') theStructLine=theStructLine.replace('[', ' ') theStructLine=theStructLine.replace(']', ' ') StructItem = theStructLine.split(); tmp.append(StructItem) TheStructS.append(tmp) def OutWriteFileFunction(FileNameAndFileMode, TheStructS, FunctionName,fp2): structNumber = len(TheStructS)//2 for k in range(0, structNumber): fp2.write('\n') fp2.write('int\t'+'Write_'+TheStructS[2*k]+'('+'FILE'+'\t*fp,'+'const\t'+TheStructS[2*k]) fp2.write('\t&in'+TheStructS[2*k]) fp2.write(')\n') fp2.write('{\n') structItemsIndex = 2*k+1; CurrentStructItemNumber = len(TheStructS[structItemsIndex]) for i in range(0, CurrentStructItemNumber): if(TheStructS[structItemsIndex][i][0] in SimpleKeyWordInCplusplus): fp2.write('\tfwrite(&in'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+',') fp2.write('sizeof('+TheStructS[structItemsIndex][i][0]+')\t,') if(3==len(TheStructS[structItemsIndex][i])): fp2.write(TheStructS[structItemsIndex][i][2]+'\t,fp);\n') else: fp2.write('1'+'\t,fp);\n') elif(SpecialKeyWordInCplusplus[0]==TheStructS[structItemsIndex][i][0]): if(3==len(TheStructS[structItemsIndex][i])): stringNumbers = TheStructS[structItemsIndex][i][2]; fp2.write('\tint stringNumbers = '+stringNumbers+';\n') fp2.write('\tfwrite(&stringNumbers,\tsizeof(int)\t,1\t,fp)\n') fp2.write('\tfor(int i=0;i<'+stringNumbers+',i++)\n') fp2.write('\t{\n') fp2.write('\t\t') fp2.write('int theCurrentStringlength_v = in'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+'[i].length();\n') fp2.write('\t\tfwrite(&theCurrentStringlength_v,\tsizeof(int)\t,1\t,fp);\n') fp2.write('\t\tfwrite(&in'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+'[i].c_str(),') fp2.write('\tsizeof(char)\t,theCurrentStringlength_v\t,fp);\n') fp2.write('\t}\n') else: fp2.write('\tint theCurrentStringlength = in'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+'.length();\n') fp2.write('\tfwrite(&theCurrentStringlength,\tsizeof(int)\t,1\t,fp);\n') fp2.write('\tfwrite(&in'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+'.c_str(),') fp2.write('\tsizeof(char)\t,theCurrentStringlength\t,fp);\n') elif(SpecialKeyWordInCplusplus[1]==TheStructS[structItemsIndex][i][0]): if(3==len(TheStructS[structItemsIndex][i])): wstringNumbers = TheStructS[structItemsIndex][i][2]; fp2.write('\tint wstringNumbers = '+wstringNumbers+';\n') fp2.write('\tfwrite(&wstringNumbers,\tsizeof(int)\t,1\t,fp);\n') fp2.write('\tfor(int i=0;i<'+wstringNumbers+',i++)\n') fp2.write('\t{\n') fp2.write('\t\t') fp2.write('int theCurrentWStringlength_v = in'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+'[i].length();\n') fp2.write('\t\tfwrite(&theCurrentWStringlength_v,\tsizeof(int)\t,1\t,fp);\n') fp2.write('\t\tfwrite(&'+TheStructS[structItemsIndex][i][1]+'[i].c_str(),') fp2.write('\tsizeof(wchar_t)\t,theCurrentWStringlength_v\t,fp);\n') fp2.write('\t}\n') else: fp2.write('\tint theCurrentWStringlength = in'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+'.length();\n') fp2.write('\tfwrite(&theCurrentWStringlength,\tsizeof(int)\t,1\t,fp);\n') fp2.write('\tfwrite(&in'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+'.c_str(),') fp2.write('\tsizeof(wchar_t)\t,theCurrentWStringlength\t,fp);\n') elif(SpecialKeyWordInCplusplus[2]==TheStructS[structItemsIndex][i][0]): if(3==len(TheStructS[structItemsIndex][i])): boolNumbers = TheStructS[structItemsIndex][i][2]; fp2.write('\tint boolNumbers = '+boolNumbers+';\n') fp2.write('\tfwrite(&boolNumbers,\tsizeof(int)\t,1\t,fp);\n') fp2.write('\tfor(int i=0;i<'+boolNumbers+',i++)\n') fp2.write('\t{\n') fp2.write('\t\t') fp2.write('char boolValue = in'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+'[i]?1:-1;\n') fp2.write('\t\tfwrite(&boolValue,\tsizeof(char)\t,1\t,fp);\n') fp2.write('\t}\n') else: fp2.write('\tchar boolValue = in'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+'[i]?1:-1;\n') fp2.write('\tfwrite(&boolValue,\tsizeof(char)\t,1\t,fp);\n') else: fp2.write('\tWrite_'+TheStructS[structItemsIndex][i][0]) fp2.write('(fp,in'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+');\n') fp2.write('\n') fp2.write('\treturn 0;\n') fp2.write('}\n')def OutReadFileFunction(FileNameAndFileMode, TheStructS, FunctionName, fp2): structNumber = len(TheStructS)//2 for k in range(0, structNumber): fp2.write('\n') fp2.write('int\t'+'Read_'+TheStructS[2*k]+'('+'FILE'+'\t*fp,'+'\t'+TheStructS[2*k]) fp2.write('\t&out'+TheStructS[2*k]+'') fp2.write(')\n') fp2.write('{\n') structItemsIndex = 2*k+1; CurrentStructItemNumber = len(TheStructS[structItemsIndex]) for i in range(0, CurrentStructItemNumber): if(TheStructS[structItemsIndex][i][0] in SimpleKeyWordInCplusplus): fp2.write('\tfread(&'+'out'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+',') fp2.write('sizeof('+TheStructS[structItemsIndex][i][0]+')\t,') if(3==len(TheStructS[structItemsIndex][i])): fp2.write(TheStructS[structItemsIndex][i][2]+'\t,fp);\n') else: fp2.write('1'+'\t,fp)\n') elif(SpecialKeyWordInCplusplus[0]==TheStructS[structItemsIndex][i][0]): if(3==len(TheStructS[structItemsIndex][i])): fp2.write('\tint stringNumbers;\n') fp2.write('\tfread(&stringNumbers,\tsizeof(int)\t,1\t,fp);\n') fp2.write('\tfor(int i=0;i<stringNumbers,i++)\n') fp2.write('\t{\n') fp2.write('\t\t') fp2.write('int theCurrentStringlength_v;\n') fp2.write('\t\tfread(&theCurrentStringlength_v,\tsizeof(int)\t,1\t,fp);\n') fp2.write('\t\tchar* tmpCharBuffer_v = new char[theCurrentStringlength_v+1];\n') fp2.write('\t\tmemset(tmpCharBuffer_v, 0, theCurrentStringlength_v);\n') fp2.write('\t\tfread(tmpCharBuffer_v') fp2.write('\tsizeof(char)\t,theCurrentStringlength_v\t,fp);\n') fp2.write('\t\tout'+TheStructS[2*k]+'.'+TheStructS[structItemsIndex][i][1]+'[i]=') fp2.write('tmpCharBuffer_v;\n') fp2.write('\t\tdelete []tmpCharBuffer_v;\n') fp2.write('\t}\n') else: fp2.write('\tint theCurrentStringlength = out'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+'.length();\n') fp2.write('\tfread(&theCurrentStringlength,\tsizeof(int)\t,1\t,fp);\n') fp2.write('\tchar* tmpCharBuffer = new char[theCurrentStringlength+1];\n') fp2.write('\tmemset(tmpCharBuffer, 0, theCurrentStringlength);\n') fp2.write('\tfread(tmpCharBuffer') fp2.write('\tsizeof(char)\t,theCurrentStringlength\t,fp);\n') fp2.write('\tout'+TheStructS[2*k]+'.'+TheStructS[structItemsIndex][i][1]+'=') fp2.write('tmpCharBuffer;\n') fp2.write('\tdelete []tmpCharBuffer;\n') elif(SpecialKeyWordInCplusplus[1]==TheStructS[structItemsIndex][i][0]): if(3==len(TheStructS[structItemsIndex][i])): fp2.write('\tint stringNumbers;\n') fp2.write('\tfread(&stringNumbers,\tsizeof(int)\t,1\t,fp);\n') fp2.write('\tfor(int i=0;i<stringNumbers,i++)\n') fp2.write('\t{\n') fp2.write('\t\t') fp2.write('int theCurrentWStringlength_v;\n') fp2.write('\t\tfread(&theCurrentWStringlength_v,\tsizeof(int)\t,1\t,fp);\n') fp2.write('\t\twchar_t* tmpwCharBuffer_v = new wchar_t[theCurrentWStringlength_v+1];\n') fp2.write('\t\tmemset(tmpwCharBuffer_v, 0, theCurrentWStringlength_v*sizeof(wchar_t));\n') fp2.write('\t\tfread(tmpwCharBuffer_v') fp2.write('\tsizeof(wchar_t)\t,theCurrentWStringlength_v\t,fp);\n') fp2.write('\t\tout'+TheStructS[2*k]+'.'+TheStructS[structItemsIndex][i][1]+'[i]=') fp2.write('tmpwCharBuffer_v;\n') fp2.write('\t\tdelete []tmpwCharBuffer_v;\n') fp2.write('\t}\n') else: fp2.write('\tint theCurrentStringlength = out'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+'.length();\n') fp2.write('\tfread(&theCurrentStringlength,\tsizeof(int)\t,1\t,fp);\n') fp2.write('\twchar_t* tmpwCharBuffer = new wchar_t[theCurrentStringlength+1];\n') fp2.write('\tmemset(tmpwCharBuffer, 0, theCurrentStringlength*sizeof(wchar_t));\n') fp2.write('\tfread(tmpwCharBuffer') fp2.write('\tsizeof(wchar_t)\t,theCurrentStringlength\t,fp);\n') fp2.write('\tout'+TheStructS[2*k]+'.'+TheStructS[structItemsIndex][i][1]+'=') fp2.write('tmpwCharBuffer;\n') fp2.write('\tdelete []tmpwCharBuffer;\n') elif(SpecialKeyWordInCplusplus[2]==TheStructS[structItemsIndex][i][0]): if(3==len(TheStructS[structItemsIndex][i])): fp2.write('\tint boolNumbers;\n') fp2.write('\tfread(&boolNumbers,\tsizeof(int)\t,1\t,fp);\n') fp2.write('\tfor(int i=0;i<boolNumbers,i++)\n') fp2.write('\t{\n') fp2.write('\t\t') fp2.write('char boolValue_v;\n') fp2.write('\t\tfread(&boolValue_v,\tsizeof(char)\t,1\t,fp);\n') fp2.write('\t\tout'+TheStructS[2*k]+'.'+TheStructS[structItemsIndex][i][1]) fp2.write('[i]=((1==boolValue_v)?true:false);\n') fp2.write('\t}\n') else: fp2.write('\tchar boolValue;\n') fp2.write('\tfread(&boolValue,\tsizeof(char)\t,1\t,fp);\n') fp2.write('\tout'+TheStructS[2*k]+'.'+TheStructS[structItemsIndex][i][1]) fp2.write('=((1==boolValue)?true:false);\n') else: fp2.write('\tRead_'+TheStructS[structItemsIndex][i][0]) fp2.write('(fp,out'+TheStructS[2*k]+'.') fp2.write(TheStructS[structItemsIndex][i][1]+');\n') fp2.write('\n') fp2.write('\treturn 0;\n') fp2.write('}\n') def outFinalWriteAndRead(FileNameAndFileMode,fp2): fp2.write('\n') fp2.write('int WriteFinal(string strPath,'+'YourParam param)\n') fp2.write('{\n') fp2.write('\tFILE *fp;\n') fp2.write('\tfp= fopen(filename.c_str(),"'+FileNameAndFileMode[1]+'");\n') fp2.write('\tif(NULL==fp)\n') fp2.write('\t{\n') fp2.write('\t\treturn -1;\n') fp2.write('\t}\n') fp2.write('\t//write Your Code Here!\n') fp2.write('\n\n\n\n\n\n') fp2.write('\tfclose(fp);\n') fp2.write('\treturn 0;\n') fp2.write('}\n') fp2.write('\n') fp2.write('int ReadFinal(string strPath,'+'YourParam param)\n') fp2.write('{\n') fp2.write('\tFILE *fp;\n') fp2.write('\tfp= fopen(filename.c_str(),"'+FileNameAndFileMode[2]+'");\n') fp2.write('\tif(NULL==fp)\n') fp2.write('\t{\n') fp2.write('\t\treturn -1;\n') fp2.write('\t}\n') fp2.write('\t//write Your Code Here!\n') fp2.write('\n\n\n\n\n\n') fp2.write('\tfclose(fp);\n') fp2.write('\treturn 0;\n') fp2.write('}\n') def outFunction(src, dest): fp = open(src, 'r+') ss = fp.readlines(); fp.close() print(len(ss)) FileNameAndFileMode =[] FunctionName =[] TheStructS = [] OutputStructToList(ss,FileNameAndFileMode , TheStructS, FunctionName) fp2 = open(dest+FileNameAndFileMode[0]+'.cpp','w+') fp2.write('#include'+'\t'+'<string>\n') fp2.write('using namespace std;\n') fp2.write('#include'+'\t'+'"'+FileNameAndFileMode[0]+'.h'+'"\n') OutWriteFileFunction(FileNameAndFileMode, TheStructS, FunctionName, fp2) OutReadFileFunction(FileNameAndFileMode, TheStructS, FunctionName, fp2) outFinalWriteAndRead(FileNameAndFileMode,fp2) fp2.flush() fp2.close() outFunction('N:/pythonProject/1.txt', 'N:/pythonProject/')
这是我的python代码,python的版本是3.3,这样我们就可以生成自己想要的读取文件的代码了,然后我们看下生成的c++代码:#include<string>using namespace std;#include"fileName.h"intWrite_sss(FILE*fp,constsss&inputStruct){fwrite(&inputStruct.a,sizeof(int),15,fp);fwrite(&inputStruct.b,sizeof(float),13,fp);fwrite(&inputStruct.c,sizeof(char),1,fp);return 0;}intWrite_ff(FILE*fp,constff&inputStruct){int stringNumbers = 10;fwrite(&stringNumbers,sizeof(int),1,fp)for(int i=0;i<10,i++){int theCurrentStringlength_v = inputStruct.d[i].length();fwrite(&theCurrentStringlength_v,sizeof(int),1,fp);fwrite(&inputStruct.d[i].c_str(),sizeof(char),theCurrentStringlength_v,fp);}int theCurrentStringlength = inputStruct.f.length();fwrite(&theCurrentStringlength,sizeof(int),1,fp);fwrite(&inputStruct.f.c_str(),sizeof(char),theCurrentStringlength,fp);return 0;}intWrite_wff(FILE*fp,constwff&inputStruct){int wstringNumbers = 10;fwrite(&wstringNumbers,sizeof(int),1,fp);for(int i=0;i<10,i++){int theCurrentWStringlength_v = inputStruct.d[i].length();fwrite(&theCurrentWStringlength_v,sizeof(int),1,fp);fwrite(&d[i].c_str(),sizeof(wchar_t),theCurrentWStringlength_v,fp);}int theCurrentWStringlength = inputStruct.f.length();fwrite(&theCurrentWStringlength,sizeof(int),1,fp);fwrite(&inputStruct.f.c_str(),sizeof(wchar_t),theCurrentWStringlength,fp);return 0;}intWrite_booltest(FILE*fp,constbooltest&inputStruct){int boolNumbers = 10;fwrite(&boolNumbers,sizeof(int),1,fp);for(int i=0;i<10,i++){char boolValue = inputStruct.ffss[i]?1:-1;fwrite(&boolValue,sizeof(char),1,fp);}char boolValue = inputStruct.ssfd[i]?1:-1;fwrite(&boolValue,sizeof(char),1,fp);return 0;}intWrite_dd(FILE*fp,constdd&inputStruct){Write_sss(fp,inputStruct.aa);Write_ff(fp,inputStruct.bb);return 0;}intRead_sss(FILE*fp,sss&inputStruct){fread(&inputStruct.a,sizeof(int),15,fp);fread(&inputStruct.b,sizeof(float),13,fp);fread(&inputStruct.c,sizeof(char),1,fp)return 0;}intRead_ff(FILE*fp,ff&inputStruct){int stringNumbers;fread(&stringNumbers,sizeof(int),1,fp);for(int i=0;i<stringNumbers,i++){int theCurrentStringlength_v;fread(&theCurrentStringlength_v,sizeof(int),1,fp);char* tmpCharBuffer_v = new char[theCurrentStringlength_v+1];memset(tmpCharBuffer_v, 0, theCurrentStringlength_v);fread(tmpCharBuffer_vsizeof(char),theCurrentStringlength_v,fp);inputStruct.d[i]=tmpCharBuffer_v;delete []tmpCharBuffer_v;}int theCurrentStringlength = inputStruct.f.length();fread(&theCurrentStringlength,sizeof(int),1,fp);char* tmpCharBuffer = new char[theCurrentStringlength+1];memset(tmpCharBuffer, 0, theCurrentStringlength);fread(tmpCharBuffersizeof(char),theCurrentStringlength,fp);inputStruct.f=tmpCharBuffer;delete []tmpCharBuffer;return 0;}intRead_wff(FILE*fp,wff&inputStruct){int stringNumbers;fread(&stringNumbers,sizeof(int),1,fp);for(int i=0;i<stringNumbers,i++){int theCurrentWStringlength_v;fread(&theCurrentWStringlength_v,sizeof(int),1,fp);wchar_t* tmpwCharBuffer_v = new wchar_t[theCurrentWStringlength_v+1];memset(tmpwCharBuffer_v, 0, theCurrentWStringlength_v*sizeof(wchar_t));fread(tmpwCharBuffer_vsizeof(wchar_t),theCurrentWStringlength_v,fp);inputStruct.d[i]=tmpwCharBuffer_v;delete []tmpwCharBuffer_v;}int theCurrentStringlength = inputStruct.f.length();fread(&theCurrentStringlength,sizeof(int),1,fp);wchar_t* tmpwCharBuffer = new wchar_t[theCurrentStringlength+1];memset(tmpwCharBuffer, 0, theCurrentStringlength*sizeof(wchar_t));fread(tmpwCharBuffersizeof(wchar_t),theCurrentStringlength,fp);inputStruct.f=tmpwCharBuffer;delete []tmpwCharBuffer;return 0;}intRead_booltest(FILE*fp,booltest&inputStruct){int boolNumbers;fread(&boolNumbers,sizeof(int),1,fp);for(int i=0;i<boolNumbers,i++){char boolValue_v;fread(&boolValue_v,sizeof(char),1,fp);inputStruct.ffss[i]=((1==boolValue_v)?true:false);}char boolValue;fread(&boolValue,sizeof(char),1,fp);inputStruct.ssfd=((1==boolValue)?true:false);return 0;}intRead_dd(FILE*fp,dd&inputStruct){Read_sss(fp,inputStruct.aa);Read_ff(fp,inputStruct.bb);return 0;}int WriteFinal(string strPath,YourParam param){FILE *fp;fp= fopen(filename.c_str(),"wb");if(NULL==fp){return -1;}//write Your Code Here!fclose(fp);return 0;}int ReadFinal(string strPath,YourParam param){FILE *fp;fp= fopen(filename.c_str(),"rb");if(NULL==fp){return -1;}//write Your Code Here!fclose(fp);return 0;}
代码看起来还是有些凌乱,不过大家有兴趣可以重写写一下python代码,把他变得更加健壮!好了我又丢了一块板砖出来。希望大家喜欢!
- C++读写文件代码自动生成器(python3完成)
- [开源]excel文件自动代码配置生成器
- 代码自动生成器
- SQL代码自动生成器
- SQL代码自动生成器
- mysql代码自动生成器
- stm32代码自动生成器
- python3-读写文件
- python3 文件读写
- Python3 中文文件读写
- python3学习--文件读写
- python3--文件读写1
- Python3读写csv文件
- 自己写的.Net(C#)代码自动生成器
- 自己写的.Net(C#)代码自动生成器
- 自己写的.Net(C#)代码自动生成器
- [代码生成器] 一. 类/结构 文件的自动生成
- c#“代码生成器”大全
- 黑马程序员--.NET笔记--字符串
- C#Winform限制Textbox只能输入数字
- cocos2d-x下硬件音量按键控制游戏音量的实现
- Cocoa2d 笔记
- 转的--关于作者对产品的一句话
- C++读写文件代码自动生成器(python3完成)
- 黑马程序员_关于对象和指向该对象的变量的有关问题
- 如何做好基层管理者(一)
- 在MFC中查找HWND
- Page.ClientScript.RegisterStartupScript和ScriptManager.RegisterStartupScript的区别
- PHP的SOAP工具包--nusoap
- 文本编辑和fckeditor切换使用时注意的问题
- 在mysql里存储汉字如较长的文章
- 面向对象设计模式与原则 .