情况是这样:    要做一个修正数控代码的程序。
    首先已将原代码读到一个窗口中(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高手帮忙看看问题出在哪里,不甚感激!~~

解决方案 »

  1.   

    你这个是字符串处理的问题吧
    调用CString的TrimLeft和TrimRight试试
      

  2.   

    读取每行后将每行先去掉前面的空格或者Tab符,再修改保存;
    str.TrimLeft(" ");
    str.TrimLeft("\t");
      

  3.   


    同意,不过最好改为:str.TrimLeft();
    str.TrimRight();在没有参数的情况下调用时,TrimLeft,TrimRight删除换行符,空格和tab字符。
      

  4.   

        提取出来的每个字段 我都用
            str.TrimLeft();
           str.TrimRight();
        进行了处理,最后的输出行也做了相应处理
            strout.TrimLeft();
           strout.TrimRight();
        得到的结果是没有换行,各行连在一起~    所以问题就变成了如何在CEditCtrl里换行。
         沃在strout前、后加"\t"试了一下,在CEditCtrl里显示的只是各行中间加了几个空格,没有换行,输出的文件里也一样。
         这里比较奇怪的是没有修改的代码行直接来自于pBuff,显示和输出结果都正确,而修改后的代码行保存在strout中,未能按希望的情况显示和输出。
      

  5.   

    str.TrimLeft();
    str.TrimRight();
      

  6.   

    这里比较奇怪的是没有修改的代码行直接来自于pBuff,显示和输出结果都正确,而修改后的代码行保存在strout中,未能按希望的情况显示和输出。----这就说明问题出在修改的程序语句上。如果实在没办法,建议LZ采用最原始的C语言进行分析,这样肯定可以解决问题。
      

  7.   

    "\n"我用过,没有换行。
    改用"\r/n",问题解决。还是吃了基础差的亏啊~在这里还是感谢大家的意见和建议,谢谢你们的热心回复~