Установление связи с файлом. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Установление связи с файлом.



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

Assign(f,d);

где f - файловая переменная, d - имя файла в виде строкового выражения. Например,

Assign (f, ’fff.dat’);

Assign (g, ’c:\mydir\sss.dat’);

 

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

 

Процедуры Reset и ReWrite предназначены для открытия файлов. Например:

Reset (F);

ReWrite (F);

Процедура Reset предполагает, что открываемый файл уже существует, в противном случае возникает ошибка.

Процедура ReWrite допускает, что файл не существует, в этом случае он создается; если файл существует, то ReWrite очищает его.

В обоих случаях текущий указатель файла устанавливается на его нулевой элемент.

Процедура Close завершает действия с файлом:

Close (файловая переменная);

Например:

Close (f);

Close (g);

При выполнении данной процедуры ликвидируются внутренние буферы, образованные при открытии файла. После закрытия файловую переменную можно связать с помощью Assign с другим дисковым файлом. Можно также открыть заново старый файл, так как связь с переменной Assign с файлом после его закрытия не теряется (при условии, что файловая переменная не переопределена).

Процедура Erase уничтожает файл:

Erase (файловая переменная);

Перед ее выполнением необходимо закрыть файл, если он ранее был открыт с помощью процедур Reset или ReWrite.

Операции ввода-вывода.

Операции ввода-вывода реализуются с помощью процедур Read и Write. Они могут вызываться с различным числом параметров. Эти параметры могут иметь различные типы.

Read читает запись из файла в программу:

Read(f, a);

где f - файловая переменная; a - список ввода переменных, в которые будут помещаться читаемые из файла значения (тип А должен совпадать с типом файловой переменной).

Действия, осуществляемые при чтении элемента файла:

– читается элемент файла, на котором стоит указатель;

– прочитанное значение присваивается переменной из списка ввода;

– указатель смещается на следующий элемент файла.

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

Процедура Write записывает в файл информацию из программы.

Write (f, в);

где f - файловая переменная; b – выражение; тип выражения должен совпадать с типом файловой переменной.

Действия, осуществляемые при записи данных в файл:

– выражение помещается в файл в место, отмеченное указателем;

– указатель передвигается на одну позицию.

 

Перемещение по файлу.

Изменение положения указателя осуществляется с помощью оператора:

Seek(f, i);

где f - переменная файлового типа, i - порядковый номер элемента файла, на который необходимо установить указатель (тип переменной - longint). Например, оператор установки указателя на начало файла имеет вид:

Seek(f,0);

Функция FileSize (файловая переменная) возвращает общее число элементов файла.

Функция FilePos(файловая переменная) возвращает номер элемента, на который установлен текущий указатель.

Например,

Seek(f, FileSize(f)-1); – устанавливает указатель на последнюю запись файла (последний элемент).

Seek(f, FileSize(f)); - устанавливает указатель за последний элемент файла.

Seek(f, FilePos(f)+1) пропуск элемента.

 

Функция Eof(файловая переменная) дает значение true, если достигнут конец файла, false – в противном случае.

 

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

Truncate (файловая переменная);

 

Команды:

{$I-} отключение автоматического контроля за правильностью открытия файла и возможность приостановить работу программы после открытия файла;

{$I+} включение автоматического контроля за правильностью открытия файла, при неправильном открытии файла происходит аварийное завершение программы.

IOResult – функция, дающая некоторое целое число, анализируя которое, можно оценить, удачно или неудачно прошла процедура открытия файла. Если функция равна 0, то файл открылся нормально.

Assign (f, ‘file.dat’);

{$i-}

Reset(f);

l:= IOResult;

{$i+}

if l <> 0 then ReWrite (f);

Пример 1. Сформировать файл f, компоненты которого являются целыми числами. Переписать в файл h кратные 5, а в файл g не кратные 5 элементы.

Var

h,g,f: file of integer;

a,i: integer;

Begin

Assign(f,’fff.dan’);

ReWrite(f);

a:= 1;

while a <> 0 do

begin

