Re: Текстовый файл в вектор
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 16.12.04 05:00
Оценка:
Здравствуйте, tdebug, Вы писали:

T>Как поместить содержимое текстового файла в vector из строк чтобы каждоя строка файла стала соотвественно каждой строкой в векторе? Какой тип строки (String, CString) лучше использовать в этом vector контейнере, если потом надо будет обрабатывать эту строку — находить там определённые слова и выводить также построчно в CListBox весь этот vector массив.


ИМХО из соображений единообразия кода в данном случае не стоит мешать STL и MFC (если под вектором Вы подразумевали std::vector<>). В качестве строкового класса я бы рекомендовал воспользоваться MFC-шным CString-ом, а в качестве контейнера — шаблоном CArray<CString, LPCTSTR>.

Построчное чтение текстового файла в массив можно выполнить, например, так:

CStdioFile file;
CString strTemp;
CArray<CString, LPCTSTR> arrLines;

if (file.Open(имя_файла, CFile::modeRead | CFile::typeText)) {
    while (file.ReadString(strTemp)) {
        arrLines.Arr(strTemp);
    }
    file.Close();
}
else {
    AfxMessageBox(_T("Unable to open file!"));
}


Поиск слов можно осуществить с помощью метода CString::Find() примерно так (по всем строкам вектора):

int iWordStart;

for (int i = 0, cLines = arrLines.GetSize(); i < cLines; ++i) {
    if ((iWordStart = arrLines[.Find([i]искомое_слово)) != -1) {
        // искомое_слово в данной строке начинается с позиции iWordStart
    }
    else {
        // искомое_слово в данной строке отсутствует
    }
}


Ну а "запипсь" строк в list box можно выполнить так:

CListBox listLines;

... // создаем контрол методом Create() или "связываемся" с ним с помощью DDX_Control()

for (int i = 0, cLines = arrLines.GetSize(); i < cLines; ++i) {
    listLines.AddString(arrLines[[i]);
}
[ posted via RSDN@Home 1.1.4 beta 3 r241 ]
- Искренне ваш, Поросенок Пафнутий
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.