批量删除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中提供了很强大的文本查找与替换功能,简单的替换只 ...
随机推荐
- php实现求字符串第一个只出现一次的字符
php实现求字符串第一个只出现一次的字符 一.总结 很简单的逻辑 1.两个数组,一个存字母,一个存字母出现的次数 二.php实现求字符串第一个只出现一次的字符 题目描述 在一个字符串(1<=字符 ...
- jquery的mouseover和mouseout闪烁问题
$(document).ready(function(){ $(".anli").hover( function(){ var $div = $(this); t = setInt ...
- Cisco IOS images
Cisco IOS images for Dynamips - GNS3http://docs.gns3.com/1-kBrTplBltp9P3P-AigoMzlDO-ISyL1h3bYpOl5Q8m ...
- Qt 无标题无边框程序的拖动和改变大小
最近做项目遇到的问题,总结下. 有时候我们觉得系统的标题栏和按钮太丑太呆板,想做自己的标题栏以及最大化.最小化.关闭,菜单按钮,我们就需要 setWindowFlags(Qt::FramelessWi ...
- 前端切图:调用百度地图API
原型图 图片发自简书App <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- 【u203】文件夹计数
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 可以用路径来描述文件夹,路径为一个包含若干部分的字符串,之间用'/'分隔.每部分均为一个文件夹的名称, ...
- hadoop 3.x org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode="/":tele:supergroup:drwxr-xr-x
权限不足,上传文件时应当使用启动hadoop的账户,即在获取FileSystem时就应当指定用户 修改后的代码 public class Demo1 { public static void main ...
- Android Studio如何打jar包
前言 公司经常和客户提供SDK,提供一个jar包sdk是一件很平常的事.Eclipse 有图形界面和向导供开发者将一个项目导出为jar包,相对来讲是比较简单的,切换到Android Studio后,则 ...
- TEdit,TMemo背景透明(SetWindowLong(WS_EX_TRANSPARENT)增加透明风格)
The component below works perfectly, except for the following problem: 1) Saves the component below ...
- java写文件时往末尾追加文件(而不是覆盖原文件),的两种方法总结
代码如下: import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; public ...