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



ЗНАЕТЕ ЛИ ВЫ?

Связывание имени файла с файловой переменной

Поиск

То есть мы должны объявить, что такому-то идентификатору (файловой переменной) соответствует имя файла на диске (включая устройство и путь). Для этого используется процедура Assign (в Делфи - AssignFile).

Синтаксис:

Assign(<файловая переменная, т е идентификатор>,<выражение строкового типа>); Примеры:

Assign(tfu,'MyFile.txt'); Assign(fff,'.\dano.dat'); Assign(fara,'..\ff\ras2.dat'); Assign(fara,'D:\copy6\ras2.dat');Процедура Assign применяется одинаково ко всем файловым типам. Если при вызове Assign для текстового файла не указана файловая переменная, то подразумеваются стандартные переменные: Input - клавиатура и Output - экран. Если вызывать read, readln или write, writeln без указания файловой переменной, также ввод будет с клавиатуры, а вывод - на экран.

Начало работы с файлом.

Чтобы начать работу с файлом, нужно вызвать процедуру reset или rewrite.

Синтаксис:

Типизированные и текстовые файлы:

Reset(<файловая переменная>); Пример: reset(db2);

Открывается СУЩЕСТВУЮЩИЙ файл, который соединен с этой переменной процедурой Assign. Файловый указатель ставится на начало файла (позиция = 0). (После чего файл готов к чтению/записи первой записи).

ReWrite(<файловая переменная>) Пример: rewrite(db2);

Открывается новый пустой файл и ему присваивается имя, заданное в процедуре Assign. Если файл с таким именем уже существует, он очищается. Файловый указатель ставится на начало файла (позиция = 0). (После чего файл готов к записи первой записи, а после появления записей - к их чтению. При этом переставить файловый указатель можно либо процедурой reset, либо процедурой seek, описанной далее).Дополнительно - текстовые файлы можно открыть для добавления данных в конец файла:

Append(<файловая переменная>); Например: Append(ftx);

Удобно при налаживании программы выводить данные, используя пары: close; append; <записать порцию данных> close; append; <записать порцию данных>... и т д

Если убрать close, то нет гарантии, что все данные, которые "записаны" останутся в файле на диске.

Нетипизированные файлы.

Reset(<файловая переменная>,[<размер записи>]); Пример: reset(fara,512);

Примечания:

Если размер записи не указан, подразумевается 128 байт (по умолчанию).

Обычно размер записи равен размеру кластера на устройстве (для дискет - 512 байт) или 1 байт.

ReWrite(<файловая переменная>,[<размер записи>]); Пример: rewrite(fara,512); Примечания - те же, что для reset.

Чтение из файла

Типизированные файлы

Процедура Read(<файловая переменная>,<переменная - буфер чтения>, <переменная - буфер чтения>,...); Переменные должны быть объявлены как переменные того же типа, что и базовый тип файла.

Исполнение этой процедуры:

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

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

Ясно, что для чтения файла процедуру Read нужно исполнить многократно, обычно - в цикле. Для избежания аварии нужно каждый раз проверять - не стоит ли указатель на конце файла. Для этого есть функция eof(<файловая переменная>). Это - булевская функция. Она возвращает true, если файловый указатель находится в конце файла, т е дальше последнего байта файла и возвращает false - иначе.

Пример программы.

Убедимся, что файл, открытый процедурой rewrite

Можно читать.

var f1: file of double; buf: double; ii: byte;

Begin

Assign(f1, 'myfile.dub'); rewrite(f1);

for ii:= 1 to 9 do

begin buf:= 10*ii+ii/10;

write(f1,buf);

end;

seek(f1,4);

for ii:= 1 to 5 do

begin buf:= 77.7;

write(f1,buf);

end;

close(f1);

reset(f1);

While not eof(f1) do

Begin

read(f1,buf);

writeln(buf);

end;

close(f1);

End.

(Файл MyFILE.DUB появился в той же папке, где

Находится turbo.exe, а при запуске откомпилированного



Поделиться:


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

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