русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

While notEOF(f) do


Дата добавления: 2013-12-23; просмотров: 879; Нарушение авторских прав


Begin

Begin

read(f, zap); { чтение очередной записи }

. . . . { операторы обработки записи }

end;

 

По завершении работы с файлом его следует закрыть с помощью стандартной процедуры Close, имеющей следующий формат:

 

Close(<ф.п.>);

 

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

Приведем еще две полезные процедуры для работы с файлами – переименование и удаление файла.

Процедура Rename переименовывает файл. Формат обращения:

 

Rename(<ф.п.>, <новое имя>);

 

Здесь <новое имя> – строковое выражение, содержащее новое имя файла.

Процедура Erase уничтожает файл. Формат обращения:

Erase(<ф.п.>);

 

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

Дополнительную информацию о процедурах работы с файлами можно прочитать в литературе. См. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Стр. 119 - 131, 137 - 138.

Приведем пример программы, работающей с типизированным файлом.

 

program typ_file;

{ Программа работы с типизированными файлами на языке Турбо Паскаль.

Создается файл из записей, содержащих по 3 поля: фамилия, год рождения

и телефон. Записи сортируются по фамилиям, затем содержимое файла

выводится на экран. Для наглядности программа содержит отладочную

печать, отмеченную комментарием вида "о" }

uses CRT;



type person = record

fam: string[15]; {фамилия}

year: integer; {год рождения}

tel: string[10]; {телефон}

end;

var FP: file of person; {файловая переменная}

zap,zapt,zap_min: person;

nz,nz_min,LZ,i,j: integer;

name: string;

new_file: boolean; { признак вновь создаваемого файла }

ch:char;

 

begin

ClrScr; { очистка экрана }

write('Введите имя файла: ');

readln(name);

if name='' then name:='person.dat'; { если имя файла не введено, а нажата клавиша «Enter», то имя файла принимает значение ‘person.dat’ }

assign(fp,name); { связь файловой переменной с дисковым файлом }

new_file:=false;

{$I-}

reset(FP); { проверяем, есть ли файл на диске }

{$I+}

if IOResult=0 then writeln('Файл существует')

else { файл не существует }

begin

new_file:=true;

rewrite(FP); { создание нового файла }

repeat { ввод информации с экрана и вывод ее в файл }

write('фамилия: '); readln(zap.fam);

write('год рождения: '); readln(zap.year);

write('телефон: '); readln(zap.tel);

write(FP,zap); { вывод записи в файл }

writeln('продолжить ввод - любая клавиша, окончить - ESC');

until readkey=#27; { #27 - код клавиши ESC }

close(FP) { закрытие файла }

end;

if new_file then reset(FP); { вновь созданный файл необходимо открыть для чтения, а существующий файл уже был открыт ранее }

LZ:=FileSize(FP); { определение размера файла }

writeln('Файл содержит', LZ:3,' записей');

write('нужно сортировать [y/n]? ');

readln(ch);

if ch='y' then { сортировка по фамилиям }

begin

nz:=0; { nz - номер записи, нумерация записей начинается с 0 }

for i:=0 to LZ-2 do { цикл по количеству записей в файле - 1 }

begin

seek(FP,nz); { позиционирование на запись с номером nz }

read(FP,zap); { чтение записи с номером nz }

{o} writeln('считали запись',nz:3,' фамилия ',zap.fam);

zap_min:=zap; { запоминание записи с номером nz }

nz_min:=0; { номер записи, содержащей минимальную фамилию }

for j:=nz+1 to LZ-1 do { вложенный цикл - просмотр записей от текущей до конца файла. Позиционирование не требуется, поскольку записи считываются последовательно }

begin

read(FP,zapt); { чтение записи }

{o} writeln('считали запись',j:3,' фамилия ',zapt.fam);

if zapt.fam < zap_min.fam then { обнаружена запись с «меньшей» фамилией }

begin

zap_min:=zapt; { запоминание записи c «меньшей» фамилией }

nz_min:=j; { запоминание номера записи }

end

end;

if nz_min<>0 then { обмен записей с номерами nz_min и nz}

begin

{o} writeln('обмен записей nz=',nz:3,' и nz_min=',nz_min:3);

seek(FP,nz);

write(FP,zap_min); { вывод в файл записи с минимальной фамилией в позицию nz }

{o} writeln('вывели в файл запись',nz:3,' фамилия ',zap_min.fam);

seek(FP,nz_min);

write(FP,zap); { вывод ранее сохраненной записи в позицию nz_min }

{o} writeln('вывели в файл запись',nz_min:3,' фамилия ',zap.fam);

end;

nz:=nz+1; { приращение номера записи }

{o} readkey { приостанов отладочного вывода }

end

end;

{ вывод результата, т.е. содержимого файла }

ClrScr; { очистка экрана }

seek(FP,0); { позиционирование на начало файла }

writeln('Содержимое файла');

writeln;

while not EOF(FP) do { цикл по количеству записей в файле }

begin

read(FP,zap); { чтение текущей записи }

writeln(zap.fam,' ':16-length(zap.fam),zap.year:5,' ':2,zap.tel) { форматный вывод на экран (в виде таблицы) }

end;

readkey

end.


Список вопросов и заданий по теме «Типизированные файлы»

 

1. Допустимы ли следующие варианты программ и почему?

а) { чтение файла, состоящего из целых чисел }

var f: file ofinteger;

z: integer;

Reset(f);

Assign(f, ‘myfile.dat’);



<== предыдущая лекция | следующая лекция ==>
While not EOF(f) do | Внешние устройства ЭВМ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.