软件工具——字符串过滤器

原创 2003年11月09日 22:59:00

/*
 *在进行软件开发时,为自己编写几款有用的工具软件,会帮助自己更加容易和高效的完成工作
 *这里是一款将源程序中的字符串分离出来,并使用宏代替的软件工具,你可以看到,它是如此简单,
 *以至于任何一个程序员都可以轻易做到,但我不敢想象,如果没有它,
 *用手工完成相同的工作将浪费我多少宝贵的时间
 */
//检测字符串,将字符串用宏替代,并书写宏文件,并将宏文件加入文件头
//宏格式STR_$FILENAME_$LINE_$NUM
#include "stdio.h"
#include "assert.h"
#include "windows.h"
//对输入文件进行过滤
int strext(char *filename,char *headname)
{
  FILE *fpin,*fpout,*fphead;
  int num=0;
  char outfilename[20];
  char ch;
  int line=2;//第一行加入头文件引用
  //输入文件
  if(!filename||!(fpin=fopen(filename,"r")))
  {
    printf("输入文件%s未能打开。/n",filename);
    return 1;
  }
  sprintf(outfilename,"%s.tmp",filename);
  //输出文件
  if(!(fpout=fopen(outfilename,"w")))
  {
    printf("输出文件%s不能打开/n",outfilename);
    fclose(fpin);
    return 1;
  }
  //输出头文件
  if(!headname||!(fphead=fopen(headname,"a")))
  {
    fphead=stdout;
    printf("/*输出头文件不存在,使用显示器代替。*//n");
  }
  //加入头文件
  if(headname)
    fprintf(fpout,"#include /"%s/"/n",headname);
  //开始过滤
  fprintf(fphead,"/*%s*//n",filename);
  while((ch=fgetc(fpin))&&ch!=EOF)
  {
    while(ch=='/n')//消除空行
    {
      fputc(ch,fpout);//输出回车符
      line++;         //行++
      ch=fgetc(fpin); //读取下一行首
      if(ch=='#')//行首为#,此为宏
      {
        fputc(ch,fpout);//输出#
        while((ch=fgetc(fpin))&&(ch!=EOF)&&(ch!='/n'))
          fputc(ch,fpout);//跳过该行//输出该行内容
        if(ch==EOF)
          return 0;
      }
    }
    if(ch=='//')////// //跳过转意字符
    {
      fputc('//',fpout);
      ch=fgetc(fpin);
      fputc(ch,fpout);
    }
    else if(ch=='/"')//字符串开始
    {
      char *p=strchr(filename,'.');
      if(p)
        *p='/0';
      fprintf(fpout,"STR_FILE%s_LINE%d_NUM%d",filename,line,++num);
      fprintf(fphead,"#define STR_FILE%s_LINE%d_NUM%d/t/"",filename,line,num);
      if(p)
        *p='.';
      p=NULL;
      while((ch=fgetc(fpin))&&ch!=EOF)
      {
        if(ch=='/n')
        {
          fputc('//',fphead);
          fputc('n',fphead);
        }
        else if(ch=='//')
        {
          fputc('//',fphead);
          ch=fgetc(fpin);
          fputc(ch,fphead);
        }
        else if(ch=='/"')//字符串结束
        {
          fputc('/"',fphead);//分号
          fputc('/n',fphead);//断行
          break;
        }
        else
          fputc(ch,fphead);
      }
    }
    else
      fputc(ch,fpout);
  }
  fclose(fpin);
  fclose(fpout);
  if(fphead!=stdout)
    fclose(fphead);
  remove(filename);
  rename(outfilename,filename);
  return 0;

}
/*
 *驱动程序,这里使用了WIN32API,你可以替换成你的编译器提供的文件查找函数.
 */
int main(int argc,char *argv[])
{
  if(argc>1) //至少有一个输入
  {
    WIN32_FIND_DATA FindFileData;
    //处理通配符 * ?
    HANDLE hFind=FindFirstFile(argv[1],&FindFileData);
    if(-1!=(int)hFind)
    {
      strext(FindFileData.cFileName,argv[2]);
      while(FindNextFile(hFind,&FindFileData))
        strext(FindFileData.cFileName,argv[2]);
      puts("/n---------------------------完成----------------------/n");
      FindClose(hFind);
    }
    else
    {
      printf("输入文件%s无效。/n",argv[1]);
    }
  }
  else
  {
    printf("本程序将源代码中的字符串用宏替换,并自动生成宏头文件/n");
    printf("用法:strext <输入源文件> [输出头文件]/n");
    printf("例子:strext *.c strhead.h/n");
  }
  getch();
  return 0;
}

批量大文本筛选过滤工具开发记录

批量大文本筛选过滤工具开发记录本周花了两三天的时间做了一个大文本数据筛选工具,主要是针对excel打开很慢或者无法打开的几百兆乃至几G的csv、txt文件,提供常规的数据筛选、统计和输出功能。这个大文...
  • xiluoduyu
  • xiluoduyu
  • 2015年07月21日 17:27
  • 2926

几种字符串编码自动识别工具探讨

几种字符串编码自动识别工具探讨
  • aflyeaglenku
  • aflyeaglenku
  • 2016年02月19日 13:10
  • 5956

Java Filter过滤xss注入非法参数的方法

web.xml: XSSFiler com.paic.mall.web.filter.XssSecurityFilter ...
  • feng_an_qi
  • feng_an_qi
  • 2015年05月12日 11:00
  • 7079

【搬家】【软件工具】Terminal & Command 差异探讨——第二部分

a 上一篇说完了 壳程序 的本质以及 Linux/Unix 家族的 Terminal 和不同的 Shell 环境,今天我们来看看 Windows。 目前的 Windows 里,提供了2个不...
  • tiwoo
  • tiwoo
  • 2014年06月18日 16:20
  • 300

【搬家】【软件工具】Alfred 2.0 Workflow 简介(2)——制作一个调用 Shell 命令的 Workflow

a 昨天的博客里,我与各位一起学习了如何创建我们的第一个 Workflow,其实感觉就像搭积木一般简单。之后我又尝试了其他几种示例,终于摸索到如何更进一步,调用 terminal 执行 Sh...
  • tiwoo
  • tiwoo
  • 2014年06月18日 16:16
  • 942

【搬家】【软件工具】Alfred 2.0 Workflow 简介(1)——搭积木式配置自己的第一个 Workflow

本文最早于 2014年1月3日于本人个人博客(http://mooowooo.tk)发表,现博客搬家至此,转载请注明出处。...
  • tiwoo
  • tiwoo
  • 2014年06月18日 16:07
  • 712

可用来抓数据的开源爬虫软件工具

可用来抓数据的开源爬虫软件工具
  • john1337
  • john1337
  • 2017年03月17日 08:29
  • 531

VS2008自带打包软件工具

第一步,新建项目,如图选安装部署 第二步,在应用程序文件夹中添加要打包的编译文件(bin目录下) 第三步,创建上一步中exe文件夹的快捷方式,分别放到左边下面两个文件夹中,可以更改名称,可以在右边...
  • vbloveshllm
  • vbloveshllm
  • 2012年04月12日 14:24
  • 1721

项目管理、Bug管理软件工具:禅道,BugFree,Redmine

项目管理、Bug管理软件工具:禅道,BugFree,Redmine  BugFree是借鉴微软的研发流程和Bug管理理念,使用PHP+MySQL独立写出的一个Bug管理 系统xx...
  • Chengxuyuannixi
  • Chengxuyuannixi
  • 2016年10月21日 18:12
  • 995

33款可用来抓数据的开源爬虫软件工具

要玩大数据,没有数据怎么玩?这里推荐一些33款开源爬虫软件给大家。 爬虫,即网络爬虫,是一种自动获取网页内容的程序。是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优...
  • c1782746138
  • c1782746138
  • 2015年11月16日 15:41
  • 2521
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:软件工具——字符串过滤器
举报原因:
原因补充:

(最多只允许输入30个字)