Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LR_11-12 Методические указания к лабораторным работам

.pdf
Скачиваний:
36
Добавлен:
06.07.2020
Размер:
775.69 Кб
Скачать

ФГБОУ ВПО «Воронежский государственный технический университет»

Кафедра конструирования и производства радиоаппаратуры

573-2015

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к лабораторным работам № 11-12 по дисциплине «Информатика» для студентов направления подготовки

11.03.03 «Конструирование и технология электронных средств» (профиль «Проектирование и технология радиоэлектронных средств»)

ипо дисциплине «Спецглавы информатики»

12.03.01«Приборостроение» (профиль «Приборостроение») очной и заочной форм обучения

Воронеж 2015

Составитель

д-р техн. наук М.А. Ромащенко

УДК 004.4

Методические указания к лабораторным работам № 11-12 по дисциплине «Информатика» для студентов направления подготовки 11.03.03 «Конструирование и технология электронных средств» (профиль «Проектирование и технология радиоэлектронных средств») и по дисциплине «Спецглавы информатики» для студентов направления подготовки 12.03.01 «Приборостроение» (профиль «Приборостроение») очной и заочной форм обучения / ФГБОУ ВПО «Воронежский государственный технический университет»; сост. М.А. Ромащенко, 2015. 36 с.

Методические указания предназначены для выполнения лабораторных работ № 11 и 12 по дисциплине «Информатика» бакалаврами первого курса направления подготовки 11.03.03 «Конструирование и технология электронных средств» и по дисциплине «Спецглавы информатики» бакалаврами первого курса направления подготовки 12.03.01 «Приборостроение» очной и заочной форм обучения.

Методические указания подготовлены в электронном виде и содержатся в файле ЛР 11-12.pdf.

Табл. 4. Ил. 11. Библиогр.: 4 назв.

Рецензент д-р техн. наук, проф. О.Ю. Макаров

Ответственный за выпуск

зав. кафедрой

 

д-р техн. наук, проф. А.В. Муратов

Издается по решению редакционно-издательского совета Воронежского государственного технического университета

© ФГБОУ ВПО «Воронежский государственный технический университет», 2015

1.ЛАБОРАТОРНАЯ РАБОТА №11

РАБОТА С ФАЙЛАМИ В СИСТЕМЕ DELPHI

Цель работы: ознакомиться с компонентами Delphi – ListBox, ComboBox и Memo и изучить их основные свойства и методы. Изучить принципы работы с файлами в системе Delphi. Получить представление об основных операторах реализующих работу с файлами. закрепить знания об использовании диалогов работы с файлами в системе Delphi и их настройке

Время работы: 8 часов.

1.1. Домашние задания и методические указания по их выполнению

Задание 1 – ознакомиться с компонентами Delphi – ListBox, ComboBox и Memo. Изучить основные свойства и методы этих компонентов.

Работа с файлами важная вещь в любом языке программирования. Работа с файлами в Delphi позволяет считывать, сохранять информацию, и выполнять другие действия с файлами. В Delphi поддерживаются все операции с файлами - создание, поиск, чтение и запись, переименование как файлов, так и к директорий. В Delphi существует несколько способов работы с файлами.

Рассмотрим компоненты Delphi, которые умеют работать с файлами. Они читают и сохраняют своё содержимое, строки типа String, в файл текстового формата. Это компоненты ListBox, ComboBox и Memo, расположенные на первой же вкладке палитры компонентов.

Каждая строка компонентов ListBox и ComboBox является объектом Items[i], а Memo - Lines[i], где i - номер строки, который отсчитывается от нуля. Добавление строк в компоненты выполняется методами Add и Insert: Например

begin

Memo1.Lines.Add('Первая строка'); ComboBox1.Items.Add('Первая строка'); ComboBox1.Items.Add('Вторая строка'); ListBox1.Items.Add('Первая строка'); ListBox1.Items.Add('Вторая строка');

end;

В результате выполнения этого фрагмента программного кода получится результат представленный на рис. 1.

Рис. 1 – Пример работы с компонентами Memo, ComboBox и ListBox

Метод Add добавляет новую строку в конец. Метод Insert имеет дополнительный параметр, указывающий, после какой строки разместить новую строку. Доступ к строкам осуществляется следующим образом:

ComboBox1.Items[0] := 'Первая строка изменилась';

