
- •Курск - 2003
- •Интегрированная среда Delphi
- •Цель лабораторной работы
- •Информационные материалы
- •Главное окно
- •Окно редактора кода
- •Окно дерева объектов
- •Окно браузера
- •Лабораторная работа №2 Основы визуального программирования
- •Лабораторная работа №3 Линейные вычислительные процессы
- •Лабораторная работа №4 Итерационные вычислительные процессы
- •Лабораторная работа №5 Циклические вычислительные процессы
- •Лабораторная работа №6 Обработка строковых данных
- •Лабораторная работа №7 Обработка одномерных массивов
- •Лабораторная работа №8 Обработка матриц
- •Лабораторная работа № 9 Программирование операций с матрицами
- •Лабораторная работа №10 Программирование файловых операций
- •Лабораторная работа №11 Графические средства Delphi
- •Библиография
Лабораторная работа №10 Программирование файловых операций
1. Цель лабораторной работы
Целью лабораторной работы является приобретение практических навыков программирования файловых операций.
2. Условия: в заданом символьном файле найти наиболее часто встречающееся слово.
3. Используемые компоненты и их свойства
№ |
Имя компонента |
Настраиваемые свойства |
Значения
|
Комментарии |
1 |
2 |
3 |
4 |
5 |
1 |
Form1 (форма) |
BorderIcons
BorderStyle Caption Menu |
{biSystemMenu} {biMinimize}
bsSingle File MainMenu1 |
Системное меню Кнопки минимизации, Рамка в 1 пиксель Заголовок формы Главное меню |
2 |
Memo1 (многострочный редактор) |
Lines.String
Align
ScrollBars |
' '
AlClient
ssVertical |
Содержит строки текста Занимает всю об- ласть формы, не- занятую другими компонентами Вертикальная полоса прокрутки |
3 |
ToolBar1 (инструментальная панель) |
AutoSize
HotImages
Images |
True
ImageList1
ImageList1 |
Высота компонен- та зависит от вы- соты кнопок Определяет кон- тейнер изображе- ний для кнопок в момент, когда над кнопкой распола- гается указатель мыши Определяет кон- тейнер для изо- бражения кнопок в обычном состоя- нии |
4 |
ImageList1 (хранилище изображен.) |
ShareImages Bitmap |
True {код рисунка} |
Содержит пикто- граммы выводи- мых изображений |
1 |
2 |
3 |
4 |
5 |
5 |
ToolButton7 (инструментальная кнопка) |
ImageIndex
Cursor
OnClick |
3
crHandPoint
MNewClick |
Индекс связанного с кнопкой изображения Вид курсора над пиктограммой Событие (щелчок), создать новый файл |
6 |
ToolButton1 (инструментальная кнопка) |
ImageIndex OnСlick |
0 MОpenСlick |
Событие (щелчок), открыть файл |
7 |
ToolButton8 (инструментальная кнопка) |
ImageIndex
OnClick |
4
MSaveClick |
Индекс связанного с кнопкой изображения Событие (щелчок), записать файл |
8 |
ToolButton2 (инструментальная кнопка) |
Style |
tbsSeparator |
Разделитель (на месте этой кнопки будет пустое место) |
9 |
ToolButton3 (инструментальная кнопка) |
ImageIndex
OnClick
|
1
MRunClick |
Индекс связанного с кнопкой изображения Событие (щелчок), запустить программу |
10 |
ToolButton4 (инструментальная кнопка) |
Style |
tbsSeparator |
Разделитель (на месте этой кнопки будет пустое место) |
11 |
ToolButton5 (инструментальная кнопка) |
ImageIndex OnClick |
2 MExitClick |
Индекс Событие (щелчок), выйти |
12 |
ToolButton6 |
Style |
tbsSeparator |
Разделитель
|
1 |
2 |
3 |
4 |
5 |
13
|
MainMenu1
|
Images
Name Caption
MNew
Caption
ImageIndex
ShortCut
OnClick Name
Caption
SubMenuImages
ImageIndex ShortCut
OnClick Name
Caption
ImageIndex ShortCut
Name Caption
OnClick Name
Caption
Name
Caption
SubMenuImages
ImageIndex ShortCut OnClick Name
Caption
Name
Caption
SubMenuImages
ImageIndex OnClick Name Caption
Name
Caption
OnClick Name
Caption
OnClick |
ImageList1
N1 Файл
Name
Новый
3
16462
MNewClick NOpen
Oткрыть
ImageList1
0 16463
MOpenClick Save Сохранить
4 16467
MSaveAs Сохранить как
MSaveClick N 2
MRun
Найти
ImageList1
1 16454 MRunClick N3
MExit
Выход
ImageList1
2 MExitClick N4 Помощь
MMess
Условие
MmesClick About1
About
AboutClick |
Содержит ссылку на объект – хра- нилище изображе- ний , которые мо- гут появляться около индивиду- альных элементов (пунктов) в меню Имя пункта меню Наименование пункта Имя опции пункта меню Наименование опции Индекс связаного с опцией изобра- жения из компо- нента ImageList (слева) Ctrl+N - клавиши акселераторы Событие (щелчок) Имя опции пункта меню Наименование опции Содержит ссылку на объект- храни- лище изображе- ний, которые мо- гут появляться около индивиду- альных элемен- тов(пунктов) в подменю этого пункта меню Индекс Ctrl+O- клавиши акселераторы Событие (щелчок) Имя опции пункта
Наименование опции Индекс Ctrl+S- клавиши акселераторы Имя опции пункта Наименование опции Событие (щелчок) Имя опции пункта меню Разделительная черта Имя опции пункта меню Наименование опции Содержит ссылку на объект – хранилище изображений Индекс Ctrl+a Событие (щелчок) Имя опции пункта меню Разделительная черта Имя опции пункта меню Наименование опции Содержит ссылку на объект – хранилище изображений Индекс Событие (щелчок) Имя пункта меню Наименование пункта Имя опции пункта меню
Наименование опции Событие (щелчок) Имя опции пункта меню Наименование опции Событие (щелчок) |
1 |
2 |
3 |
4 |
5 |
14 |
OpenDialog1 (диалог открытия) |
Filter
FilterIndex
|
'Текстовый документ |*.txt| Word документы |*.doc| Все файлы |*.*| ' 3
|
Фильтр отбора файлов, показываемых в диалоговом окне
Действующий индекс фильтра |
15 |
SaveDialog1 (диалог записи)
|
FileName
Filter
FilterIndex
|
Путь к файлу
'Текстовые документы |*.txt| Word документы |*.doc| все файлы |*.*|' 3 |
Маршрут и имя записываемого файла Фильтр отбора файлов записываемых
Действующий индекс фильтра |
Компонент Memo1 – многострочный редактор. Текст хранится в свойстве Lines класса TString и представляет собой пронумерованный набор строк (нумерация начинается с нуля ). Методы: Add (добавить), Delete (удалить), Insert (вставить), Clear (очистить весь текст).
Свойства: Count- текущее количество строк в наборе; Strings [Index]-открывает доступ к строке с индексом Index.
Компонент ToolBar1 – специальный контейнер для создания инструментальных панелей. Для него разработан компонент TТoolButton (инструментальная кнопка). Вставить компонент ToolButton только после щелчка правой кнопкой на компоненте ToolBar и выборе NewButton или NewSeparator (сепараторы предназначены для функционального выделения на инструментальной панели групп элементов и представляют собой разновидности кнопок ToolButton). Компонент ToolBar извлекает из контейнера ImageList картинку и помещает её на инструментальную кнопку.
Компонент ImageList – контейнер для хранения множества рисунков одинакового размера (.bmp;.ico). Для заполнения компонента щёлкните по нему правой кнопкой мыши и выберите продолжение ImageList Editor. Имя этого компонента следует указать в свойствах HotImages, Images.
В компоненте MainMenu используется свойство Images для указания ссылки на объект – хранилище изображений, которые могут появляться около индивидуальных элементов (пунктов) в меню , SubMenuImages для ссылки к опциям пункта меню.
При работе с файлами необходимо использовать диалоги открытия и сохранения файлов.
Свойство FileName : String содержит маршрут поиска и выбранный файл при успешном завершении диалога. Проверить существование файла можно глобальной функцией FileExists или использовать механизм обработки исключительных ситуаций. Свойство Filter : String используется для фильтрации (отбора) файлов, показываемых в диалоговом окне. Для доступа к редактору достаточно щёлкнуть по кнопке в строке Filter окна инспектора объектов.
Работа со стандартными диалоговыми окнами осуществляется в три этапа . Вначале на форму помещается соответствующий компонент и осуществляется настройка его свойств(компонент – диалог не виден в момент работы программы , видно лишь создаваемое им стандартное окно). На втором этапе осуществляется вызов стандартного для диалогов метода Execute, который создаёт и показывает на экране диалоговое окно.
Вызов этого метода обычно располагается внутри обработчика какого-либо события. Например, обработчик выбора опции меню Открыть файл может вызвать метод Execute диалога TOpenDialog, щелчок по кнопке сохранить может вызвать такой же метод у компонента TSaveDialog. Только после обращения к Execute на экране появляется соответствующее диалоговое окно. Execute- возвращает True, если результат диалога с пользователем был успешным.
Проанализировав результат Execute можно выполнить третий этап – использование введённых с помощью диалогового окна данных –имени файла.
Запись оператора проверки:
if OpenDialog.Execute and FileExists(OpenDialog1.FileName)
then {успешный выбор}…
4.Форма задания
5. Текст программы.
unit UMain9;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, Menus, ToolWin, ComCtrls, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
MOpen: TMenuItem;
N3: TMenuItem;
MExit: TMenuItem;
ImageList1: TImageList;
N2: TMenuItem;
MRun: TMenuItem;
OpenDialog1: TOpenDialog;
Memo1: TMemo;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
MNew: TMenuItem;
MSave: TMenuItem;
MSaveAs: TMenuItem;
SaveDialog1: TSaveDialog;
N4: TMenuItem;
MMess: TMenuItem;
About1: TMenuItem;
procedure MExitClick(Sender: TObject);
procedure MOpenClick(Sender: TObject);
procedure MSaveClick(Sender: TObject);
procedure MSaveAsClick(Sender: TObject);
procedure MNewClick(Sender: TObject);
procedure MRunClick(Sender: TObject);
procedure MMessClick(Sender: TObject);
procedure About1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses UAbout;
{$R *.dfm}
const
mes=' наиболее часто встречающиеся слово ';
var
FName : String;
procedure TForm1.MExitClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.MOpenClick(Sender: TObject);
begin
if(OpenDialog1.Execute())then
begin
FName:=OpenDialog1.FileName;
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
end;
procedure TForm1.MSaveClick(Sender: TObject);
begin
if(FName <>'')
then
Memo1.Lines.SaveToFile(FName)
else
begin
if(SaveDialog1.Execute())then
begin
FName:=SaveDialog1.FileName;
Memo1.Lines.SaveToFile(FName);
end;
end;
end;
procedure TForm1.MSaveAsClick(Sender: TObject);
begin
SaveDialog1.FileName:=FName;
if(SaveDialog1.Execute())then
begin
FName:=SaveDialog1.FileName;
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
end;
procedure TForm1.MNewClick(Sender: TObject);
begin
FName:='';
Memo1.Lines.Clear;
end;
procedure TForm1.MRunClick(Sender: TObject);
var
i : integer;
j : integer;
p : integer;
d : integer;
max : integer;
st : string;
S : array[1..1000]of String;
C : array[1..1000]of integer;
begin
// Input words
st:=Form1.Memo1.Text;
i:=0;
p:=1;
While p > 0 do
begin
i:=i+1;
p:=pos(' ',st);
S[i]:=copy(st,1,p);
delete(st,1,p);
end;
d:=i;
S[d]:= st;
//Sortirovka
for i:=1 to d do
begin
c[i]:=1;
for j:=1 to d do
if (i<>j) then
if S[i]=s[j] then
begin
c[i]:=c[i]+1;
end
end;
//Source
max:=1;
for i:=2 to d do
if c[i]>c[max] then max:=i;
ShowMessage(mes+' -> '+s[max]);
end;
procedure TForm1.MMessClick(Sender: TObject);
begin
ShowMessage('Дан символьный файл,
Получить'+mes+'в этом файле !');
end;
procedure TForm1.About1Click(Sender: TObject);
begin
Form2.ShowModal;
end;
end.
6. Комментарии к тексту программы
Процедура MExit закрывает форму .
Процедура MMessClick выводит сообщение об условиях задачи и инициируется при выборе пункта меню.
Процедура About1Click открывает форму Form2 с рекламной информацией. Form2- модальная форма и для возврата в форму Form1 необходимо закрыть окно с формой Form2.
Процедура MOpenClick реализует диалог пользователя по поиску и выбору необходимого файла. Отображение имён файлов обеспечивается в соответствии с фильтром компоненты (*.*). Используется метод Execute, описанный выше. Если результат был успешным, то переменной FName будет присвоено выбранное пользователем имя файла (OpenDialog1.FileName) Содержимое этого файла загружается в многострочный редактор. Используется свойство Lines(содержит строки текста) и метод LoadFromFile(загрузка из файла).
Процедура MSaveClick обеспечивает запись содержимого многострочного редактора в файл. Используется метод SaveToFile . Если имя файла определено (FName”<>”), то содержимое Memo1 выгружается в указанный файл. В противном случае осуществляется диалог SaveDialog1. Execute, при успешной реализации (выбор имени: FName:=SaveDialog1.FileName) содержимое Memo1 выгружается в файл.
Процедура MSaveAsClick выгружает содержимое Memo1 в файл под другим именем. Для этого осуществляется задание нового имени файла (SaveDialog1.FileName:= FName), затем выгрузка в файл.
Процедура MNewClick очищает компоненту Memo1 и поле имени файла.
Процедура MRunClick реализует действия, определённые заданием. В операторе st:=Form1.Memo1.Text используется свойство Text: интерпретирует набор строк в виде одной длинной строки с разделителями EOLN между отдельными строками набора. Строка st просматривается на поиск отдельного слова, которое записывается в массив S. Затем сформированный массив анализируется и подсчитывается сколько раз встречается то или иное слово(массив C). И в заключении в массиве S находится максимальное значение , а из массива S соответствующее слово. Информация о найденном слове выводится в окне (сообщение ShowMessage).
7. Содержание отчёта
-задание,
-описание свойств используемых компонент и форм,
- текст программы с комментариями,
- результаты вычислений.
8. Тренировочные вопросы к защите:
В чём функциональное назначение компонента TМemo ?
В каком свойстве компоненты TМemo хранится отображённый текст?
В каком свойстве компоненты TМemo содержатся строки текста?
Запишите оператор загрузки текста в компоненту TМemo?
Запишите оператор выгрузки содержимого из компоненты TМemo?
Какие методы можно использовать для работы с компонентом TМemo? Примеры записи.
Какие компоненты необходимо использовать для реализации диалога?
Что содержит свойство FileName при использовании компонента TOpenDialog ?
Какая функция используется для проверки существования файла?
Каким образом при реализации диалога можно указать перечень файлов, отображаемых в окне?
Какой метод для диалога создаёт и показывает на экране диалоговое окно?
Какое значение возвращает функция Execute, если результат диалога с пользователем был успешным?