码迷,mamicode.com
首页 > 编程语言 > 详细

量删除C和C++注释

时间:2017-08-17 10:24:40      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:代码   ase   blog   mkdir   3.x   name   pen   递归   注释   

使用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++注释

标签:代码   ase   blog   mkdir   3.x   name   pen   递归   注释   

原文地址:http://www.cnblogs.com/findumars/p/7379568.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!