使用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++注释的更多相关文章

  1. 怎样批量删除PDF文件中的注释

    日常我们在阅读一些PDF文章时候,我们会发现有些PDF文章带有非常多的注释,显得非常不美观,影响了阅读体验.那么PDF文章里的批注应该怎么进行删除呢?怎样批量删除PDF文件中的注释?   操作教程: ...

  2. 如何批量删除SQL注释?

    如何批量删除SQL注释.. 这个,可能是用来干坏事的吧.不过有时候要做一些重构,也还是有用.嘿嘿 使用工具,notepad++,注意要选择正则表达式按钮才行. [1]删除 /*   */ /\*{1, ...

  3. 批量删除C#注释

    批量删除C#注释(适用于vs开发环境) 方法: 第一步:使用Ctrl+H快捷键,打开查询替换窗口 第二步:在‘查找选项’中,勾选‘使用’‘正则表达式’ 第三步:在‘查找内容’中,填写正则表达式[\t] ...

  4. 批量删除c文件和h文件中的注释

    不知道大家有没有批量删除c文件和h文件中注释的需要,说起来搞笑,偶然翻出来早先写的一份,首先楼猪不是闲的蛋疼写这东西,工作需要,哪里要砖就要搬.冷门的东西大家需要的时候也不一定好找,分享给大家,省的自 ...

  5. vim实现批量注释和批量删除注释

    批量注释 1.进入文档,vim test.txt 后,按住ctrl+v进入VISUAL BLOCK模式,上下选择需要注释的行 2.按大写键,再按i,或者直接按shift+i,进入INSERT模式,输入 ...

  6. VS中批量删除注释

    批量删除: 按ctrl+H 选上正则表达式 Find what: //.* Replace with: (空) 点replace all就行了

  7. Redis【知识点】批量删除指定Key

    Redis中有删除单条数据的命令DEL但是他没有批量删除多条数据的方法,那我们怎么去批量删除多条数据呢! 第一种方式 /work/app/redis/bin/redis-cli -a youpassw ...

  8. 使用easyui实现列表的批量删除

    使用easyui实现列表的批量删除 首先要做的就是增加一个多选框 <table id="otGrid" nowrap="false" style=&quo ...

  9. VS中批量删除cs代码中的#region和#endregion

    Visual Studio中如何批量删除cs代码中的#region和#endregion,不删除它们中间的代码,只删除这两个标记及标记的注解的方法.Vs中提供了很强大的文本查找与替换功能,简单的替换只 ...

随机推荐

  1. iOS开发webView的使用一

    #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutl ...

  2. 菜单之二:使用xml文件定义菜单 分类: H1_ANDROID 2013-11-03 09:39 1038人阅读 评论(0) 收藏

    参考<疯狂android讲义>2.10节 P174,参见归档project:XmlMenuDemo.zip 一般推荐使用XML文件定义菜单. 基本步骤如下: 1.定义布局文件 为简单显示原 ...

  3. 程序猿的还有一出路:大数据project师

    非常多年前我非常郁闷地写了一篇博客<程序猿的出路在哪里?>,之所以郁闷.我记得是看了中国男足的比赛,不由自主对照自已苦逼的程序猿生涯,以前对中国软件的感情有如对中国男足,绝望到没有不论什么 ...

  4. [Angular] Create custom validators for formControl and formGroup

    Creating custom validators is easy, just create a class inject AbstractControl. Here is the form we ...

  5. 学汇编的时候可以拿IDA之类的反汇编工具辅助学习,再用gdb或者IDA动态调试,跟踪每条指令的 执行结果。都不难

    作者:潘安仁链接:https://www.zhihu.com/question/40720890/answer/87926792来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  6. Android selector背景以及透明色

    selector可以设置图片或layout的点击效果: <?xml version="1.0" encoding="utf-8"?> <sel ...

  7. Mysql用户本机登陆不成功的解决

    mysql新建一个用户,本机不能登陆,但是远程能够登陆,不知什么原因,最后查阅 http://blog.itpub.net/12679300/viewspace-1453490/ 这篇文章得以解决,进 ...

  8. [TypeScript] Use the never type to avoid code with dead ends using TypeScript

    Example 1: A never stop while loop return a never type. function run(): never { while(true){ let foo ...

  9. android打包SDK具体操作(包含第三方的jar一起打包)

    一.背景 因为最近编写的android项目,需要编写对应的SDK给别人使用,还好以前我都是拆成module写的,所以还不太费工夫,不过因为一些module里面包含第三方的jar,所以打包有点麻烦 二. ...

  10. Ubuntu server使用命令行上板VPNclient

    Ubuntu server使用命令行上板VPNclient VPN,虚拟专用网络,这个技术还是非常有用的.近期笔者參与的项目中就使用上了VPN,大概情况是这种.有两个开发团队,在异地,代码服务器在深圳 ...