Иллюстрированный самоучитель по Visual Studio.Net


Синтаксический анализ файла - часть 3


for (int pos=-l; pos==-l && !is.eof(); )

{

//====== Считываем всю строку (до символа'\n')

getline (is, s, '\n');

//====== В первом режиме text не равен нулю

//====== и мы ищем этот текст, иначе ищем

//====== первый непустой символ

pos = text ? s.find(text) : s.find_first_not_of("/ ");

if (pos!=-l) // Если нашли

s.erase(0,pos); // Усекаем строку слева

} ;

// Если искали и нашли текст, то возвращаем его длину

// которая имеет смысл позиции, следующей за текстом

if (text && ! is.eof () )

return strlen (text) ;

// Если ищем непустую строку, то пропускаем все пустые

string st;

for (pos=0; pos!=-l && !is.eof(); )

{

getline(is,st,'\n');

pos = st.find_first_not_of("/ ");

//====== Если нашли непустой текст,

//====== то сливаем его с уже найденным

if (pos != -1)

s += ' ' + st.substr(pos);

}

// Возвращаем 0-ю позицию, так как нужен весь текст

return 0;

}

В такие моменты, когда программа почти готова, важно остановиться и вспомнить, не забыли ли мы выключить газ и свет. Я имею в виду освободить память, занимаемую какими-либо динамическими структурами. Мы используем контейнер структур, который необходимо где-то освобождать. Введите в public-секцию класса CLookDlg (в h-файле) деструктор этого класса:

~CLookDlgO { m_Vector.clear(); }

Это делать не обязательно, так как деструктор вызывается при выходе из приложения уже после того, как окно исчезло с экрана. Windows, закрывая процесс, освободит всю память, как в стеке, так и в heap, но правила хорошего тона говорят, что за собой надо убирать. Другим моментом, связанным с забывчивостью, является отсутствие директив #include для файлов заголовков используемых библиотек. Вы помните, что это следует делать в файле stdafx.h, чтобы пользоваться преимуществами pch-файла, который ускоряет повторные компиляции. Вставьте в конец файла stdafx.h следующие строки:

#include <iostream> // Потоковый ввод-вывод STL

//=== Буферизованные потоки, связанные с файлами (STL)




Начало  Назад  Вперед