- •29. Файлы. Файлом называется область памяти на диске, имеющая свое имя. Физические файлы можно по-разному представить в программе. Язык Турбо Паскаль предлагает три вида представления файлов:
- •30. Типизированный файл - последовательность элементов одного типа. Описание файлового типа для работы с типизированным файлом имеет синтаксис:
- •31. Файлы. Организация связи между файловой переменной и внешним файлом. Прямой и последовательный доступ к элементам файла. Изменение имени файла производится процедурой:
- •34. В программе, написанной на стандарте языка Паскаль, могут быть следующие разделы:
- •35.Целые типы. Диапазон возможных значений целых типов зависит от их внутреннего представления, которое может занимать один, два или четыре байта
- •Вещественные типы
- •'Ж' 's' '.' '*' ' '-(пробел)
- •'Это текстовая строка' 'This is a string' '1234' - это тоже строка, не число '' - пустая строка
30. Типизированный файл - последовательность элементов одного типа. Описание файлового типа для работы с типизированным файлом имеет синтаксис:
file of < тип элементов>; |
Допустим, мы имеем дело с файлом, в котором записываются переменные типа Word, тогда переменная файлового типа может быть введена двояко – с явным объявлением файлового типа:
Type WordFile = file of word; Var MyFile : WordFile; |
или
Var MyFile : file of word; |
Пример. Приведем шаблон программы для записи данных в типизированный файл.
Program Writing; Var FileName : string; {строка, содержащая имя файла} FVar : file of byte; {переменная файлового типа} Index : byte; Begin write ('Введите имя файла ');{предложение ввести имя файла} readln (FileName);{ввод имени файла} assign (FVar, FileName);{связь имени файла и переменной} rewrite (FVar);{открытие файла для записи} for Index := 0 to 99 do {цикл для расчетов и вывода данных в файл} write (FVar,Index);{запись в файл FVar величины Index} close (FVar); {закрытие файла} End. |
Вспомним, что типизированный файл - это линейная последовательность элементов одного типа. При каждом обращении к файлу (чтении, записи) его текущий указатель перемещается к следующему элементу. Возникает вопрос: можно ли нарушить порядок доступа к элементам файла и, например, не считывая из файла первый и второй элемент, сразу обратиться к третьему? Оказывается, можно.
Для изменения теущего положения указателя используется процедура
Seek (МуFilе, n); |
где n - требуемое положение указателя.
Внимание! Нумерация элементов типизированного файла начинается с нуля.
Следовательно, для обращения к третьему элементу нужно записать: Seek (МуFilе, 2).
Seek (МуFilе, 0) - устанавливает указатель в начальную позицию (на первый элемент).
Seek (МуFilе, FileSize(МуFilе)) - устанавливает указатель после последнего элемента, то есть на признак конца файла.
Примечание. Функция FileSize(МуFilе) возвращает количество элементов типизированного файла МуFilе.
Текущую позицию указателя дает функция
FilePos (МуFilе); |
31. Файлы. Организация связи между файловой переменной и внешним файлом. Прямой и последовательный доступ к элементам файла. Изменение имени файла производится процедурой:
rename(МуFilе, FileName); |
+ см 29-32. 32. Текстовые файлы. Наряду с типизированными файлами Pascal имеет средства взаимодействия с файлами несколько иной структуры - так называемыми текстовыми файлами. Введение текстовых файлов несколько нарушает стройность языка, однако позволяет использовать Pascal при программировании широкого класса задач, имеющих нечисловой характер и связанных с обработкой текстовой информации. Текстовому файлу в Pascal-программе соответствует переменная, которая должна быть описана с указанием стандартного типа text:
Var TextFile : text; |
Пусть на диске создан текстовый файл text.txt. Для Turbo Pascal описание и связывание файловой переменной f с файлом text.txt, будет выглядеть так :
Var f: text; Begin assign(f, 'd:\tp7\bin\text.txt'); {Полный путь к файлу } reset(f);{Открыть на чтение] . . . End. |
Ввод-вывод для текстовых файлов подчиняется тем же правилам, что и для типизированных файлов; однако имеется несколько важных особенностей.
Во-первых, для одного текстового файла нельзя одновременно производить операции и ввода, и вывода. Это означает, что после открытия текстового файла процедурой reset возможно только чтение информации из файла, а после процедуры rewrite - только запись в файл.
Во-вторых, обмены с текстовыми файлами всегда являются строго последовательными, то есть после чтения из файла элемента с порядковым номером N следующая операция чтения даст элемент с номером N+1. Иными словами, прямой доступ к любому элементу текстового файла невозможен; для текстовых файлов не допускаются вызовы Seek, FilePos, FileSize. !
Покажем простую программу, выполняющую чтение некоторого текста. Эта программа выводит на экран последовательность кодов символов, составляющих файл text.txt.
Program TextFile1; Var f : text; {Читаемый текст} S : char; {Очередной прочитанный символ} Begin assign(f, 'text.txt'); {Связываем файл text.txt с переменной f} reset(f); {Открываем файл text.txt для чтения} while not Eof(f) do {Пока не достигнут конец файла, делай...} begin read(f, S); {Читаем из файла очередной символ в переменную S} writeln(S:2, ord(S):4); {Выводим символ и его код на экран} end; close(f); {Закрываем файл} readln End. |
Часто для обработки текстовых файлов используется специфичная для них функция Eoln, позволяющая определить, достигнут ли конец строки. Если достигнут - значение функции равно True, а если нет - False. Таким образом, для анализа конкретных символов строк файла можно применить вложенный цикл типа:
while not Eof(FileName) do {пока не достигнут конец файла FileName, делай} while not Eoln(FileName) do {пока не достигнут конец очередной строки файла FileName, делай} begin {группа операторов обработки символов очередной строки} end; |
33. Модуль (UNIT -модуль, единица) – автономно (отдельно) компилируемая программная единица, которая содержит компоненты раздела описаний (меток, констант, типов, переменных, процедур, функций), а также может содержать операторы инициализирующей части. Сам модуль не является выполняемой программой, а предназначен для использования другими программами и модулями.
Unit <имя_модуля>; interface <интерфейсная часть>; implementation < исполняемая часть >; begin <инициирующая часть>; end .
Здесь UNIT – зарезервированное слово (единица); начинает заголовок модуля;
<имя_модуля> - имя модуля (правильный идентификатор);
INTERFACE – зарезервированное слово (интерфейс); начинает интерфейсную часть модуля;
IMPLEMENTATION – зарезервированное слово (выполнение); начинает исполняемую часть модуля;
BEGIN – зарезервированное слово; начинает инициирующую часть модуля; причем конструкция begin <инициирующая часть> необязательна;
END – зарезервированное слово – признак конца модуля.
Таким образом, модуль Паскаля состоит из заголовка и трех составных частей, любая из которых может быть пустой.
uses<список модулей>
Здесь USES – зарезервированное слово (использует);
<список модулей> - список модулей, с которыми устанавливается связь; элементы списка – имена модулей через запятую.
Интерфейсная часть – начинается с ключевого словаInterface (интерфейс, сочленение, соединение) и содержит обращение к другим модулям и объявления (описания) глобальных объектов т. е. меток, констант, типов, переменных, и заголовков процедур и функций которые доступны основной программе и другим модулям (т. е. видимые из вне).
Раздел реализации – начинается с ключевого словаImplementation(выполнение) и содержит описание локальных для модуля объектов т. е. меток, констант, типов, переменных которые не доступны основной программе и другим модулям (т. е. не видимые из вне) и полное описание процедур и функций. При этом в заголовке подпрограмм список формальных параметров м.б. опущен, но если он приводится то должен точно соответствовать описанию в интерфейсной части.
Раздел инициализации – заключается в словесные скобки BEGIN END. и содержит операторы, которые будут выполнены до передачи управления основной программе. Это м.б. операторы инициализации данных (переменных) Например операторы присваивания, ввода а также процедуры связывания и открытия файлов. Раздел операторов м.б. пустымBEGIN END или отсутствовать простоEND. В конце модуля ставится точка.
