欢迎 x1982129 加入本站!
 免费注册  用户登陆  汇款方式  汇款确认  产品报价  联系我们  帮助中心
加入收藏
设为首页
会员体系
申请VIP
网站首页 光盘超市 软件下载 技术文章 专题 用户中心 VIP会员 技术论坛 网站留言 娱乐中心 卓越资源
今天是:2008年11月20日 星期四  您现在位于: 首页 → 技术文章 → 模仿sed部分功能,c ...
   模仿sed部分功能,c 的面向对象描述
作者:pals.cublog.cn  出处:pals.cublog.cn  更新时间: 2007年02月28日 

//SimpSed.h
#
ifndef SIMP_SED
#define SIMP_SED

#include <stdio.h>
//#include

#include "SedScript.h"

#define PATTERN_SPACE_SIZE 0x100000
#define HOLD_SPACE_SIZE 0x100000
#define LINE_SIZE 0x100

#define MSG_FILE_NOT_OPEN "Cannot open file %s.\n"

typedef struct TSimpSed {

    FILE *_file;
    int _lineNumber;
    char _line[LINE_SIZE];
    char *_holdSpace;
    char *_patternSpace;
    SedScript *scriptList;

    void (*parseScript)(struct TSimpSed *self, char *script);
    void (*runScript)(struct TSimpSed *self);
    
    /** sed commands, such as x,d,h,g,p and so on. */
    int (*next)(struct TSimpSed *self); // n, returns -1, 0, 1

    int (*nextA)(struct TSimpSed *self); // N, returns -1, 0, 1

    void (*exchange)(struct TSimpSed *self); // x

    void (*delete)(struct TSimpSed *self); // d

    void (*hold)(struct TSimpSed *self); // h

    void (*holdA)(struct TSimpSed *self); // H

    void (*get)(struct TSimpSed *self); // g

    void (*getA)(struct TSimpSed *self); // G

    void (*print)(struct TSimpSed *self); // p

    
    void (*destroy)(struct TSimpSed *self);
    
    // public..

    void (*exec)(struct TSimpSed *, char *script, char *fileName);
} SimpSed;    

SimpSed getSed();

#endif

//SedScript.h
#
ifndef SED_SCRIPT
#define SED_SCRIPT

#include "SedAddress.h"

// CMD Types

#define SED_CMD_PRINT 1
#define SED_CMD_NEXT 2
#define SED_CMD_NEXTA 3
#define SED_CMD_HOLD 4
#define SED_CMD_HOLDA 5
#define SED_CMD_GET 6
#define SED_CMD_GETA 7
#define SED_CMD_DELETE 8
#define SED_CMD_EXCHANGE 9

typedef struct TSedScript {
        
        SedAddress address;
        char cmd;
        char *params;
        
        int (*getCmdType)(struct TSedScript *self);
} SedScript;

SedScript getSedScript(char *address, char cmd, char *params);

#endif

//SedAddress.h
#
ifndef SED_ADDRESS
#define SED_ADDRESS

// ADDR TYPES ( $ not included )

#define SED_ADDR_NUMBER 1
#define SED_ADDR_NUMBER_RANGE 2
#define SED_ADDR_PATTERN 3
#define SED_ADDR_PATTERN_RANGE 4

typedef struct TSedAddress {
        
        int type;
        int startLine;
        int stopLine;
        char *startPattern;
        char *stopPattern;
        int rangeFlag;
        
        int (*inRange)(struct TSedAddress *self);
} SedAddress;

SedAddress getSedAddress(char *addr);

#endif

 (本文已被浏览 1835 次)
 发布人:sdccf
 → 推荐给我的好友
上篇文章:Linux下的几个代码比较工具
下篇文章:信号量练习
 相关文章:
SED单行脚本快速参考 shell学习资料汇总
Linux/Unix流编辑器Sed学习资料 sed命令详解
sed工具介绍实例 SED单行脚本快速参考(Unix 流编辑器)
sed函数参数大全(4) sed函数参数大全(3)
sed函数参数大全(2) sed函数参数大全(1)
在unix里替换文字的shell程序 sed学习笔记
在unix里替换文字的程序 sed应用实例

相关搜索
查看百度中关于模仿sed部分功能,c 的面向对象描述的更多内容
查看google中关于模仿sed部分功能,c 的面向对象描述的更多内容
   文章分类
操作系统 |
SCO_UNIX  Sun_Solaris  IBM_AIX  HP_UX  Linux  BSD  Tru64_UNIX 
通用UNIX知识  Windows  Minix 
程序设计 |
Shell编程  C/C++  汇编  PHP  JAVA  Perl  Python 
ASP/HTML  XML  中间件 
数据库 |
Oracle  Informix  Sybase  Fox  DB2  SQL  MySQL 
PostgreSQL 
网络应用 |
网络应用 
计算机硬件 |
计算机主机  打印机  路由器  交换机  终端  磁带机  MO 
刻录机  终端服务器  调制解调器 
   文章评论
  → 评论内容 (点击查看)   共0条评论,每页显示5条评论   浏览所有评论
(没有相关评论)
  → 发表我的评论
您的姓名: 您的Email:
评论内容:
250字内
发表评论:      发表评论须知 →
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  • 关于我们 ┋  网站留言 ┋  网站地图 ┋  友情链接 ┋  与我在线 ┋  汇款确认 ┋  管理 ┋  TOP
    Linux.Unix爱好者家园  http://www.unix-cd.com/
    联系我们:sdccf@163.com
    腾讯QQ: 7644599
    备案序号:鲁ICP备05000455号
    Copyright (c) 2001-2008 Unix-cd.com. All Rights Reserved.