Trim GetDlgItem() 之后的 CString
Trim CString after GetDlgItem()
希望有人能帮我解决这个问题!
我有一个对话框,其中包含一些填充有数据的组合框,用户应该填写这些数据,然后单击保存。单击保存时,程序会创建一个包含所选数据的输出文件。
我的问题是在保存文件之前我需要 trim 连字符处的所有内容!
组合框填充了如下所示的字符串:
- 4010-第一
- 4020 秒
我希望它在 trim:
之后看起来像这样
- 4010
- 4020
并且:
- PH-彼得·汉森
- JK-约翰金
我希望它在 trim:
之后看起来像这样
- PH
- JK
我使用 Visual Studio 6.0 和 MFC。
这是OnOK
代码:
void CExportChoices::OnOK()
{
CString sFileName, name, height, weight, age, haircolor, eyecolor, initials, group;
CWnd* pWnd = GetDlgItem(IDC_NAME);
pWnd->GetWindowText(name);
sFileName.Format(".\Export\%s_export%d.txt", name, GetTickCount());
ofstream outfile(sFileName,ios::out);
pWnd = GetDlgItem(IDC_HEIGHT);
pWnd->GetWindowText(height);
pWnd = GetDlgItem(IDC_WEIGHT);
pWnd->GetWindowText(weight);
pWnd = GetDlgItem(IDC_AGE);
pWnd->GetWindowText(age);
pWnd = GetDlgItem(IDC_HAIRCOLOR);
pWnd->GetWindowText(haircolor);
pWnd = GetDlgItem(IDC_EYECOLOR);
pWnd->GetWindowText(eyecolor);
pWnd = GetDlgItem(IDC_INITIALS);
pWnd->GetWindowText(initials);
pWnd = GetDlgItem(IDC_GROUP);
pWnd->GetWindowText(group);
outfile << "Height=" << height << "\n";
outfile << "\n";
outfile << "Weight=" << weight << "\n";
outfile << "\n";
outfile << "Age=" << age << "\n";
outfile << "\n";
outfile << "Hair color=" << haircolor << "\n";
outfile << "\n";
outfile << "Eye color=" << eyecolor << "\n";
outfile << "\n";
outfile << "Initials=" << initials << "\n";
outfile << "\n";
outfile << "Group=" << group << "\n";
outfile.close();
CDialog::EndDialog(22);
}
提前致谢!
------------------------------------更新--- ----------------------------------
好吧,经过一些困惑,我终于找到了一个对我有用的解决方案..
根据你们给我的建议,我正在尝试做以下事情:
来自组合框的数据:
"4010组"
我的代码:
pWnd = GetDlgItem(IDC_GROUP);
pWnd->GetWindowText(group);
int i = group.Find("-");
if (i >= 0)
{
group = group.Mid(0, i);
}
MessageBox(group); // results = 4010-group
没用。
我认为可能存在一些与 UNICODE 相关的问题,所以我将 ComboBox 中的数据从 "4010-group" 更改为 "4010 group"。 =81=] 并试过这个:
pWnd = GetDlgItem(IDC_GROUP);
pWnd->GetWindowText(group);
int i = group.Find(" ");
if (i >= 0)
{
group = group.Mid(0, i);
}
MessageBox(group); // results = 4010
有效!但是我不明白为什么连字符不起作用,有人知道吗?
可以使用CString::Find
和CString::Mid
,类似于wstring::find
和wstring::substr
CString s = L"4010-First";
int i = s.Find('-');
if (i >= 0)
{
s = s.Mid(0, i);
TRACE(L"%s\n", s); //output: "4010"
}
或获取第一部分和第二部分:
CString s1 = s.Mid(0, i);
CString s2 = s.Mid(i + 1);
TRACE(L"(%s)(%s)\n", s1, s2); //output: (4010)(First)
这是一个需要较少代码的问题解决方案。使用很少使用且有点被误解的 CString 方法 SpanExcluding,您可以在更少的行中完成您的任务。
CString str = L"PH-Peter Hansen";
CString newStr = str.SpanExcluding(L"-");
将导致仅返回“PH”。
回复:"I don't understand why the hyphen doesn't work, does anyone have a clue?"
有许多符号看起来像连字符但实际上不是:dash, en-dash, em-dash, etc.您需要弄清楚在您的源代码中使用了哪个符号作为分隔符。
希望有人能帮我解决这个问题!
我有一个对话框,其中包含一些填充有数据的组合框,用户应该填写这些数据,然后单击保存。单击保存时,程序会创建一个包含所选数据的输出文件。
我的问题是在保存文件之前我需要 trim 连字符处的所有内容!
组合框填充了如下所示的字符串:
- 4010-第一
- 4020 秒
我希望它在 trim:
之后看起来像这样- 4010
- 4020
并且:
- PH-彼得·汉森
- JK-约翰金
我希望它在 trim:
之后看起来像这样- PH
- JK
我使用 Visual Studio 6.0 和 MFC。
这是OnOK
代码:
void CExportChoices::OnOK()
{
CString sFileName, name, height, weight, age, haircolor, eyecolor, initials, group;
CWnd* pWnd = GetDlgItem(IDC_NAME);
pWnd->GetWindowText(name);
sFileName.Format(".\Export\%s_export%d.txt", name, GetTickCount());
ofstream outfile(sFileName,ios::out);
pWnd = GetDlgItem(IDC_HEIGHT);
pWnd->GetWindowText(height);
pWnd = GetDlgItem(IDC_WEIGHT);
pWnd->GetWindowText(weight);
pWnd = GetDlgItem(IDC_AGE);
pWnd->GetWindowText(age);
pWnd = GetDlgItem(IDC_HAIRCOLOR);
pWnd->GetWindowText(haircolor);
pWnd = GetDlgItem(IDC_EYECOLOR);
pWnd->GetWindowText(eyecolor);
pWnd = GetDlgItem(IDC_INITIALS);
pWnd->GetWindowText(initials);
pWnd = GetDlgItem(IDC_GROUP);
pWnd->GetWindowText(group);
outfile << "Height=" << height << "\n";
outfile << "\n";
outfile << "Weight=" << weight << "\n";
outfile << "\n";
outfile << "Age=" << age << "\n";
outfile << "\n";
outfile << "Hair color=" << haircolor << "\n";
outfile << "\n";
outfile << "Eye color=" << eyecolor << "\n";
outfile << "\n";
outfile << "Initials=" << initials << "\n";
outfile << "\n";
outfile << "Group=" << group << "\n";
outfile.close();
CDialog::EndDialog(22);
}
提前致谢!
------------------------------------更新--- ----------------------------------
好吧,经过一些困惑,我终于找到了一个对我有用的解决方案..
根据你们给我的建议,我正在尝试做以下事情:
来自组合框的数据:
"4010组"
我的代码:
pWnd = GetDlgItem(IDC_GROUP);
pWnd->GetWindowText(group);
int i = group.Find("-");
if (i >= 0)
{
group = group.Mid(0, i);
}
MessageBox(group); // results = 4010-group
没用。
我认为可能存在一些与 UNICODE 相关的问题,所以我将 ComboBox 中的数据从 "4010-group" 更改为 "4010 group"。 =81=] 并试过这个:
pWnd = GetDlgItem(IDC_GROUP);
pWnd->GetWindowText(group);
int i = group.Find(" ");
if (i >= 0)
{
group = group.Mid(0, i);
}
MessageBox(group); // results = 4010
有效!但是我不明白为什么连字符不起作用,有人知道吗?
可以使用CString::Find
和CString::Mid
,类似于wstring::find
和wstring::substr
CString s = L"4010-First";
int i = s.Find('-');
if (i >= 0)
{
s = s.Mid(0, i);
TRACE(L"%s\n", s); //output: "4010"
}
或获取第一部分和第二部分:
CString s1 = s.Mid(0, i);
CString s2 = s.Mid(i + 1);
TRACE(L"(%s)(%s)\n", s1, s2); //output: (4010)(First)
这是一个需要较少代码的问题解决方案。使用很少使用且有点被误解的 CString 方法 SpanExcluding,您可以在更少的行中完成您的任务。
CString str = L"PH-Peter Hansen";
CString newStr = str.SpanExcluding(L"-");
将导致仅返回“PH”。
回复:"I don't understand why the hyphen doesn't work, does anyone have a clue?"
有许多符号看起来像连字符但实际上不是:dash, en-dash, em-dash, etc.您需要弄清楚在您的源代码中使用了哪个符号作为分隔符。