Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль (ст 33).doc
Скачиваний:
3
Добавлен:
13.11.2019
Размер:
821.76 Кб
Скачать

5. Доступ к компонентам файла.

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

Все действия с файлами производятся покомпонентно, причем в этих действиях участвует тот компонент файла, на который указывает текущий указатель. В результате совершения операций чтения/записи указатель может перемещаться по компонентам файла.

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

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

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

6. Основные процедуры работы с файлами (на примере текстового файла).

Пример 1(написать на доске с комментариями и все процедуры объяснить на этом примере).

Program Primer;

Var F1, F2 : Text;

Name : String[30];

Begin

Assign(F1,’TTT.txt’); {установление соответствия между F1 и файлом в текущей папке}

{ $I-}

Reset(F1);

{$I+} {открытие файла F1 на чтение}

If Ioresult <> 0

Then Writeln(‘Файл не найден’)

Else …(работа с файлом F1)

Name:=’C:\TP\WORK\Res.dat’; {задание абсолютного имени файла}

Assign(F2, Name); {установление соответствия между F2 и файлом Res.dat}

{ $I-}

Rewrite(F);

{$I+} {открытие файла F1 на запись}

If Ioresult <> 0

Then Writeln(‘на диске нет места’)

Else … (работа с файлом F2)

Close(F1); {закрытие файла F1}

Close(F2); {закрытие файла F1}

Readln;

End.

а) Процедура Assign.

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

Назначение:

установление соответствия между файловой переменной и файлом на диске.

Синтаксис:

Assign ( F, Name ), где F – переменная любого файлового типа, Name – строка, содержащая полное имя файла в соответствии с требованиями операционной системы к именам файлов.

Описание работы:

процедура Assign устанавливает связь внешнего файла Name с файловой переменной F. Все последующие операции с файловой переменной F будут относиться к внешнему файлу с именем Name. Связь между файловой переменной F и файлом на диске Name существует до тех пор, пока с помощью процедуры Assign не будет установлено соответствие между файловой переменной F и другим внешним файлом.

Примечание:

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

  • для избежания ошибок лучше указывать абсолютное имя файла, начиная с имени диска.

б) Процедура Reset.

Чтению файла с диска должен предшествовать вызов процедуры открытия файла для чтения.

Назначение:

открытие существующего файла для чтения.

Синтаксис:

Reset (F), где F – файловая переменная.

Описание работы:

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

  • после открытия файла становится доступным только его начальный компонент;

  • если файл уже открыт, процедура Reset вначале закрывает его, а потом снова открывает;

  • если с помощью Reset, открывают несуществующий файл, то возникает ошибка.

Примечание:

  • перед вызовом процедуры Reset должно быть установлено соответствие между файловой переменной F и файлом на диске;

  • для предотвращения работы с несуществующим файлом используется функция статуса последней выполненной команды ввода/вывода – Ioresult (значение этой функции = 0, если открытие файла для чтения выполнено успешно, т. е. файл на диске существует и соответствие между ним и файловой переменной установлено правильно; значения этой функции  0 при попытке открыть для чтения несуществующий файл).

В примере 1 для правильной работы функции Ioresult директива {$I-} отключает контроль ошибок ввод/вывода, а директива {$I+} включает контроль ошибок ввода/вывода.

в) Процедура Rewrite.

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

Назначение:

открытие файла для записи.

Синтаксис:

Rewrite(F), где F – файловая переменная.

Описание работы:

  • процедура Rewrite создает внешний файл на диске;

  • если файл с таким именем уже существует, он стирается, и вместо него создается пустой файл;

  • если файл с тем же именем уже открыт, он закрывается, стирается и создается заново;

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

Примечание:

  • перед вызовом процедуры Rewrite имя внешнего файла должно быть задано предварительно и при помощи процедуры Assign должно быть установлено соответствие между файловой переменной F и именем файла;

  • для обнаружения ошибки, связанной с отсутствием места на диске, следует использовать функцию Ioresult (значение этой функции = 0, если файл успешно открыт для записи, и  0, если файл открыть не удалось).

В примере 1 для правильной работы функции Ioresult директива {$I-} отключает контроль ошибок ввод/вывода, а директива {$I+} включает контроль ошибок ввода/вывода.

г) Процедура Close.

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

Назначение:

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

Синтаксис:

Close(F), где F – файловая переменная.

Описание работы:

процедура Close запрещает доступ к предварительно открытому файлу, т. е. делает его недоступным для чтения/записи.

Примечание:

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