文本替换程序代码

本文介绍了一个文本替换程序的源代码实现,该程序能够处理ANSI编码的文本文件,并支持不同长度字符串之间的替换。

文本替换程序代码

标签: pathcharacterfileinput
  1771人阅读  评论(0)  收藏  举报
  分类:
 

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

 

[cpp]  view plain  copy
  1. <p>#include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string>  
  4. using namespace std;  
  5. #define BLOCKSIZE 10  
  6. void ReplaceMemMore(char* buff,char* src,char* dest);  
  7. void ReplaceMemLess(char* buff,char* src,char* dest);  
  8. void ReplaceFileMore(const wchar_t* path,const wchar_t* tempPath,char* src,char* dest);  
  9. void ReplaceFileLess(const wchar_t* path,const wchar_t* tempPath,char* src,char* dest);  
  10. void ReplaceFile(wstring path,char* src,char* dest);  
  11. int NumOfStr(char* buff,char* src);  
  12. void main()  
  13. {  
  14.  wchar_t buff[256];  
  15.  char src[16];  
  16.  char dest[16];  
  17.  memset(buff,0,sizeof(wchar_t)*256);  
  18.  memset(src,0,sizeof(char)*16);  
  19.  memset(dest,0,sizeof(char)*16);</p><p> printf("please input your file path(ANSI)\n");  
  20.  wscanf(L"%s",buff);  
  21.  printf("please input Src character \n");  
  22.  scanf("%s",src);  
  23.  printf("please input dest character \n");  
  24.  scanf("%s",dest);</p><p> wstring path(buff);  
  25.  ReplaceFile(path,src,dest);</p><p>}  
  26. //////////////////////////////////////////////////////////////////////////////////////  
  27. //函数功能:用给定的字符串dest替换文件path中的字符串src  
  28. //函数参数:path,文件路径;src,被替换的字符串,dest,替换成的字符串  
  29. //函数返回:无  
  30. //函数说明:2011-11-30 HRX  
  31. //////////////////////////////////////////////////////////////////////////////////////  
  32. void ReplaceFile(wstring path,char* src,char* dest)  
  33. {  
  34.  wstring pathTemp=path.substr(0,path.rfind(L'\\'))+L"<a href="file://\\temp.txt">\\temp.txt</a>";</p><p> const wchar_t* pPathTemp=pathTemp.c_str();  
  35.  const wchar_t* pPath=path.c_str();  
  36.  if (strlen(dest)>strlen(src))  
  37.  {  
  38.   ReplaceFileMore(pPath,pPathTemp,src,dest);  
  39.  }  
  40.  else  
  41.  {  
  42.   ReplaceFileLess(pPath,pPathTemp,src,dest);  
  43.  }  
  44.  _wremove(pPath);  
  45.  _wrename(pPathTemp,pPath);  
  46. }  
  47. //////////////////////////////////////////////////////////////////////////////////////  
  48. //函数功能:用给定的字符串dest替换文件path中的字符串src,当dest长度小于src时调用  
  49. //函数参数:path,文件路径;src,被替换的字符串,dest,替换成的字符串;tempPath,文件暂存路径  
  50. //函数返回:无  
  51. //函数说明:2011-11-30 HRX  
  52. //////////////////////////////////////////////////////////////////////////////////////  
  53. void ReplaceFileLess(const wchar_t* path,const wchar_t* tempPath,char* src,char* dest)  
  54. {  
  55.  FILE* fr=_wfopen(path,L"rb");  
  56.  FILE* fw=_wfopen(tempPath,L"wb");  
  57.  int lenSrc=strlen(src);  
  58.  int lenDest=strlen(dest);  
  59.  int dist=lenSrc-lenDest;  
  60.  int n=0;  
  61.  char buff[BLOCKSIZE+1];  
  62.  memset(buff,0,sizeof(char)*(BLOCKSIZE+1));  
  63.  char* pBuff=NULL;  
  64.  while(fread(buff,1,BLOCKSIZE,fr))  
  65.  {  
  66.   n=NumOfStr(buff,src);  
  67.   if (n==0)  
  68.   {  
  69.    for (int i=0;i<BLOCKSIZE;++i)  
  70.    {</p><p>    if(*(buff+i)==0) break;  
  71.     fputc(*(buff+i),fw);  
  72.    }  
  73.   }  
  74.   else  
  75.   {  
  76.    ReplaceMemLess(buff,src,dest);  
  77.    for (int i=0;i<BLOCKSIZE;++i)  
  78.    {</p><p>    if(*(buff+i)==0) break;  
  79.     fputc(*(buff+i),fw);  
  80.    }  
  81.   }  
  82.   //fseek(fr,1-strlen(src),SEEK_CUR);  
  83.   memset(buff,0,sizeof(char)*BLOCKSIZE);  
  84.  }  
  85.  fclose(fr);  
  86.  fclose(fw);</p><p>}  
  87. //////////////////////////////////////////////////////////////////////////////////////  
  88. //函数功能:用给定的字符串dest替换文件path中的字符串src,当dest长度大于src时调用  
  89. //函数参数:path,文件路径;src,被替换的字符串,dest,替换成的字符串;tempPath,文件暂存路径  
  90. //函数返回:无  
  91. //函数说明:2011-11-30 HRX  
  92. //////////////////////////////////////////////////////////////////////////////////////  
  93. void ReplaceFileMore(const wchar_t* path,const wchar_t* tempPath,char* src,char* dest)  
  94. {  
  95.  FILE* fr=_wfopen(path,L"rb");  
  96.  FILE* fw=_wfopen(tempPath,L"wb");  
  97.  int lenSrc=strlen(src);  
  98.  int lenDest=strlen(dest);  
  99.  int dist=lenDest-lenSrc;  
  100.  int n=0;  
  101.  char buff[BLOCKSIZE];  
  102.  memset(buff,0,sizeof(char)*BLOCKSIZE);  
  103.  char* pBuff=NULL;  
  104.  while(fread(buff,1,BLOCKSIZE,fr))  
  105.  {  
  106.   n=NumOfStr(buff,src);  
  107.   if (n==0)  
  108.   {  
  109.    for (int i=0;i<BLOCKSIZE;++i)  
  110.    {</p><p>    if(*(buff+i)!=0) fputc(*(buff+i),fw);  
  111.    }  
  112.   }  
  113.   else  
  114.   {  
  115.    pBuff=(char*)malloc(BLOCKSIZE+n*dist);  
  116.    memset(pBuff,0,BLOCKSIZE+n*dist);  
  117.    if(fseek(fr,-BLOCKSIZE,SEEK_CUR)==-1)fseek(fr,0,SEEK_SET);  
  118.    fread(pBuff,1,BLOCKSIZE,fr);  
  119.    ReplaceMemMore(pBuff,src,dest);  
  120.    for (int i=0;i<(BLOCKSIZE+n*dist);++i)  
  121.    {</p><p>    if(*(pBuff+i)!=0) fputc(*(pBuff+i),fw);  
  122.    }  
  123.    free(pBuff);  
  124.   }  
  125.   //fseek(fr,1-strlen(src),SEEK_CUR);  
  126.   memset(buff,0,sizeof(char)*BLOCKSIZE);  
  127.  }  
  128.  fclose(fr);  
  129.  fclose(fw);</p><p>}  
  130. //////////////////////////////////////////////////////////////////////////////////////  
  131. //函数功能:用给定的字符串dest替换字符串buff中的字符串src,当dest长度大于src时调用  
  132. //函数参数:buff,要查找的字符串;src,被替换的字符串,dest,替换成的字符串;  
  133. //函数返回:无  
  134. //函数说明:2011-11-30 HRX  
  135. //////////////////////////////////////////////////////////////////////////////////////  
  136. void ReplaceMemMore(char* buff,char* src,char* dest)  
  137. {  
  138.  int LenSrc=strlen(src);  
  139.  int LenDest=strlen(dest);  
  140.  int Dist=LenDest-LenSrc;  
  141.  char* temp=NULL;//指向最后一个字符\0  
  142.  while (buff=strstr(buff,src))  
  143.  {  
  144.   temp=buff+strlen(buff);  
  145.   while (temp!=(buff+Dist-1))  
  146.   {//字符后退'差'个空间  
  147.    *(temp+Dist)=*temp;  
  148.    temp--;  
  149.   }  
  150.   for (int i=0;i<LenDest;i++)  
  151.   {//给空出的空间赋值  
  152.    *(buff+i)=*(dest+i);  
  153.   }  
  154.   buff=buff+LenDest;  
  155.  }  
  156. }  
  157. //////////////////////////////////////////////////////////////////////////////////////  
  158. //函数功能:用给定的字符串dest替换字符串buff中的字符串src,当dest长度小于src时调用  
  159. //函数参数:buff,要查找的字符串;src,被替换的字符串,dest,替换成的字符串;  
  160. //函数返回:无  
  161. //函数说明:2011-11-30 HRX  
  162. //////////////////////////////////////////////////////////////////////////////////////  
  163. void ReplaceMemLess(char* buff,char* src,char* dest)  
  164. {</p><p> int LenSrc=strlen(src);  
  165.  int LenDest=strlen(dest);  
  166.  int Dist=LenSrc-LenDest;  
  167.  char* temp=NULL;//指向最后一个字符\0  
  168.  while (buff=strstr(buff,src))  
  169.  {  
  170.   temp=buff;  
  171.   while (*temp!=0)  
  172.   {//字符后退'差'个空间  
  173.    *temp=*(temp+Dist);  
  174.    ++temp;  
  175.   }  
  176.   for (int i=0;i<LenDest;i++)  
  177.   {//给空出的空间赋值  
  178.    *(buff+i)=*(dest+i);  
  179.   }  
  180.   buff=buff+LenDest;  
  181.  }  
  182. }  
  183. //////////////////////////////////////////////////////////////////////////////////////  
  184. //函数功能:计算字符串buff中含有字符串src的个数  
  185. //函数参数:buff,要查找的字符串;src,被查找的字符串;  
  186. //函数返回:int;buff中含有src的个数  
  187. //函数说明:2011-11-30 HRX  
  188. //////////////////////////////////////////////////////////////////////////////////////  
  189. int NumOfStr(char* buff,char* src)  
  190. {  
  191.  int n=0;  
  192.  int len=strlen(src);  
  193.  while (buff=strstr(buff,src))  
  194.  {  
  195.   ++n;  
  196.   buff+=len;  
  197.  }  
  198.  return n;  
  199. }</p>  
  200.    
0
0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值