|
写一个脚本来实现C++程序注释的去除。
其中有C语言的注释方式,也有C++语言的注释方式
注释有以下几种方式:
- /// 标志此站点在采集时是否出错,链接出错不算错
- static int g_error = false;
- if(site.find("ftp://") == 0)
- int pos3 = site.rfind("@"); //从后开始找,因为密码可能含有@
- /**
- 从字符串中分离出站点信息, 并加入到站点队列中, 保证不重复
- @param[in] siteString 含有站点信息的字符串
- @param[out] siteVec 站点队列
- */
- struct struct_string_in_file
- {
- unsigned short len;
- char line[1024]; // Fputs及Fgets支持的字符串最大长度(1024)
- };
-
复制代码
脚本如下:
- #!/bin/sh
- sed -i ‘{/^[ \t]*\/\//d'
- s/\/\/[^"]*//
- s/\/\*.*\*\///
- /^[ \t]*\/\*/,/.*\*\//d
- }' $1
复制代码
结果发现,上面
[quto]
struct struct_string_in_file
{
unsigned short len;
char line[1024]; // Fputs及Fgets支持的字符串最大长度(1024)
};
[/quto]
这一部分的汉字部分不能够删除,请教大家,这是什么原因?
如果单独只处理上面这一部分,可以删除汉字。但是如果处理整个文件的话,汉字就不能够删除。
注意上面说的汉字,是英文与中文相邻的部分。
附文件如下:
- /**
- * 定义文件类
- *
- * 此类简单封装一下系统提供的文件指针,并加入一些特有的操作
- *
- * @file file.h
- * @author [email]xieyubo@gmail.com[/email]
- * @date 2006.1
- */
- #ifndef FILE_H
- #define FILE_H
- #include "../sfc-src/sfexception.h"
- using namespace SFC;
- #include <string>
- #include <iostream>
- using namespace std;
- #include <stdlib.h>
- #include <stdio.h>
- /**
- * 定义文件类
- * @note 此类并未经过良好设计,绝对不要滥用,比如说把此类的一个对象直接赋值给另一个对象
- */
- class File
- {
- public:
- /**
- * 构造函数
- *
- * 按指定方式打开文件,均为二进制打开方式
- *
- * @param file_name 文件名
- * @param open_way 打开方式,可为如下值:
- * 'r': 只读打开(默认值)
- * 'w': 只写打开
- * 'a': 添加打开
- */
- File(const string& file_name, const char open_way = 'r') throw(SFException);
- /**
- * 构造函数
- *
- * 按指定方式打开文件,均为二进制打开方式
- *
- * @param file_name 文件名
- * @param open_way 打开方式,可为如下值:
- * 'r': 只读打开(默认值)
- * 'w': 只写打开
- * 'a': 添加打开
- */
- File(const char* file_name, const char open_way = 'r') throw(SFException);
- /**
- * 析构函数
- */
- ~File();
- /**
- * 关闭文件
- */
- void Close();
-
- void Fputs(const char* str);
-
- bool Fwrite(const void* buffer, unsigned int size)
- {
- return fwrite(buffer, size, 1, fp);
- }
-
- bool Fread(off_t offset, void* buffer, unsigned int size)
- {
- Fseek(offset);
- return Fread(buffer, size);
- }
-
- bool Fread(void* buffer, unsigned int size)
- {
- return fread(buffer, size, 1, fp);
- }
-
- void Fseek(off_t offset)
- {
- fseeko(fp, offset, SEEK_SET);
- }
- off_t GetFileSize()
- {
- off_t pos = Ftell();
- fseeko(fp, 0, SEEK_END);
- off_t size = Ftell();
- Fseek(pos);
- return size;
- }
- /**
- 获取字符串
- */
- bool Fgets();
-
- /**
- * 保存文件的当前位置, 并跳转到指定位置
- *
- * @param[in] offset 文件需跳转到的指定位置
- */
- void SaveAndSetPos(off_t offset = 0)
- {
- pos = Ftell();
- Fseek(offset);
- }
-
- /**
- * 恢复先前保存的文件位置
- */
- void RestorePos()
- {
- Fseek(pos);
- }
-
- /**
- 返回文件指针的位置
- */
- off_t Ftell()
- {
- return ftello(fp);
- }
-
- bool Ferror()
- {
- return ferror(fp);
- }
- void Fflush()
- {
- fflush(fp);
- }
- struct struct_string_in_file
- {
- unsigned short len;
- char line[1024]; // Fputs及Fgets支持的字符串最大长度(1024)
- };
-
- struct_string_in_file str;
-
- private:
- off_t pos;
- FILE* fp;
-
- };
- #endif
复制代码 |
|