Write(‘Введите число, конец ввода – 0’);

if a <> 0 then

Write (f,a);

end;

Seek(f,0);

Assign(h,’hhh.dan’);

ReWrite(h);

Assign(g,’ggg.dan’);

ReWrite(g);

for i:=1 to filesize(f) do

Begin

Read(f,a);

if a mod 5 =0 then

Write(h,a)

Else

Write(g,a);

end;

Write(‘Файл f’);

Seek(f,0);

for i:= 1 to filesize(f) do

Begin

Read(f,a);

Write(a,’ ‘);

end;

WriteLn;

WriteLn(‘Файл н, кратные 5’);

Seek(h,0);

while not Eof(h) do

Begin

Read(h,a);

Write(‘a,’ ‘);

end;

WriteLn;

Seek(g,0);

WriteLn(‘Файл g, не кратные 5);

while not Eof(g) do

Begin

Read(g,a);

Write(a,’ ‘);

end;

WriteLn;

Close(f);

Close(g);

Close(h);

ReadLn;

End.

 

Пример 2. Написать программу формирования и вывода содержимого файла на экран в виде таблицы. Каждая запись файла имеет поле: номер зачетки, ФИО, стипендия. Предусмотреть возможность добавления записей в файл, если он существует и первоначального ввода, если файла нет. Режимы работы вывести на экран в виде меню:

Меню

1. Ввод

2. Вывод

3. Выход

Список студентов

Номер зачетки ФИО Стипендия
13 поз. 20 поз. 9 поз.

 

 

Ширина таблицы 46 позиций (13+20+9+4 позиции для разделителей).

uses Crt; { использование модуля Crt, доступ к

экрану в текстовом режиме }

Type

stud = record

nz: string[10];

fio: string[20];

stip: real;

end;

Var

f: file of stud;

a: stud; n, k: integer;

t:real;

Begin

Assign (f, ‘st.rez’);

{$i-}

Reset(f);

k:= IOResult;

{$i+}

if k <> 0 then

ReWrite (f);

n:=0;

{Номер режима работы}

while n<=2 do

begin

{Очистка экрана}

ClrScr;

{x – позиция в строке, y – строка}

GotoXY (30, 10);

WriteLn (‘Меню’);

GotoXY (20, 14);

WriteLn (‘1. Ввод’);

GotoXY (20, 16);

WriteLn (‘2. Вывод’);

GotoXY (20, 18);

WriteLn (‘3. Выход’);

GotoXY (15, 20);

Write (‘Введите номер режима работы =>’);

ReadLn (n);

ClrScr;

case n of

1: begin

if k=0 then

Seek (f, FileSize(f));

a.nz:=’1’;

while a.nz<>’0’ do

Begin

Write(‘Введите номер зачетки или 0, если

конец ввода =>’);

ReadLn(a.nz);

if a.nz <> ‘0’ then

Begin

Write (‘ФИО=>’);

ReadLn (a.fio);

Write (‘Стипендия=>’);

ReadLn (a.stip);

Write (f,a);

end;

end;

Reset(f);

k:=0;

end;

2: begin

if k<>0 then

Begin

writeln (‘файл пуст’);

readln;

end;

if k =0 then

Begin

Seek (f, 0);

WriteLn (‘ Список студентов’);

WriteLn(‘_________________________ ____________________’);

WriteLn (‘| номер зачетки | фио |

стипендия |’);

WriteLn(‘_________________________

____________________’);

t:=0;

while not Eof (f) do

Begin

Read (f,a);

WriteLn (‘| ‘, a.nz:10, ‘ |’, a.fio:20, ‘| ’,

a.stip:6:2, ‘ |’);

t:=t+a.stip;

end;

WriteLn(‘_________________________

____________________’);

WriteLn(‘| итого |’,t:8:2,’ |’);

WriteLn(‘_________________________

____________________’);

ReadLn;

end;

end;

3: Close (f);

end; {Конец case}

end; {Конец while-меню}

ClrScr;

end.

 



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 266; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.146.35.203 (0.033 с.)