
版权声明:本文为博主原创文章,未经博主允许不得转载。
本文是一个文本替换程序的源代码,代码只对ANSI做处理。
- <p>#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);</p><p> 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);</p><p> wstring path(buff);
- ReplaceFile(path,src,dest);</p><p>}
- //////////////////////////////////////////////////////////////////////////////////////
- //函数功能:用给定的字符串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"<a href="file://\\temp.txt">\\temp.txt</a>";</p><p> 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)
- {</p><p> if(*(buff+i)==0) break;
- fputc(*(buff+i),fw);
- }
- }
- else
- {
- ReplaceMemLess(buff,src,dest);
- for (int i=0;i<BLOCKSIZE;++i)
- {</p><p> 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);</p><p>}
- //////////////////////////////////////////////////////////////////////////////////////
- //函数功能:用给定的字符串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)
- {</p><p> 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)
- {</p><p> 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);</p><p>}
- //////////////////////////////////////////////////////////////////////////////////////
- //函数功能:用给定的字符串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)
- {</p><p> 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;
- }</p>
-
顶
- 0
-
踩
- 0