文本替换程序代码

本文是一个文本替换程序的源代码,代码只对ANSI做处理。

 

#include <stdio.h> #include <stdlib.h> #include <string> using namespace std; #define BLOCKSIZE 10 void ReplaceMemMore(char* buff,char* src,char* dest); void ReplaceMemLess(char* buff,char* src,char* dest); void ReplaceFileMore(const wchar_t* path,const wchar_t* tempPath,char* src,char* dest); void ReplaceFileLess(const wchar_t* path,const wchar_t* tempPath,char* src,char* dest); void ReplaceFile(wstring path,char* src,char* dest); int NumOfStr(char* buff,char* src); void main() {  wchar_t buff[256];  char src[16];  char dest[16];  memset(buff,0,sizeof(wchar_t)*256);  memset(src,0,sizeof(char)*16);  memset(dest,0,sizeof(char)*16);

 printf("please input your file path(ANSI)\n");  wscanf(L"%s",buff);  printf("please input Src character \n");  scanf("%s",src);  printf("please input dest character \n");  scanf("%s",dest);

 wstring path(buff);  ReplaceFile(path,src,dest);

} ////////////////////////////////////////////////////////////////////////////////////// //函数功能:用给定的字符串dest替换文件path中的字符串src //函数参数:path,文件路径;src,被替换的字符串,dest,替换成的字符串 //函数返回:无 //函数说明:2011-11-30 HRX ////////////////////////////////////////////////////////////////////////////////////// void ReplaceFile(wstring path,char* src,char* dest) {  wstring pathTemp=path.substr(0,path.rfind(L'\\'))+L"\\temp.txt";

 const wchar_t* pPathTemp=pathTemp.c_str();  const wchar_t* pPath=path.c_str();  if (strlen(dest)>strlen(src))  {   ReplaceFileMore(pPath,pPathTemp,src,dest);  }  else  {   ReplaceFileLess(pPath,pPathTemp,src,dest);  }  _wremove(pPath);  _wrename(pPathTemp,pPath); } ////////////////////////////////////////////////////////////////////////////////////// //函数功能:用给定的字符串dest替换文件path中的字符串src,当dest长度小于src时调用 //函数参数:path,文件路径;src,被替换的字符串,dest,替换成的字符串;tempPath,文件暂存路径 //函数返回:无 //函数说明:2011-11-30 HRX ////////////////////////////////////////////////////////////////////////////////////// void ReplaceFileLess(const wchar_t* path,const wchar_t* tempPath,char* src,char* dest) {  FILE* fr=_wfopen(path,L"rb");  FILE* fw=_wfopen(tempPath,L"wb");  int lenSrc=strlen(src);  int lenDest=strlen(dest);  int dist=lenSrc-lenDest;  int n=0;  char buff[BLOCKSIZE+1];  memset(buff,0,sizeof(char)*(BLOCKSIZE+1));  char* pBuff=NULL;  while(fread(buff,1,BLOCKSIZE,fr))  {   n=NumOfStr(buff,src);   if (n==0)   {    for (int i=0;i<BLOCKSIZE;++i)    {

    if(*(buff+i)==0) break;     fputc(*(buff+i),fw);    }   }   else   {    ReplaceMemLess(buff,src,dest);    for (int i=0;i<BLOCKSIZE;++i)    {

    if(*(buff+i)==0) break;     fputc(*(buff+i),fw);    }   }   //fseek(fr,1-strlen(src),SEEK_CUR);   memset(buff,0,sizeof(char)*BLOCKSIZE);  }  fclose(fr);  fclose(fw);

} ////////////////////////////////////////////////////////////////////////////////////// //函数功能:用给定的字符串dest替换文件path中的字符串src,当dest长度大于src时调用 //函数参数:path,文件路径;src,被替换的字符串,dest,替换成的字符串;tempPath,文件暂存路径 //函数返回:无 //函数说明:2011-11-30 HRX ////////////////////////////////////////////////////////////////////////////////////// void ReplaceFileMore(const wchar_t* path,const wchar_t* tempPath,char* src,char* dest) {  FILE* fr=_wfopen(path,L"rb");  FILE* fw=_wfopen(tempPath,L"wb");  int lenSrc=strlen(src);  int lenDest=strlen(dest);  int dist=lenDest-lenSrc;  int n=0;  char buff[BLOCKSIZE];  memset(buff,0,sizeof(char)*BLOCKSIZE);  char* pBuff=NULL;  while(fread(buff,1,BLOCKSIZE,fr))  {   n=NumOfStr(buff,src);   if (n==0)   {    for (int i=0;i<BLOCKSIZE;++i)    {

    if(*(buff+i)!=0) fputc(*(buff+i),fw);    }   }   else   {    pBuff=(char*)malloc(BLOCKSIZE+n*dist);    memset(pBuff,0,BLOCKSIZE+n*dist);    if(fseek(fr,-BLOCKSIZE,SEEK_CUR)==-1)fseek(fr,0,SEEK_SET);    fread(pBuff,1,BLOCKSIZE,fr);    ReplaceMemMore(pBuff,src,dest);    for (int i=0;i<(BLOCKSIZE+n*dist);++i)    {

    if(*(pBuff+i)!=0) fputc(*(pBuff+i),fw);    }    free(pBuff);   }   //fseek(fr,1-strlen(src),SEEK_CUR);   memset(buff,0,sizeof(char)*BLOCKSIZE);  }  fclose(fr);  fclose(fw);

} ////////////////////////////////////////////////////////////////////////////////////// //函数功能:用给定的字符串dest替换字符串buff中的字符串src,当dest长度大于src时调用 //函数参数:buff,要查找的字符串;src,被替换的字符串,dest,替换成的字符串; //函数返回:无 //函数说明:2011-11-30 HRX ////////////////////////////////////////////////////////////////////////////////////// void ReplaceMemMore(char* buff,char* src,char* dest) {  int LenSrc=strlen(src);  int LenDest=strlen(dest);  int Dist=LenDest-LenSrc;  char* temp=NULL;//指向最后一个字符\0  while (buff=strstr(buff,src))  {   temp=buff+strlen(buff);   while (temp!=(buff+Dist-1))   {//字符后退'差'个空间    *(temp+Dist)=*temp;    temp--;   }   for (int i=0;i<LenDest;i++)   {//给空出的空间赋值    *(buff+i)=*(dest+i);   }   buff=buff+LenDest;  } } ////////////////////////////////////////////////////////////////////////////////////// //函数功能:用给定的字符串dest替换字符串buff中的字符串src,当dest长度小于src时调用 //函数参数:buff,要查找的字符串;src,被替换的字符串,dest,替换成的字符串; //函数返回:无 //函数说明:2011-11-30 HRX ////////////////////////////////////////////////////////////////////////////////////// void ReplaceMemLess(char* buff,char* src,char* dest) {

 int LenSrc=strlen(src);  int LenDest=strlen(dest);  int Dist=LenSrc-LenDest;  char* temp=NULL;//指向最后一个字符\0  while (buff=strstr(buff,src))  {   temp=buff;   while (*temp!=0)   {//字符后退'差'个空间    *temp=*(temp+Dist);    ++temp;   }   for (int i=0;i<LenDest;i++)   {//给空出的空间赋值    *(buff+i)=*(dest+i);   }   buff=buff+LenDest;  } } ////////////////////////////////////////////////////////////////////////////////////// //函数功能:计算字符串buff中含有字符串src的个数 //函数参数:buff,要查找的字符串;src,被查找的字符串; //函数返回:int;buff中含有src的个数 //函数说明:2011-11-30 HRX ////////////////////////////////////////////////////////////////////////////////////// int NumOfStr(char* buff,char* src) {  int n=0;  int len=strlen(src);  while (buff=strstr(buff,src))  {   ++n;   buff+=len;  }  return n; }

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值