- •Вопрос 26. Сортировка обменом (так называемая "пузырьковая" сортировка).
- •Вопрос 27. Комбинированный тип данных. Запись. Описание записи. Доступ к полям записи
- •Вопрос 28. Оператор with.
- •Вопрос 29. Модуль crt
- •Вопрос 30. Модуль graph
- •Вопрос 31. Инициализация графики, подготовительные работы, управление цветом, закрытие режима
- •Вопрос 32. Процедуры и функции для работы с "графическими примитивами".
- •Вопрос 33. Процедуры для работы с текстом.
- •Вопрос 34. Типизированные файлы. Процедуры и функции для работы с типизированными файлами
- •Вопрос 35. Процедуры и функции для работы с файлами любого типа
- •Вопрос 36. Текстовые файлы, их описание и основные отличия от типизированных файлов.
- •Вопрос 37. Нетипизированные файлы.
- •Вопрос 38. Модули. Модульное программирование.
- •Вопрос 39. Указатели и динамическая память. Выделение и освобождение динамической памяти.
- •Вопрос 40. Основы объектно-ориентированного программирования.
- •Вопрос 41. Метод хорд
- •Вопрос 42. Метод касательных
- •Вопрос 43. Метод итераций
- •Вопрос 44. Методом средних прямоугольников
- •Вопрос 45. Методом трапеций
- •Вопрос 46. Методом Симпсона
- •Вопрос 47. MathCad. Нахождение корней уравнений.
- •Вопрос 48. MathCad. Нахождение определенных интегралов
- •Вопрос 49. MathCad. Построение графика функций
- •Вопрос 50. MathCad. Работа с матрицами
Вопрос 34. Типизированные файлы. Процедуры и функции для работы с типизированными файлами
Типизированный файл - последовательность элементов одного типа.
Описание файлового типа имеет синтаксис:file of < тип элементов>
Допустим, мы имеем дело с файлом, в котором записываются переменные типа Word, тогда переменная файлового типа может быть введена двояко: с явным объявлением файлового типа:Type
WordFile = file of word;
Var
MyFile : WordFile;
или без объявления файлового типа:Var
MyFile : file of word;
Приведем примеры переменных файлового типа с другими объявлениями.Type
Student = record
Name, SerName : string;
YearOld : byte;
Sessia : array [1..10] of byte;
end;
Var
VarFile1 : file of char;
VarFile2 : file of Student;
VarFile3 : file of string;
Файловые переменные имеют специфическое применение. Над ними нельзя выполнять никаких операций (присваивать значение, сравнивать и др.). Их можно использовать только для выполнения операций с файлами (чтения, записи, удаления файла и т.д.). кроме того, через файловую переменную можно получить информацию о конкретном файле (тип, параметры, имя файла и т.д.).
По сути любой физический файл, Вы можете представить как последовательность блоков памяти описанного типа. Все компоненты файла имеют общее имя, а каждый еще и имеет свой номер. Начальный элемент имеет нулевой номер.
С каждым файлом можно связать понятие текущий указатель. Это неявно описанная переменная, которая указывает на конкретный элемент файла. Действия с файлами производятся поэлементно, причем в них участвует тот элемент, на который "смотрит" текущий указатель, перемещающийся в результате выполнения действия на следующий элемент.
А самое основное, что Вы должны уметь делать над файлом это - записать информацию из программы в файл и считать нужную информацию в выделенную переменную для обработки программой.
Процедуры и функции для работы с типизированными файлами.
Вспомним, что типизированный файл - это последовательность элементов одного типа. А раз так, то при последовательном обращении к файлу текущий указатель переходит от элемента к элементу. Возникает вопрос: можно ли игнорировать последовательный доступ к файлу и сразу, например, обратиться к третьему элементу файла? Оказывается, можно.
Если есть необходимость нарушения последовательной записи или чтения из файла, текущий указатель, может быть изменен процедуройSeek (МуFilе, n);
где n - требуемое положение указателя.
Внимание! Нумерация элементов типизированного файла начинается с нуля.
Поэтому, чтобы обратиться к третьму элементу, нужно записать Seek (МуFilе, 2).
Seek (МуFilе, 0) - устанавливает указатель в начальной позиции (на первый элемент).
Seek (МуFilе, FileSize(МуFilе)) - устанавливает указатель после последнего элемента, то есть на признак конца файла.
Примечание. Функция FileSize(МуFilе) возвращает количество элементов типизированного файла МуFilе.
Текущую позицию указателя дает функция FilePos (МуFilе);
Рассмотрите пример.
Задача. Составить программу, которая переписывает существующий файл, заменяя все латинские буквы на заглавные.Рrogram Writing;
Var
FileName : string; {строка, содержащая имя файла}
FVar : file of char; {переменная файлового типа}
Index : integer;
Letter : char; {читаемый из файла символ}
Begin
write('Enter filename: '); {предложение ввести имя файла}
readln (FileName); {ввод имени файла}
assign (FVar,FileName); {связь имени файла и переменной}
{$I-} {отключен контроль ввода/вывода}
reset (FVar); {открытие файла для чтения и записи}
{$I+} {включен контроль ввода/вывода}
if IOResult <> 0 {выход, если файл не открыт}
then
begin
writeln ('Не открыт файл ', FileName);
Halt
end;
while not EOF (FVar) do {цикл до конца файла}
begin
read (FVar, Letter); {чтение символа из файла}
Letter:=Upcase(Letter); (преобразование букв)
Seek(FVar,FilePos(FVar)-1); {перемещение указателя назад на 1 позицию}
write(FVar,Letter); {запись преобразованной буквы}
end; {конец цикла}
close(FVar) {закрыть файл}
End.
Функция IOResult
Как Вы уже заметили в предыдущей программе была использована функция IOResult. Рассмотрим, какую роль выполняет эта функция.
Функция IOResult предназначена для поиска ошибок, возникающих при работе с файлами. Эта функция возвращает результат последней операции ввода/вывода, если автоматический контроль за ошибками, возникающими при выполнении операций ввода/вывода, отключен с помощью директивы компилятора {$I-}. При безошибочном выполнении операций ввода/вывода функция IOResult всегда возвращает результат равный нулю. Поэтому, как правило, ее используют в операции сравнения с нулем. При использовании функции IOResult нужно помнить о том, что она возвращает величину, которую можно интерпретировать как флаг ошибки лишь в том случае, когда эта функция вызывается следом за операцией ввода/вывода. А если Вы хотите провести анализ ошибки позже, Вам придется сохранить возвращаемое значение в некоторой промежуточной переменной.
Просмотрите еще раз фрагмент программы, в которой посредством процедуры reset производится попытка открытия файла. Если эта попытка не увенчалась успехом, то на экран будет выведено сообщение об ошибке.{$I-} {отключение контроля ввода/вывода}
reset (F,'C:\TP7\BIN\Text.txt'); {открытие файла для чтения}
if IOResult <> 0
then
writeln ('Ошибка при открытии файла');
{$I+} {включение контроля ввода/вывода}
В своих программах Вы должны применять функцию IOResult.