2011-06-02 64 views
1

我使用CEdit属性Multiline.My的目标是检索个别行并将其放在我的CStringArray中。CEdit在mfc中的文本检索

使用GetLine检索行时,我必须知道该行的字符串长度。

如何得到它?

我试过函数GetLineLength(),但会返回整行的大小而不是指定的文本。

我贴我到目前为止的实现代码:

CEdit m_strMnemonicCode; 
CStringArray strMnemonicArray; 
LPTSTR temp = new TCHAR[50];; 
int nLineCount = m_strMnemonicCode.GetLineCount(); 
for(int ni = 0 ; ni < nLineCount ; ni++) 
{ 
    int len = m_strMnemonicCode.LineLength(m_strMnemonicCode.LineIndex(ni)); 
      //m_strMnemonicCode.GetLine(ni, strText.GetBuffer(len), len); 
    m_strMnemonicCode.GetLine(ni , temp); 
    strMnemonicArray.Add(strText); 
} 

回答

1

但你需要知道整条线路的长度,不是吗?
我不会将缓冲区定义为TCHAR数组,但作为一个CString,然后做它GetBuffer()

入住CEdit::GetLineCount

的例子似乎做或多或少你所需要的。

编辑
我刚刚写了下面的测试,它完美的作品对我来说:

int lc = m_Edit.GetLineCount();  

CString strLine; 
CStringArray arr; 

for (int i = 0; i < lc ; i++) 
{ 
    int len = m_Edit.LineLength(m_Edit.LineIndex(i)); 
    m_Edit.GetLine(i, strLine.GetBuffer(len), len); 
    strLine.ReleaseBuffer(len); 

    arr.Add(strLine); 
} 

也许你忘了缓冲区长度增加ReleaseBuffer()

+0

以您的方式,CString包含该行的限制大小,因此它将在最后打印为指定的文本+垃圾值。例如:在第一行文本:karthik然后CString包含karthik; kajsdf; aksjdfaskjdfas; kdjfsalkj;这就是输出的结果。这种情况只发生在多行风格上。 – karthik 2011-06-02 06:13:10

+0

我刚刚编辑了我的答案,添加了一些适用于我的代码 – MikMik 2011-06-02 06:34:57

+0

雅其工作良好..感谢MikMik。 – karthik 2011-06-02 06:58:59