Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Лабораторная работа №6. Поиск и визуализация найденных слов в текстовых документах




Целью данной работы является изучение простейших приемов поиска и визуализации полезной информации на примере текстового документа, а также закрепление навыков программирования в интегрированной среде Borland C++ Builder для операционных систем Windows 98, 2000, XP и NT.

Порядок выполнения лабораторной работы №6:

1. Выполнить запуск основного приложения Borland C++ Builder. Открыть новый проект для разработки, используя команду File|New Application. Сохранить новый проект в папке D:/VMSS/U41(U42)/<user>, используя команду File|Project As. Имена папки <user>, проекта и файла присваиваются самостоятельно.

2. С использованием Палитры компонентов и Инспектора объектов создать первоначальный образ окна разрабатываемого приложения. Примерный вид окна приложения приведен на Рисунок 6.1. Дизайн окна определяется самостоятельно. В процессе работы окно может дополняться другими компонентами.

 

Рисунок 6.1 - Вид окна приложения

3. Разработать процедуру открытия текстового файла. Данная процедура должна вызываться по нажатию кнопки «Открыть…». Для реализации процедуры необходимо использовать стандартный диалоговый компонент «OpenDialog». Установить свойства Filter и FilterIndex для выбора текстовых файлов в списке файлов. По желанию можно установить первоначальный директорий для выбора файла. Метод Execute активизирует окно диалога во время выполнения программы. После нажатия кнопки «ОК» имя выбранного файла заносится в свойство FileName. Чтение файла в поле RichEdit производится методом RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName).

4. В окно приложения вывести имя файла FileName и размер текстового документа RichEdit1->Lines->Text.Length().

5. Отладить процедуру открытия файла.

6. При открытии текстового файла, подготовленного в редакторах DOS, русские символы не отображаются в поле RichEdit. Поэтому требуется перекодировка из OEM в Ansi, которая выполняется при помощи функции API OemToChar(txt,txt). Требуется написать процедуру перекодировки, которая должна выполнять три действия: запись содержимого поля RichEdit в промежуточный буфер txt с использованием функции strcpy(); вызов функции API OemToChar(txt,txt); перезапись содержимого буфера в поле RichEdit.

7. Отладить процедуру перекодировки.

8. Разработать процедуру поиска заданного в поле Edit1 ключевого слова и визуализации найденных слов в поле RichEdit. Для визуализации необходимо использовать RTF-формат, который позволяет выделять отдельные участки текста определенным цветом. RTF-формат содержит набор служебных последовательностей, которые называются команды управления настройки программы чтения файлов в RTF-формате. Для решения задачи визуализации потребуются следующие последовательности:

// константы RTF формата

#define TXTCOLOR "\\plain\\fs20\\cf1 " // начало подсветки

#define TXTNOCOLOR "\\plain\\fs20 " // конец подсветки

#define TXTSTART "{\\rtf1\\ansi\\deff0\\deftab720 {\\fonttbl {\\f0\\fmodern Courier} } \r\n {\\colortbl\\red0\\green0\\blue0;\\red255\\green0\\blue0;}\r\n" // начало текста

#define TXTEND "}\\par" // конец текста

#define TXTPAR "\\par " // конец абзаца

#define TXTCR "\r\n" // перевод строки.

9. Процедура поиска должна разрабатываться в несколько этапов:

1 этап - преобразование текстового файла в RTF-формат (установка констант начала и конца текста);

2 этап – замена символов перевода строки «\r\n» на конец абзаца «\par»;

3 этап – поиск ключевого слова и фиксация начала и конца слова константами TXTCOLOR и TXTNOCOLOR;

4 этап – подсчет количества найденных слов и вывод результата в окне приложения.

10. Для преобразования в RTF-формат необходимо разработать процедуру вставки заданной последовательности в указанное место в буфере. Пример данной процедуры приведен ниже:

//-------------------------------------------------------

void __fastcall TForm1::RtfIns(int n, char *txtbuf, char *str)

// вставка RTF строки

// n – место куда нужно вставить строку (смещение от начала буфера)

// txtbuf – указатель на исходный буфер

// str – указатель на строку которую нужно вставить

{

char buff[0xffff]; // буфер cохранения

 

memset(buff,0,strlen(txtbuf));

strcpy(buff,txtbuf); // сохраним

txtbuf[n]=0; // ограничим начало

strcat(txtbuf,str); //вставка строки RTF

strcat(txtbuf,&buff[n]); // добавим оставшийся текст

}

11. Для преобразования в RTF-формат необходимо разработать процедуру удаления в буфере строки из n символов (удаления последовательности «\r\n»). Пример данной процедуры приведен ниже:

//-------------------------------------------------------

void __fastcall TForm1::RtfDel(int n, char *txtbuf, int size)

// удаление RTF строки

// n – место с которого нужно удалять (смещение от начала буфера)

// txtbuf – указатель на исходный буфер

