批量删除C和C++注释
使用Python语言 ,实现批量删除C/C++类型注释
1.目前支持去掉.h .hpp .c .cpp .java 这些以//或/**/为注释符的源文件
2.支持递归遍历目录
3.当前版本为Python2.7版本,故只有安装了Python2.7(或Python3.x以下版本的才可以直接使用,测试没问题后将编出exe直接使用)
4.使用方法:
(1)建立源目录,如d:\src(路径中最好不要有中文);
(2)建立目标目录,如d:\dst(路径中最好不要有中文);
(3)将RemoveComment.py放到某处(路径中最好不要有中文),如d:\RemoveComment.py
(4)打开cmd,输入切换到(3)中RemoveComment.py所在的目录(这里是d:\),输入python RemoveComment.py d:\src d:\dst,回车
(5)去掉了注释的源代码将放在d:\dst目录中
http://download.csdn.net/download/zp373860147/4361780
#coding:utf-8 import os
import sys def DelComment(src, dst): fSrc = open(src, 'rb')
fDst = open(dst, 'wb') out = [] STATE_NORMAL = 0
STATE_BEGIN = 1
STATE_LINE_COMMENT = 2
STATE_BLOCK_COMMENT = 3
STATE_END = 4 State = STATE_NORMAL while 1:
ReadInChar = fSrc.read(1) if ReadInChar == '':
break;
if State == STATE_NORMAL:
if ReadInChar == '/':
State = STATE_BEGIN
else:
out.append(ReadInChar)
elif State == STATE_BEGIN:
if ReadInChar == '/':
State = STATE_LINE_COMMENT
elif ReadInChar == '*':
State = STATE_BLOCK_COMMENT
else:
State = STATE_NORMAL
out.append('/'+ReadInChar)
elif State == STATE_LINE_COMMENT:
if ReadInChar == '\n':
State = STATE_NORMAL
elif State == STATE_BLOCK_COMMENT:
if ReadInChar == '*':
State = STATE_END
elif State == STATE_END:
if ReadInChar == '/':
State = STATE_NORMAL
ReadInChar = fSrc.read(1)
while ReadInChar == '\r' or ReadInChar == '\n':
ReadInChar = fSrc.read(1)
fSrc.seek(-1, 1)
else:
State = STATE_BLOCK_COMMENT
fSrc.seek(-1, 1) fDst.writelines(out)
fDst.flush()
fDst.close()
fSrc.close() def scanDir(srcpath, dstpath):
if os.path.isdir(srcpath):
for files in os.listdir(srcpath):
fSrc = os.path.join(srcpath, files)
if os.path.isfile(fSrc):
scanDir(fSrc, dstpath)
else:
fDst = os.path.join(dstpath, files)
if not os.path.exists(fDst):
os.mkdir(fDst)
scanDir(fSrc, fDst)
else:
if srcpath.endswith(('.h','.c','.cpp','.hpp','.jave'):
DelComment(srcpath, os.path.join(dstpath, os.path.basename(srcpath))) if __name__ == '__main__':
paramlen = len(sys.argv)
if paramlen!=3:
print '输入参数错误'
sys.exit(1) srcpath = sys.argv[1].rstrip('\\').rstrip('/')
print 'src_path: ' + srcpath dstpath = sys.argv[2].rstrip('\\').rstrip('/')
print 'dst_path: ' + dstpath print 'convert......'
scanDir(srcpath, dstpath)
print 'done!'
批量删除C和C++注释的更多相关文章
- 怎样批量删除PDF文件中的注释
日常我们在阅读一些PDF文章时候,我们会发现有些PDF文章带有非常多的注释,显得非常不美观,影响了阅读体验.那么PDF文章里的批注应该怎么进行删除呢?怎样批量删除PDF文件中的注释? 操作教程: ...
- 如何批量删除SQL注释?
如何批量删除SQL注释.. 这个,可能是用来干坏事的吧.不过有时候要做一些重构,也还是有用.嘿嘿 使用工具,notepad++,注意要选择正则表达式按钮才行. [1]删除 /* */ /\*{1, ...
- 批量删除C#注释
批量删除C#注释(适用于vs开发环境) 方法: 第一步:使用Ctrl+H快捷键,打开查询替换窗口 第二步:在‘查找选项’中,勾选‘使用’‘正则表达式’ 第三步:在‘查找内容’中,填写正则表达式[\t] ...
- 批量删除c文件和h文件中的注释
不知道大家有没有批量删除c文件和h文件中注释的需要,说起来搞笑,偶然翻出来早先写的一份,首先楼猪不是闲的蛋疼写这东西,工作需要,哪里要砖就要搬.冷门的东西大家需要的时候也不一定好找,分享给大家,省的自 ...
- vim实现批量注释和批量删除注释
批量注释 1.进入文档,vim test.txt 后,按住ctrl+v进入VISUAL BLOCK模式,上下选择需要注释的行 2.按大写键,再按i,或者直接按shift+i,进入INSERT模式,输入 ...
- VS中批量删除注释
批量删除: 按ctrl+H 选上正则表达式 Find what: //.* Replace with: (空) 点replace all就行了
- Redis【知识点】批量删除指定Key
Redis中有删除单条数据的命令DEL但是他没有批量删除多条数据的方法,那我们怎么去批量删除多条数据呢! 第一种方式 /work/app/redis/bin/redis-cli -a youpassw ...
- 使用easyui实现列表的批量删除
使用easyui实现列表的批量删除 首先要做的就是增加一个多选框 <table id="otGrid" nowrap="false" style=&quo ...
- VS中批量删除cs代码中的#region和#endregion
Visual Studio中如何批量删除cs代码中的#region和#endregion,不删除它们中间的代码,只删除这两个标记及标记的注解的方法.Vs中提供了很强大的文本查找与替换功能,简单的替换只 ...
随机推荐
- thinkphp3.1 缓存配置设置读取
以下黄字是我用的代码: //设置缓存名为zgg,内容为zongguagua,有效时间60秒 cache('zgg',"zongguagua",60); //读取缓存 if(cach ...
- OK6410开发板系统安装---嵌入式回归第二篇
1. 嵌入式系统须要被安装到开发板的nandflash上 或者 SD卡上 2. 须要安装的嵌入式Linux系统能够分三个部分 watermark/2/text/aHR0cDovL2Jsb2cuY3Nk ...
- 【t083】买票
[题目链接]:http://noi.qz5z.com/viewtask.asp?id=t083 [题解] 可以看一下: 钱数很小; 最大才10000; 即使每张票都是1元; 最多也只能买10000张票 ...
- [TypeScript] Using ES6 and ESNext with TypeScript
TypeScript is very particular about what is and isn't allowed in a TS file to protect you from commo ...
- JAVA 安装JDK注意事项
在JAVA jdk安装的时候,文件夹名称最好不要有中文,有逗号,有下划线,空格等问题.这样easy出错,比方以下几个安装路径easy出错 java文件夹/jdk1.6_x86/ 这样的就是 ...
- js实现去文本换行符小工具
js实现去文本换行符小工具 一.总结 一句话总结: 1.vertical属性使用的时候注意看清定义,也注意父元素的基准线问题.vertical-align:top; 2.获取textareaEleme ...
- 验证redis的快照和AOF
http://blog.csdn.net/lichangzai/article/details/8692103 redis持久化简介: redis是一个支持持久化的内存数据库,也就是说redis需要经 ...
- 怎样在log4j.xml配置文件中引入变量:小公司经验较多的我和阿里UC等大公司经验较多的Boss,一些技术交流和探讨
从最初学习使用log4j的时候,网上和书本上主要都是使用"log4j.properties"这种属性格式,配置日志.多年以来,一直使用这种格式,总的来说,简单.够用. 而有十 ...
- linux下Java程序中插入DB中国的数据乱码问题
首先,插入到DB数据,在Linux在查询时,现场展示??. 再次,在windows连接到db上,查看的结果并非乱码. 改动Eclipse软件中的编码:如上图:windows菜单->prefere ...
- AnimatorSet和PropertyValuesHolders.ofKeyframe
如果要多个动画配合工作,需要把他们放入AnimatorSet中 ObjectAnimator animator1 = ObjectAnimator.ofFloat(...); animator1.se ...