Назначение файла (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);

Открытие файла для вывода (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);

 

 

Ввод из файла

 

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

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

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

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

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

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

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

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

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

Reset (f);

 

Чтение данных из файла (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;

 

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

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

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: