Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
яву_кисо_delphi(1)(1).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.26 Mб
Скачать

Лабораторная работа №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. Тренировочные вопросы к защите:

  1. В чём функциональное назначение компонента TМemo ?

  2. В каком свойстве компоненты TМemo хранится отображённый текст?

  3. В каком свойстве компоненты TМemo содержатся строки текста?

  4. Запишите оператор загрузки текста в компоненту TМemo?

  5. Запишите оператор выгрузки содержимого из компоненты TМemo?

  6. Какие методы можно использовать для работы с компонентом TМemo? Примеры записи.

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

  8. Что содержит свойство FileName при использовании компонента TOpenDialog ?

  9. Какая функция используется для проверки существования файла?

  10. Каким образом при реализации диалога можно указать перечень файлов, отображаемых в окне?

  11. Какой метод для диалога создаёт и показывает на экране диалоговое окно?

  12. Какое значение возвращает функция Execute, если результат диалога с пользователем был успешным?