Назначение файла (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. Проанализировать полученные результаты и оформить отчет по лаб. Работе.