Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Открытие и позиционирование файла на начало






а) RESET(f) - для существующего файла

б) REWRITE(f) - для вновь создаваемого файла.

Для текстовых файлов

- только для чтения

RESET (f)

- для обновления

REWRITE (f)

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

APPEND(f),

которая не очищает файл, а только устанавливает текущий указатель

файла в его конец.

 

Типизированные и нетипизированные файлы допускают как чтение, так и запись, независимо от того, были они открыты с помощью процедуры Reset или с помощью Rewrite.

Для нетипизированных файлов в описание процедуры открытия добавляется параметр < длина записи> типа Word, который устанавливает длину записи для функций обмена с файлом. В этом

случае процедуры открытия имеют вид:

RESET (f, < длина записи>)

REWRITE (f, < длина записи>)

 

 

Запись

 

Для записи информации в файл из программы служит процедура

Write, синтаксис которой:

WRITE (f, < список вывода>),

где f - имя файловой переменной,

< список вывода> - список имен переменных.

Кроме процедуры Write для текстовых файлов имеется ее модификация - процедура Writeln:

WRITELN (f [, < список вывода>),

где f - имя файловой переменной типа text.

Эта процедура осуществляет те же действия, что и Write, но после операции записи производит переход к следующей строке текстового файла. Процедура в виде Writeln (f) выводит в файл f

пару символов: " возврат каретки" и " перевод строки".

Для организации вывода в нетипизированные файлы в языке Турбо-Паскаль предназначена процедура BlockWrite. В качестве рабочего буфера используется переменная, которую необходимо

описать в программе и размер которой не должен быть меньше размера записи, установленного при открытии файла. Заголовок процедуры имеет вид:

BLOCKWRITE (f, < буфер>, k [, r]),

где f - имя нетипизированного файла, в который производится запись;

< буфер> - переменная-буфер (этот параметр передается как нетипизированный);

k - число записей, записываемых за один вызов, (имеет тип Word);

r - параметр типа Word, в который помещается число фактически выведенных записей.

Содержимое переменной-буфера целиком помещается в файл f,

начиная с текущей записи.

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

ошибка ввода-вывода; если параметр r задан, то ошибка не будет зафиксирована, а после выполнения процедры его значение не будет совпадать со значением параметра k.

Чтение

Для чтения данных из файла в программу служит процедура Re-

ad, синтаксис которой:

READ (f, < список ввода>),

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

Процедура Read читает последовательность символов из файла

f, интерпретирует их как условные записи значений данных, а затем

присваивает данные с этими значениями переменным списка ввода.

Для текстовых файлов имеется модификация процедуры Read - процедура Readln:

READLN (f [, < список ввода> ]),

где f - имя файловой переменной типа text.

Эта процедура осуществляет те же действия, что и Read, но после операции чтения производит переход к следующей строке текстового файла.

Процедура в виде Readln (f) вводит и игнорирует последовательности символов до " возврат каретки" и " перевод строки" включительно.

Для организации чтения данных из нетипизированных файловь предназначена процедура BlockRead. Заголовок данной процедуры имеет вид:

BLOCKREAD (f, < буфер>, k [, r]),

где то же, что и для BlockWrite

f - имя нетипизированного файла, из которого производится чтение;

< буфер> - переменая-буфер (этот параметр передается как

нетипизированный);

k - число записей, читаемых за один вызов процедуры (имеет

тип Word);

r - параметр типа Word, в который помещается число

фактически считанных записей.

Если при чтении из файла процедурой BlockRead размер буфера окажется меньше произведения < длина записи> *k, где k - число читаемых записей, то произойдет следующее: если параметр r в

BlockRead не задан, то возникнет ошибка ввода-вывода; если параметр r задан, то ошибка не будет зафиксирована, а после выполнения процедуры значение параметра r не будет совпадать со

значением параметра k.

 

6.Закрытие файла

При окончании работы всей программы происходит автоматичес-

кое закрытие всех файлов, открытых в программе.

Для явного завершения действий с файлом используется проце-

дура

CLOSE (f),

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

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

открытии файла f.

 

7. Дополнительные операции

 

а) Позиционирование, усечение, анализ состояния для типизированных и нетипизированных файлов

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