ListBox1.Items[1] := 'Вторая строка изменилась';

У компонента ComboBox дополнительно есть свойство Text, где (как и у компонента Edit) находится вводимый текст:

ComboBox1.Text := ' Вводимый текст ';

На выделенную в данный момент строку компонента ComboBox указывает свойство ItemIndex типа Integer, то есть это номер выделенной строки. Следовательно, получить саму выделенную строку компонента ComboBox можно следующим выражением:

S:=ComboBox1.Items[ComboBox1.ItemIndex];

или, пользуясь оператором присоединения

With ComboBox1 do

S:=Items[ItemIndex];

Рассмотрим пример программного кода позволяющего по нажатию клавиши Enter заносить в компонент ComboBox введенную в строку информацию и удалять нажатием Escape. Для этого проделайте следующие действия:

- переместите на форму компонент ComboBox (вкладка Standart), а в Инспектор Объектов перейдите на вкладку Events. Щёлкните дважды по обработчику OnKeyPress. Система Delphi создаст заготовку обработчика. Впишите в него (рис. 2):

2

begin

if Key=#13 then ComboBox1.Items.Add(ComboBox1.Text);

if Key=#27 then ComboBox1.Items.Delete(ComboBox1.Items.Count-1);

end ;

Рис. 2. Программирование обработчика событий

Key – определённая в этом обработчике переменная, содержащая код нажатой клавиши, #13 и #27 – коды клавиш Enter и Escape соответственно. Items.Count – количество содержащихся в компоненте строк. Так как отсчёт строк идёт от нуля, мы отнимаем единицу. После очередного удаления количество строк меняется, таким образом, Items.Count-1 всегда указывает на последнюю строку. Последовательно нажимая Escape, мы можем удалить все строки. Командой ComboBox1.Items.Delete(0); можно добиться того же эффекта, только удаляться будут первые строки. Чтобы стереть всё сразу, используется метод Clear.

Рассмотрим как происходит сохранении содержимого в файл. Для этого используется команда

ListBox1.Items.SaveToFile(' Имя_файла.txt ') ;

Впрочем, расширение можно поставить любое по желанию, не обязательно .txt, как и вообще без него обойтись. Но расширение .txt позволит легко открыть файл стандартным Блокнотом Виндовс, что бывает очень удобно на этапе написания программы.

3

Для загрузки служит метод LoadFromFile:

ListBox1.Items.LoadFromFile(' Имя_файла.txt ') ;

Что делать, если в программе не требуются компоненты ComboBox, ListBox или Memo, а сохранять информацию нужно? Берём один из компонентов и делаем его невидимым, для этого в Инспекторе Объектов ставим в свойство Visible значение False. Функциональность компонента от этого не изменится, но Форма не будет загромождена не используемым компонентом.

Задание 2 – изучить принципы работы с файлами в системе Delphi. Получить представление об основных операторах реализующих работу с файлами.

Технология работы с файлами в системе Delphi требует определённого порядка действий.

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

2.Начинается работа с файлом. Это могут быть запись, считывание, поиск и другие операции.

3.Файл закрывается. Теперь он опять доступен другим приложениям без ограничений. Закрытие файла гарантирует, что все внесённые изменения будут сохранены, так как для увеличения скорости работы изменения предварительно сохраняются в специальных буферах операционной системы.

ВDelphi реализовано несколько способов работы с файлами. Рассмотрим стандартный способ, связанный с использованием файловых переменных. Файловая переменная вводится для указания на файл. Делается это с помощью ключевого слова File:

var F: File ;

Описанная таким образом файловая переменная считается нетипизированной, и позволяет работать с файлами с неизвестной структурой. Данные считываются и записываются побайтно блоками, размер которых указывается при открытии файла, вплоть от 1 байт.

Однако чаще используются файлы, состоящие из последовательности

4

одинаковых записей. Для описания такого файла к предыдущему описанию добавляется указание типа записи:

var F: File of <тип_записи>;

В качестве типа могут использоваться базовые типы, или создаваться свои. Важно только, чтобы для типа был точно известен фиксированный размер в байтах, поэтому тип String в чистом виде применяться не может, а только в виде String[N].

Данные, считанные из файла или записываемые в файл, содержатся в обычной переменной, которая должна быть того же типа, что и файловая. Поэтому сначала в программе описывается нужный тип, а затем вводятся две переменные этого типа – файловая и обычная. Фрагмент такого кода представлен на рис. 3.

