情况是这样: 要做一个修正数控代码的程序。
首先已将原代码读到一个窗口中(CRichEditView),然后在从中一行一行读取代码,判断是否需要修改,
若不需修改则直接输出到一个CEdit对象窗口显示并保存到一文件中,若需修改则显示和保存修改后代码。
使用程序如下:
CEdit &edit = pView1->GetEditCtrl();
edit.SetReadOnly(TRUE);
edit.SetSel(0,-1);
edit.Clear();
edit.SetModify(FALSE); ......
//打开一文件,用于保存修正后代码
CStdioFile NCFile;
NCFile.Open(m_PathName,CFile::modeCreate|CFile::modeReadWrite); int nLineCount=pView->GetRichEditCtrl().GetLineCount();//行数 char *pBuff;
pBuff=new char[100];
for(int i=0;i<nLineCount;i++)
{
pView->GetRichEditCtrl().GetLine(i,pBuff);//读取一行至pBuff if(判断是否需要修改)
{
若是则提取每一字段进行修改 CString a,b,c,d,e,f,g,h;
AfxExtractSubString(a,pBuff,0,' ');
AfxExtractSubString(b,pBuff,1,' ');
AfxExtractSubString(c,pBuff,2,' ');
AfxExtractSubString(d,pBuff,3,' ');
AfxExtractSubString(e,pBuff,4,' ');
AfxExtractSubString(f,pBuff,5,' ');
AfxExtractSubString(g,pBuff,6,' ');
AfxExtractSubString(h,pBuff,7,' ');//以空格分段,每行代码小于等于8段
......
CString strout=a+" "+b+" "+c+" "+d+" "+e+" "+f+" "+g+" "+h+"\n";//合并
edit.ReplaceSel(strout,FALSE);//显示
NCFile.WriteString(strout);//保存
}
else
{ 不需修改则直接显示、保存
edit.ReplaceSel(pBuff,FALSE);
NCFile.WriteString(pBuff);
}
NCFile.Close();//关闭文件
delete pBuff;
} 我希望的是每行代码都左对齐,一行一行显示,但实际显示时,修改过的代码行有些前面有空格(不左齐),
有些两行之间有空行(窗口里显示行末尾有回车符),甚至有的较短的两行显示在一起。
请VC高手帮忙看看问题出在哪里,不甚感激!~~
首先已将原代码读到一个窗口中(CRichEditView),然后在从中一行一行读取代码,判断是否需要修改,
若不需修改则直接输出到一个CEdit对象窗口显示并保存到一文件中,若需修改则显示和保存修改后代码。
使用程序如下:
CEdit &edit = pView1->GetEditCtrl();
edit.SetReadOnly(TRUE);
edit.SetSel(0,-1);
edit.Clear();
edit.SetModify(FALSE); ......
//打开一文件,用于保存修正后代码
CStdioFile NCFile;
NCFile.Open(m_PathName,CFile::modeCreate|CFile::modeReadWrite); int nLineCount=pView->GetRichEditCtrl().GetLineCount();//行数 char *pBuff;
pBuff=new char[100];
for(int i=0;i<nLineCount;i++)
{
pView->GetRichEditCtrl().GetLine(i,pBuff);//读取一行至pBuff if(判断是否需要修改)
{
若是则提取每一字段进行修改 CString a,b,c,d,e,f,g,h;
AfxExtractSubString(a,pBuff,0,' ');
AfxExtractSubString(b,pBuff,1,' ');
AfxExtractSubString(c,pBuff,2,' ');
AfxExtractSubString(d,pBuff,3,' ');
AfxExtractSubString(e,pBuff,4,' ');
AfxExtractSubString(f,pBuff,5,' ');
AfxExtractSubString(g,pBuff,6,' ');
AfxExtractSubString(h,pBuff,7,' ');//以空格分段,每行代码小于等于8段
......
CString strout=a+" "+b+" "+c+" "+d+" "+e+" "+f+" "+g+" "+h+"\n";//合并
edit.ReplaceSel(strout,FALSE);//显示
NCFile.WriteString(strout);//保存
}
else
{ 不需修改则直接显示、保存
edit.ReplaceSel(pBuff,FALSE);
NCFile.WriteString(pBuff);
}
NCFile.Close();//关闭文件
delete pBuff;
} 我希望的是每行代码都左对齐,一行一行显示,但实际显示时,修改过的代码行有些前面有空格(不左齐),
有些两行之间有空行(窗口里显示行末尾有回车符),甚至有的较短的两行显示在一起。
请VC高手帮忙看看问题出在哪里,不甚感激!~~
调用CString的TrimLeft和TrimRight试试
str.TrimLeft(" ");
str.TrimLeft("\t");
同意,不过最好改为:str.TrimLeft();
str.TrimRight();在没有参数的情况下调用时,TrimLeft,TrimRight删除换行符,空格和tab字符。
str.TrimLeft();
str.TrimRight();
进行了处理,最后的输出行也做了相应处理
strout.TrimLeft();
strout.TrimRight();
得到的结果是没有换行,各行连在一起~ 所以问题就变成了如何在CEditCtrl里换行。
沃在strout前、后加"\t"试了一下,在CEditCtrl里显示的只是各行中间加了几个空格,没有换行,输出的文件里也一样。
这里比较奇怪的是没有修改的代码行直接来自于pBuff,显示和输出结果都正确,而修改后的代码行保存在strout中,未能按希望的情况显示和输出。
str.TrimRight();
改用"\r/n",问题解决。还是吃了基础差的亏啊~在这里还是感谢大家的意见和建议,谢谢你们的热心回复~