В языке имеется группа операций, использование которых позволяет изменять последовательный порядок операций чтения и записи. Эта группа содержит следующие две процедуры:

SEEK (f, < номер записи>), (поиск записи)

TRUNCATE (f) (отсечеение последующих записей)

и три дополнительные функции

FILESIZE (f),

FILEPOS (f),

EOF (f),

где f - имя файловой переменной типа, отличного от text;

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

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

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

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

Процедуры Seek, FileSize, FilePos и Truncate не могут быть применимы к текстовым файлам ввиду произвольных длин строк таких файлов.

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

Некоторым подобием процедуры Seek для текстовых файлов являются функции:

SEKEOLN (f),

SEEKEOF (f).

Функция SeekEoln производит поиск конца текущей строки и возвращает соответствующее логическое значение.

Функция SeekEoF осуществляет поиск конца файла. Если в процессе поиска найден конец файла, то функция возвращает true, в противном случае - false.

в) Удаление предварительно закрытого файла

ERASE(f)

г) Переименование предварительно закрытого файла f в файл s

RENAME(f, s)

где

VAR

f: FILE_TYP, s: STRING;

 

д) Обработка ошибок

Ошибочные ситуации при работе с файлами позволяет отслеживать специальная функция, формат вызова которой:

IORESULT.

Данная функция возвращает целое число, соответствующее коду

последней ошибки в операции. Если же операция прошла без сбоев,

то функция IOresult вернет значение 0. Опросить функцию IOresult

можно только один раз после каждой операции, т.к. она обнуляет

свое значение при каждом вызове.

Коды ошибок, возвращаемые функцией IOresult, приведены в

методичке.

 

Работа с файлами данных, как правило, сводится к выполнению следующих действий:

1. Открытие/закрытие файла

2. Манипулирование данными

- добавление дпнных;

- изменение данных;

- удаление данных;

- просмотр данных.

3. Сортировка днных;

4. Поиск данных

5. Бизнес-обработка данных и вывод информации.

 

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

Необходимо реализовать операции добавления записей в файл, удаление, изменение и просмотр содержимого. Работу организовать в виде клавишного меню.

Задача ясна. Приступаем к проектированию.

1. Архитектура

Функции стандартного интерактивного приложения разделяются на четыре группы, имеющие различную природу:

- функции ввода и отображения данных;

- прикладные функции, определяющие основные алгоритмы решения задач программы и характерные для данной предметной области;

- фундаментальные функции хранения и управления информационными ресурсами;

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

В соответствии с этим в любом приложении выделяются следующие логические компоненты:

- компонент представления, реализующий функции первой группы;

- прикладной компонент, поддерживающий функции второй группы;

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

 
 


Компонент представления

Прикладной компонент

 

       
   
 
 

 

 


Компонент доступа к ресурсам

 
 


 

 
 


Данные

 

 

Локальный компьютер

 

 

2. Сколько файлов с данными - 1.

Исходя из постановки задачи каждая запись должна состоять из четырех полей.

3. Какой файл? Типизированный. Почему?

1) различные типы полей;

2) типизированные файлы допускают как чтение, так и запись независимо от процедуры открытия.

4. Какие поля: код (Integer) (ключевое поле или просто ключ), название (String(20), количество жителей (longint), количество автомобилей (longint).

Назначение Имя Тип Размер, байт
Код города (первичный ключ) Key Integer  
Название Name String  
Число жителей Ein LongInt  
Число автомобилей Kfz LongInt  

Дополнительная задача: сортировать файл по коду города.

Выясняем режимы работы с файлом. Видимо должно быть два режима работы с файлом:

1. С новым файлом

- при запуске программы первый раз (нужно создать файл);

- при необходимости удаления всех старых данных с целью замены новыми;

2. С существующим файлом при просмотре, удалении и изменении имеющихся записей (нужно файл открывать).

 

Алгоритм.

Какие процедуры:

(1) Главная программа.

Как будем реализовывать?

Если нет специальных требований, то это можно сделать различными способами.

Мы реализуем в виде спискового меню, т.е. главная программа отображает меню из пунктов:






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.