CString将字符'\n'替换为指定字符串

来源:互联网 发布:大数据搜索与挖掘平台 编辑:程序博客网 时间:2024/06/06 23:16
最近写一个Excel批量处理的程序,需要将换行符替换为<p>\r\n</p>,但是想了很多办法却不能实现,如下:
        本来是要将“\r\n”替换为"<p>\r\n</p>",但是发现从Excel或其他文件中读取出来的字符串在二进制窗口中发现只有换行符,即'\n'(ASCII码为0A),而回车'\r'(ASCII码为0D)却没有了,因此使用CString的Replace(_T("\r\n"),_T("<p>\r\n</p>"))就无效了。
        于是我就想用CString的Replace(_T("\n"),_T("<p>\r\n</p>")),但是发现不成功,因为如果是一个字符的话,Replace不会将其视为字符串,而是当做字符来处理,如果前一个参数是字符的话,第二个参数也必须是字符,不符合业务要求,不能达到目的,于是该方法也淘汰。
        到第二天,突然灵感来了,于是疯狂写下如下这段代码,终于成功了!
         // 将回车换行替换为段
int nIndex=0;
CString strTemp;
TCHAR szOld[5]={'\0'};
TCHAR szNew[15]={'\0'};
// 将换行解析为段<p></p>
while((nIndex=strWalkThrough.Find('\n',nIndex+1))>0)
{
if (nIndex+3<=strWalkThrough.GetLength()
&& strWalkThrough.GetAt(nIndex+1) == '<' 
&& strWalkThrough.GetAt(nIndex+2) == 'p' 
&& strWalkThrough.GetAt(nIndex+3) == '>') continue;

strTemp.Empty();
strTemp = strWalkThrough.Mid(nIndex+1,2);

memset(szOld,'\0',sizeof(szOld));
sprintf(szOld,_T("\n%s"),strTemp);

memset(szNew,'\0',sizeof(szNew));
sprintf(szNew,_T("</p>\r\n<p>%s"),strTemp);

strWalkThrough.Replace(szOld,szNew);
}
          不知道你们看懂了没有,我的想法是找到'\n'字符,然后取后面两个字节(因为可能是中文,最好取两个字节),然后将'\n'和后面两个字节拼成字符串,再替换为想要的结果,即Replace(_T("\nX"),_T("</p>\r\n<p>X"))就成功了,"X"代表与'\n'相邻的后面的字符串。
0 0
原创粉丝点击