Я пытаюсь читать из расширенного текстового поля построчно в Visual C ++, но не знаю, как это сделать.
Кто-нибудь может привести небольшой пример того, как это работает? Я действительно новичок в Visual Studio и Visual C ++.
Я хотел бы сохранить каждую строку из расширенного текстового поля в строке, используя цикл for.
Допустим, в поле расширенного текста у меня есть:
text1
text2
text3
Цикл for будет в значительной степени читать каждую строку, а затем я буду выполнять другие операции с ней.
Вы не сказали, какое именно текстовое поле вы используете.
Если вы используете .NET RichTextBox
класс, вы можете перебрать его Lines
имущество:
array<String^>^ lines = textBox->Lines;
int count = lines->Length;
for (int idx = 0; idx < count; ++idx)
{
// use lines[idx] as needed...
}
Если вы используете MFC CRichEditCtrl
класс, вы можете назвать его GetLineCount()
, LineLength()
, а также GetLine()
методы:
int count = textBox.GetLineCount();
for (int idx = 0; idx < count; ++idx)
{
std::basic_string<TCHAR> line;
int len = textBox.LineLength(idx);
if (len > 0)
{
line.resize(len+1);
len = textBox.GetLine(idx, &line[0], len);
line.resize(len);
}
// use line as needed...
}
Если вы используете Win32 Rich Edit
контроль, вы можете отправить его EM_GETLINECOUNT
, EM_LINELENGTH
, а также EM_GETLINE
Сообщения:
int count = SendMessage(hTextBox, EM_GETLINECOUNT, 0, 0);
for (int idx = 0; idx < count; ++idx)
{
std::basic_string<TCHAR> line;
int len = SendMessage(hTextBox, EM_LINELENGTH, idx, 0);
if (len > 0)
{
line.resize(len+1);
*(reinterpret_cast<WORD*>(&line[0])) = (WORD)len;
len = SendMessage(hTextBox, EM_GETLINE, idx, reinterpret_cast<LPARAM>(&line[0]));
line.resize(len);
}
// use line as needed...
}