Назначение файла (AssignFile)

Объявление файловой переменной задает только тип компонентов файла. Для того чтобы программа могла выводить данные в файл или считывать данные из файла, необходимо указать конкретный файл, т. е. задать имя файла. Имя файла задается вызовом процедуры AssignFile, связывающей файловую переменную с конкретным файлом. Описание процедуры AssignFile выглядит следующим образом:

AssignFile(var f, ИмяФайла:string)

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

Ниже приведены примеры вызова процедуры AssignFile:

AssignFile(f,’a:\result.txt’);

AssignFile(f,'\students\ivanov\korni.txt');

fname:=('otchet.txt') ;

AssignFile(f,fname);

3.3.1.3. Открытие файла для вывода (Rewrite, Append).

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

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

- Перезапись (запись нового файла поверх существующего или создание нового файла)

- Добавление в существующий файл

Для того чтобы открыть файл в режиме создания нового файла или замены существующего, необходимо вызвать процедуру Rewrite (f), где f — файло­вая переменная типа TextFiie.

Для того чтобы открыть файл в режиме добавления к уже существующим данным, находящимся в этом файле, необходимо вызвать процедуру Append (f), где f — файловая переменная типа TextFiie.

Нижеследующий листинг содержит процедуру, которая запускается нажатием кнопки Button1. Она открывает файл в режиме создания нового или заме­щения существующего файла и записывает в него 3 строки.

procedure TFoml.Button1Click(Sender: TObject) ;

var

f: TextFile;

i: integer;

begin

AssignFile(f,'a:\test.txt');

Rewrite(f) ;

for i:=l to 3 do writeln(f,'Строка ',i);

CloseFile(f);

end;

В результате выполнения приведенной выше процедуры на диске А: появля­ется файл test. txt. Вот его распечатка:

Строка 1

Строка 2

Строка 3

В следующем листинге приведена процедура, которая запускается нажатием кнопки Button2. Она открывает файл test. txt, созданный процедурой Tform1.Button1Click, и добавляет в него две строки.

procedure Tform1.Button2Click (Sender: TObject);

Var

f:TextFile;

i:integer;

begin

AssignFile(f,'a:\test.txt') ;

Append(f);

for i:=3 to 5 do writeln(f,'Строка ',i);

CloseFile(f);

end;

В результате выполнения программы содержимое файла test. txt изменяет­ся:

Строка 1

Строка 2

Строка 3

Строка 4

Строка 5

Вывод в файл (write, writeln).

Непосредственно вывод в текстовый файл осуществляется при помощи ин­струкций write или writeln. В общем виде эти инструкции записываются следующим образом:

write(ФайловаяПеременная,СписокВывода) writeln(ФайловаяПеременная, СписокВывода)

где ФайловаяПеременная — переменная, идентифицирующая файл, в который выполняется вывод;

СписокВывода — разделенные запятыми имена переменных, значения кото­рых надо вывести в файл. Помимо имен переменных в список вывода мож­но включать строковые константы. Например, если переменная f является переменной типа TextFiie, то инструкция вывода значений переменных xl и х2 в файл может быть такой:

write(f, 'Корни уравнения ',xl,х2);

Различие между инструкциями write и wnteln состоит в том, что инструк­ция writeln после вывода всех значений, указанных в списке вывода, запи­сывает в файл символ "новая строка".

Закрытие файла (CloseFile).

По окончании работы с файлом его следует закрыть процедурой CloseFile(f);

3.3.2. Ввод из файла

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

- Объявить файловую переменную типа TextFile (var f : TextFile),

- На­значить ей при помощи инструкции AssignFile имя файла, из которого бу­дут считываться данные,

- Открыть файл для чтения (ввода) (Reset(f));

- Прочитать (ввести) данные, используя инструкцию read(f,…) или readln(f,…).

- Закрыть файл (CloseFile(f))

Открытие файла (Reset).

Открытие файла для ввода (чтения) выполняется вызовом процедуры Reset, имеющей один параметр — файловую переменную. Перед вызовом про­цедуры Reset с помощью функции AssignFile файловая переменная должна быть связана с конкретным файлом. Например, следующие инструкции открывают файл для ввода

AssignFile(f,’с:\data.txt’);

Reset (f) ;

3.3.2.2. Чтение данных из файла (Read, Readln)

Чтение из файла выполняется при помощи инструкций read и readln, ко­торые в общем виде записываются следующим образом:

read(ФайловаяПеременная,СписокПеременных) readin(ФайловаяПеременная,СписокПеременных)

где f – файловая переменная — переменная типа TextFile;

Список переменньк — имена переменных, разделенные запятыми.

Чтение чисел

Следует понимать, что в текстовом файле находятся не числа, а их изображения (то есть строки). Действие, выполняемое инструкциями read или readln, фактически состоит из двух:

- сначала из файла читаются символы до появления разделителя (пробела или конца строки),

- затем прочитанные символы, являющиеся изображением числа, автоматически преобразуются в число, и полученное значение присваивается переменной.

Например:

AssignFile (f,'а: \data. txt');

Reset (f); { открыть файл для чтения }

Read(f,a);

read(f,b,c);

CloseFile(f);

Отличие инструкции readln от read состоит в том, что после считывания из файла очередного числа и присвоения полученного значения переменной, имя которой стоит последним в списке параметров инструкции readin, ука­затель чтения из файла автоматически перемещается в начало следующей строки файла, даже в том случае, если за прочитанным числом есть еще числа.

Чтение строк

В программе строковая переменная может быть объявлена с указанием длины или без, например:

var

stroka1 : string[10];

stroka2 : string.

Begin

AssignFile(f,’c:\text.txt’);

Reset(f);

Read(f,Stroka1);

Read(f,Stroka2);

CloseFile(f);

End;

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

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

Контрольные вопросы

1. Что такое имя идентификатора и каковы правила его написания ?

2. Чем отличается константа от переменной ? Каким образом они объявляются и где ?

3. Перечислите основные целочисленные типы данных с примерами их объявления.

4. Перечислите основные вещественные типы данных с примерами их объявления.

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

6. Приведите пример объявления булевских переменных.

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

8. Чем отличаеются логические операции от арифметических?

9. Для чего нужны опреации отношения, и какие для них используются символы?

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

11. Как можно преобразовать строки в целые или вещественные данные?

12. Как ввести числовые данные через окно ввода и окно однострочного редактора TEdit?

13. Как ввести строковые данные через окно ввода и окно однострочного редактора TEdit?

14. Как двумя способами вывести строковую информацию в окно сообщения? Сравните эти способы.

15. Как двумя способами вывести числовую информацию в окно сообщения? Сравните эти способы.

16. Как вывести информацию в окно редактора Tedit или в поле диалогового окна TLabel?

17. Напишите фрагмент кода для создания файла и записи в него текста.

18. Напишите фрагмент кода для чтения текстовой информации из файла.

19. Как записывать и считывать информацию нетекстовую?

Лабораторная работа 4

«Использование стандартных и пользовательских модулей, процедур и функций»

Цель работы: исследование возможностей использования стандартных процедур и функций, создание и применение пользовательских процедур и функций.

1. Задание на лабораторную работу.

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

1.2. Ознакомиться с правилами создания пользовательских модулей, процедур и функций.

1.3. Создать, откомпиллировать и исполнить программу с использованием собственных библиотечного модуля и пользовательской процедуры или функции (задание выдается преподавателем).

1.4. Проанализировать полученные результаты и оформить отчет по лаб. Работе.

Наши рекомендации