// size – длина удаляемой строки

{

char buff[0xffff]; // буфер cохранения

 

strcpy(buff,txtbuf);

txtbuf[n]=0;

strcat(txtbuf,&buff[n+size-1]);

}

12. Выполнить 1 этап разработки процедуры поиска и визуализации. Данная процедура должна вызываться при нажатии кнопки «Поиск». Последовательность выполняемых действий в процедуре:

чтение текста во внутренний буфер при помощи команды strcpy(buf,RichEdit1->Lines->Text.c_str());

вставка в буфер констант начала и конца RTF-файла с использованием следующей последовательности

RtfIns(0,buf,TXTSTART); // вставка заголовка RTF

RtfIns(sizeof(TXTSTART)-1,buf,TXTNOCOLOR); // установка исходного цвета

strcat(buf,TXTEND); // добавить концовку RTF

strcat(buf,"\0\0\0"); // добавить концовку

запись содержимого буфера во временный файл

char FileName[16]="123.rtf";

int handle = open(FileName, O_CREAT|O_TEXT|O_RDWR);

write(handle, buf, strlen(buf));

close(handle);

чтение файла в поле RichEdit при помощи команды

RichEdit1->Lines->LoadFromFile(FileName).

13. Отладить и проверить правильность выполнения задания RTF-формата. В тексте (поле RichEdit) не должно быть видно введенных констант, а сам текст должен быть не форматирован (отсутствие абзацев).

14. Выполнить 2 этап разработки процедуры поиска и визуализации. Для этого в тексте процедуры перед командами установки констант начала и конца RTF-формата требуется установить цикл замены в тексте последовательности «\r\n» на последовательность «\par». Пример данного цикла приведен ниже

// замена ВК и ПС

ptr=strstr(buf,TXTCR);

while(ptr!= NULL)

{// замена ВК и ПС на конец абзаца

RtfDel((int)(ptr-buf),buf,sizeof(TXTCR));

RtfIns((int)(ptr-buf),buf,TXTPAR);

ptr=strstr(buf,TXTCR);

}

15. Отладить и проверить правильность выполнения замены. После выполнения процедуры текст (поле RichEdit) должен принять первоначальный вид.

16. Выполнить 3 этап разработки процедуры поиска и визуализации. Для этого в тексте процедуры перед выше приведенном циклом требуется установить цикл поиска ключевых слов. Пример фрагмента данного цикла приведен ниже

strcpy(str,Edit1->Text.c_str()); // ключевое слово

ptr=strstr(buf,str); // поиск слова

// цикл поиска

while(ptr!= NULL) {

RtfIns((int)(ptr-buf),…,…..); // начало подсветки

RtfIns((int)(ptr-buf)+…+…-1,…,…); // конец подсветки

ptr=ptr+…+…+…; // смещение указателя

ptr=strstr(ptr,str); // поиск слова

}

 

17. Отладить и проверить правильность выполнения поиска ключевых слов. После выполнения процедуры найденные слова в тексте (поле RichEdit) должны быть выделены красным цветом.

18. Выполнить 4 этап разработки процедуры поиска и визуализации. Для этого в тексте процедуры в цикле поиска необходимо организовать счетчик. По окончанию поиска содержимое счетчика необходимо ввести в окно приложения

Edit2->Text=IntToStr(count); // вывод результата поиска

19. Отладить и проверить правильность работы всего приложения. На Рисунке 6.2 приведен пример окна после выполнения процедуры поиска.

 

Рисунок 6.2 - Вид окна приложения после выполнения процедуры поиска

 

Контрольные задания и вопросы:

1. Каким образом можно изменить цвет выделяемого текста?

2. В процедурах RtfIns() и RtfDel() используется статический внутренний буфер char buff[0xffff]. Требуется изменить этот буфер на динамический, отладить процедуры (при выполнении программы необходимо многократно вызывать процедуры поиска) и привести листинги данных процедур.

3. Запись текста RTF-формата в поле RichEdit производится через файл. Предложить свой вариант решения, в котором перезапись выполнялась бы через память.

4. Предусмотреть активизацию кнопки «Преобразовать в Ansi» только в том случае, если русский текст не читаем.

5. Предусмотреть блокировки кнопок управления программой от неправильных действий оператора (защита от «дурака»).

 

Требования к отчету:

Отчет должен содержать:

титульный лист;

задание;

листинги основных процедур;

структуру приложения;

ответы на контрольные задания и вопросы.

Отчет должен быть выполнен чисто и аккуратно. При оформлении отчета рекомендуется использовать различные текстовые и графические редакторы. Студент, допустивший отклонения от требований, к защите работы не допускается.






Поделиться с друзьями:


Дата добавления: 2016-12-06; Мы поможем в написании ваших работ!; просмотров: 441 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Если президенты не могут делать этого со своими женами, они делают это со своими странами © Иосиф Бродский
==> читать все изречения...

2464 - | 2329 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.