CString将字符n替换为指定字符串
最近写⼀个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;
cstring转为intTCHAR 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'相邻的后⾯的字符串。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论