...
现在程序执行到了这里.已知1:有一个变量 CString str; 他的值就是指定打开的某个文本文件的所有文本内容,当然内容肯定有很多的行。已经2:现准备好了一个下拉列表框,可以用如下的代码来往你里面加列表项。 CMainFrame *pFrame =(CMainFrame*)AfxGetApp()->m_pMainWnd;
    pFrame->m_wndEditBar.m_SearchBox.InsertString(-1, "项目参照...");
pFrame->m_wndEditBar.m_SearchBox.InsertString(-1, "第二个");
pFrame->m_wndEditBar.m_SearchBox.SetCurSel(0);我想做的是:        让程序在 str 里找到如下的一行(这行应该是以DEFINE开头的行,但DEFINE左边可能有空格,后面就是项目列表,用逗号隔开的就是要加到下接列表框中的项目。),这样的行有且只有一行,有多行的话也是只处理第一个这样的行出现的情况。 DEFINE %[基本工资],#[标准工资],%[年功工资]   然后把 DEFINE  后面这些用","号隔开的项目分别加到 上面提到的 下拉列表框中。
代码怎么写呢??谢谢。再问一个可能很简单的问题:
     如果并不知道 str的值,用什么语句可以取得某个 RichEditBox 的所有内容给 str 呢?

解决方案 »

  1.   

    哎!vc和vb是两种截然不同的语言,想转型难啊。以前俺也做过vb但是觉得没有前途就做vc了。呵呵,祝你能顺利转型!
      

  2.   

    //DEFINE %[基本工资],#[标准工资],%[年功工资]
    pStr = str.LockBuffer(); // 锁定缓冲区
    TCHAR *pFirst = StrStr(pStr,_T("DEFINE")); // 找到第一个DEFINE所在行
    TCHAR *pEnd = StrChr(pfirst,"\n"); // 找到那一行的结尾
    CString strDef(pFirst,pEnd-pFirst); // 复制这一句到一个临时变量继续处理。
    str.UnLockBuffer(); // 原缓冲解锁
    pStr = strDef.LockBuffer();
    pFirst = pStr;
    pFirst += 7; 
    for(;*pFirst == _T(' ');pFirst++);// 定位到DEFINE后第一个不为空格字符
    for(;;)
    {
        pEnd = StrChr(pFirst,_T(',')); //定位到下一个逗号
        if(pEnd != NULL) // 如果没有逗号说明是最后一个
        {
            pFrame->m_wndEditBar.m_SearchBox.InsertString(-1, pFirst);
            break;
        }else
        {
            CString strTemp(pFirst,pEnd-pFirst);
            pFrame->m_wndEditBar.m_SearchBox.InsertString(-1, strTemp);
            pFirst = pEnd+1;
        }
    }
    strDef.UnLockBuffer();
      

  3.   

    办法有点繁琐,其实对于这种分析字符串的工作,最好的办法是正则表达式,C++有一个很好的正则表达式库,就是Boost::regex,你可以到 www.c-view.org 了解 boost的内容,不过对于才从vb转过来的楼主来说可能是难了些,因为boost是一个模板库。