Рис. 3. Программирование работы с файлами

Для текстовых файлов тип файловой переменной TextFile, а тип обычной переменной String.

Для открытия файла нужно указать, где он расположен. Для этого файловая переменная должна быть ассоциирована с нужным файлом, который определяется его путем. Путь файла может быть абсолютным, с указанием диска и каталогов ('C:\Мои документы\Мои рисунки\FileName.ini'), или относительным, тогда он создаётся в папке с .exe файлом программы. Для задания относительного адреса достаточно указать имя файла с нужным расширением. Делается это оператором AssignFile :

5

AssignFile(SaveF, 'C:\Мои документы\FileName.ini');

AssignFile(SaveF, 'FileName.ini');

Теперь файл должен быть открыт.

Открытие файла оператором Rewrite приведёт к воссозданию файла заново, т.е. существующий файл будет без предупреждения уничтожен, и на его месте будет создан новый пустой файл заданного типа, готовый к записи данных. Если же файла не было, то он будет создан.

Открытие файла оператором Reset откроет существующий файл к считыванию или записи данных, и его указатель будет установлен на начало файла:

Rewrite(SaveF);

Reset(SaveF);

Каждый из этих операторов может иметь второй необязательный параметр, имеющий смысл для нетипизированных файлов, и указывающий длину записи нетипизированного файла в байтах:

Rewrite(SaveF, 1);

Reset(SaveF, 1);

Чтение файла производится оператором Read :

Read(SaveF, SaveV);

Запись в файл производится оператором Write :

Write(SaveF, SaveV);

При этом чтение и запись производится с текущей позиции указателя, затем указатель устанавливается на следующую запись. Можно проверить, существует ли нужный файл, оператором FileExists :

if FileExists('FileName.ini') then Read(SaveF, SaveV);

Принудительно установить указатель на нужную запись можно оператором Seek(SaveF, N), где N - номер нужной записи, который, как и почти всё в программировании, отсчитывается от нуля:

6

Seek(SaveF, 49); - установка указателя на 50-ю запись.

При последовательном чтении из файла рано или поздно будет достигнут конец файла и при дальнейшем чтении произойдёт ошибка. Проверить, не достигнут ли конец файла, можно оператором EOF (аббревиатура End of File), который равен true, если прочитана последняя запись и указатель находится в конце файла:

while (not EOF(SaveF)) do Read(SaveF, SaveV);

Для текстовых файлов вместо Read и Write используются операторы Readln и Writeln, умеющие определять конец строки. Оператор Truncate(SaveF) позволяет отсечь (стереть) все записи файла, начиная от текущей позиции указателя, и до конца файла.

Вконце работы с файлом его необходимо закрыть. Это делается оператором CloseFile(SaveF) ;

Вкачестве примера приведен код программы, который запоминает положение формы на экране. Создаём обработчик события Формы OnCreate со следующим содержимым (далее предполагается, что обучающийся уже имеет навык создания обработчиков событий) (рис. 4):

procedure TForm1.FormCreate(Sender: TObject) ; begin

AssignFile(SaveF, 'Init.ini') ; if FileExists('Init.ini') then

begin Reset(SaveF) ;

Read(SaveF, SaveV) ; Form1.Left := SaveV.X ; Form1.Top := SaveV.Y ;

Form1.Caption:=SaveV.Caption ; //Наши переменные дополнительно сохраняют заголовок Формы!

end ; end ;

7

Рис. 4. Программирование обработчика событий

Далее необходимо аналогично создать обработчик события OnClose:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction) ; begin

Rewrite(SaveF) ; //Нет необходимости проверять наличие файла, создадим его заново!

SaveV.X := Form1.Left ;

SaveV.Y := Form1.Top ; SaveV.Caption := Form1.Caption ; Write(SaveF, SaveV) ; CloseFile(SaveF) ;

end ;

Выполнив вышеуказанные действия можно убедиться, что положение формы в момент закрытия будет полностью повторено при повторном открытии данного приложения. Данные хранятся в файле Init.ini расположенном в том же месте, где и исполняемый .exe файл.

Задание 3 – закрепить знания об использовании диалогов работы с файлами в системе Delphi и их настройке.

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

8