Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




Для работы с типизированными файлами, кроме процедур Assign, открытия и закрытия файлов, ввода и вывода данных, можно использовать процедуры и функции: Eof, Erase, ReName, loResult, Seek, FileSize, FilePos и Truncate. Процедуры и функции Eof, Erase, ReName и loResult рассмотрены ранее.

Процедура Seek смещает указатель файла к требуемому компоненту файла. Форма обращения к процедуре Seek:

Seek (файловая-переменная, номер-компонента);

где номер-компонента — выражение типа LONGINT, номер требуемого компонен­та; первый компонент файла имеет номер 0.

Например: Seek (F, 0); - смещение указателя к началу файла F.

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

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

Например: N:= FileSize (F); – определение значения N − количества компонентов файла F.

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

Seek (F, FileSize (F));

где F – файловая-переменная.

Функция FilePos возвращает значение типа LONGINT, порядковый номер того компонента файла, который будет обрабатываться следующей операцией ввода-вывода.

Форма обращения к функции:

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

Например: FilePos (F);.

Для перемещения указателя к предыдущему компоненту файла, например к компоненту, найденному с помощью программы, можно использовать обраще­ние к функции Seek в виде:

Seek (F, FilePos (F) – 1);

После этого можно, например, возвратить скорректированную запись, т. е. записать ее на прежнее место процедурой Write ее обновленное значение.

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

Формат обращения к процедуре Truncate:

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

Например: Truncate (F);.

Рассмотрим пример схемы алгоритма процедуры, использующей усечение файла и соответствующего ей фрагмента программы.

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

Сначала определяется количество записей файла F: KL = FileSize (F);.

Для поиска удаляемой записи вводится требуемая фамилия из файла FI в переменную TFM.

Вводится запись из файла F в переменную Z.

Анализируется ее значение Z.FIO:

1) если Z.FIO <> TFM, анализируется "конец файла F";

2) если Z.FIO = TFM, т. е. найдена удаляемая запись, выводится сообщение «Удаляем запись» и ее содержимое с помощью процедуры Р.

 

 

Затем анализируется положение указателя:

1) если EOF (F) = TRUE, т.е. удаляется последняя запись файла, то указатель перемещается на предпоследнюю запись с помощью SEEK (F, KL – 1);

2) если EOF (F) = FALSE, т.е. удаляется не последняя запись, то с помощью цикла по I все записи, расположенные после удаляемой, сдвигаются на одну запись к началу файла.

После установки указателя на последнюю запись или после «сдвига» всех записей, остающихся в файле, выполняется усечение файла с помощью процедуры Truncate (F);, затем производится выход из процедуры с помощью процедуры Exit.

Фрагмент программы:

KL:= FileSize (F); { - количество записей файла}

....READLN (FI, TFM); { - ввод TFM из файла FI }

REPEAT READ (F, Z); {- начало поиска записи для удаления }

IF TFM = Z.FIO THEN { - найдена запись для удаления }

BEGIN

WRITELN (‘ УДАЛЯЕМ ЗАПИСЬ:’); P;

IF EOF (F) THEN SEEK (F, KL – 1) { - удаляем последнюю запись}

ELSE { - сдвиг записей в сторону начала файла}

FOR I:= FilePos (F) TO KL – 1 DO

BEGIN

SEEK (F, I); READ (F, Z); { - читать I – ю запись}

SEEK (F, I – 1); WRITE (F, Z); { писать ее на место (I – 1) – ой}

END; { - конец сдвига}

Truncate (F); Exit; { - усечение файла и выход}

END; { -оператора IF}

UNTIL EOF (F); { - конец поиска записи в файл F}

WRITELN (TFM, ‘ошибочно’)......;




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 734; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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