
Лабораторная работа 19
Основные приемы работы с файлами
Цель работы - ознакомление с правилами выполнения действий над файлами данных.
Необходимые исходные сведения Обмен данными всегда подразумевает наличие источника информации, канала передачи и ее приемника. В случае обмена данными между программой и внешними устройствами одним концом канала обмена данными всегда является оперативная память ПЭВМ. Другой конец этого канала в системах Turbo Basic и Turbo Pascal определен как файл. Файлом называется совокупность данных, расположенных на внешнем устройстве под определенным именем. Файл может быть источником информации - тогда осуществляется ввод (чтение) данных из файла или приемником - в этом случае производится вывод (запись) данных в файл. В компьютерной технике функции файлов выполняют различные устройства, которые трактуются как логические устройства с файловой структурой организации данных: внешние запоминающие устройства (магнитные ленты и диски, оптические диски), дисплеи, клавиатуры, принтеры, графопостроители, коммуникационные порты и т.п. Некоторые из них обеспечивают только односторонний обмен информацией, например, на принтер можно только выводить информацию, с клавиатуры - только вводить. На одних физических устройствах можно расположить несколько разных файлов, например, на магнитной ленте, на диске, другие рассматриваются как однофайловые, например, принтер, дисплей, клавиатура. Файлы обеспечивают:
возможность формирования и сохранения значений для последующего использования другими программами;
взаимодействие программ с внешними устройствами ввода-вывода: дисплеем, принтером и т.п.
Ф
айл
представляется как последовательная
потенциально бесконечная цепочка
записей (компонентов), пронумерованных
от 0 и заканчивающаяся специальным
кодом, называемым маркером конца
файла (м.к.ф.). Схематично это выглядит
так:
запись 0 запись 1 … |
запись N |
м.к.ф. |
У
казатель
файла
При этом под записью подразумеваются порции данных в процедурах обмена. В любой момент времени доступна только одна запись, на которую ссылается указатель файла.
По технологии доступа к содержимому файла различают файлы с последовательной и прямой (произвольной) организацией записей, соответственно, файлы последовательного и прямого доступа.
В файлах последовательного доступа каждая запись в общем случае может иметь индивидуальную длину, вследствие чего для выборки нужной записи необходимо прочитать все предыдущие. В файлах прямого доступа все записи, наоборот, имеют одинаковую длину и индивидуальные порядковые номера. Благодаря этому в них найти требуемую запись быстрее и проще, что определяет их широкое распространение в ряде приложений, например, в системах управления базами данных (СУБД).
Система Turbo Basic. К файлам, расположенным на многофайловых устройствах, обращение осуществляется по именам, задаваемым строковыми константами или строковыми переменными. Эти имена могут содержать маршруты доступа к файлам, оформленные по правилам, задаваемым операционной системой. Для обращения к однофайловым устройствам, используются их логические имена (табл. 6).
Таблица 6
Имя |
Устройство |
Способ использования |
LPT1: |
Устройство, подключенное к параллельному порту №1 (обычно печатающее устройство) |
Только для вывода |
СОМ1: |
Устройство, подключенное к последовательному порту №1 (обычно манипулятор “мышь”) |
Для вывода и вывода |
COM2: |
Устройство, подключенное к последовательному порту №2 (обычно манипулятор “мышь”) |
Для вывода и вывода |
KYBD: |
Клавиатура |
Только для ввода |
SCRN: |
Дисплей |
Только для вывода |
Для работы с файлами в системе Turbo Basic предназначены следующие основные операторы и функции: OPEN, CLOSE, PRINT, INPUT, EOF.
Оператор OPEN подготавливает файл к операциям ввода или вывода. Для файлов последовательного доступа он имеет следующий синтаксис:
OPEN <файлспец> [FOR <режим>] AS # <файлномер>
Здесь <файлспец> - спецификация файла (строковое выражение, заключаемое в кавычки, или переменная строкового типа), указывающая маршрут доступа к файлу; <режим> может иметь следующие значения: output - открытие файла последовательного доступа для вывода в него данных. Если файл с таким именем уже существует, его прежнее содержимое уничтожается. В случае отсутствия такого файла, он создается; input - открытие файла последовательного доступа для ввода из него данных. Файл обязательно должен существовать, в противном случае возникнет ошибка периода выполнения программы; APPEND - открытие файла последовательного доступа для добавления к нему записей; Если файл не существует, то создается новый файл. Если файл уже существует, данные добавляются в конец этого файла. <Файлномер> - любое целое число от 1 до некоторого максимального значения, задаваемого в системе программирования Turbo Basic.
Пример:
OPEN "C:\Tb\DATA.DAT" FOR OUTPUT AS #1
Дисковый файл с именем DATA.DAT открыт для вывода в него данных.
Основная задача оператора OPEN состоит в привязке номера <файлномер> к файлу или внешнему устройству и в подготовке устройства для вывода и/или ввода компонентов. Этот номер, а не имя файла, далее используется в последующих операторах, имеющих ссылку на файл.
После открытия файла можно из него считывать или в него записывать данные с помощью операторов INPUT, PRINT, PRINT USING, WRITE.
Оператор INPUT предназначен для ввода значений из файла. Его синтаксис:
INPUT # <файлномер>, <список переменных>
где <список переменных> — имена переменных, типы которых должны строго соответствовать типу вводимых данных.
Достижение маркера конца файла при чтении удобно контролировать с помощью функции EOF (<файлномер>), принимающей значение TRUE, если указатель файла достиг м.к.ф., или FALSE в противном случае.
Передача очередной порции данных в файл производится с помощью одного из следующих операторов:
PRINT #<файлномер>, <список выражений»
PRINT #<файлномер> USING<формат>, <список выражений» WRITE #<файлномер>, <список выражений»
Запись, которая формируется в процессе выполнения указанных операторов, представляет собой строку символов, содержащую значения выводимых выражений. Оператор write # формирует выводную запись по тем же правилам, что и оператор print #. Но он не формирует лишних символов- разделителей значений.
По окончании использования файла его необходимо закрыть, что обеспечивается с помощью оператора CLOSE. Он имеет следующий синтаксис:
CLOSE [#<файлномер1>, #<файлномер2>, ...]
Примеры:
CLOSE #1 - закрывает файл с номером 1;
CLOSE #1, #2, #3 - закрывает файлы с номерами 1,2,3;
CLOSE - закрывает все ранее открытые файлы.
Пример программы копирования компонентов из файла OLD.DAT в файл NEW.DAT.
OPEN "C:\TB\OLD.DAT" FOR INPUT AS #1'Файл открыт 'для чтения под номером 1
OPEN "C:\TB\NEW.DAT" FOR OUTPUT AS #2'Файл открыт. 'для записи под номером 2
WHILE NOT EOF(1)'Пока не достигнут м.к.ф. номер 1
INPUT #1, Temp$'Чтение текущей записи из файла 1 ' в символьную переменную Temp
PRINT #2, Temp$ 'Запись значения переменной ' Теmр$ в файл 2 WEND
CLOSE #1, #2 'Закрываем оба файла
END
Лабораторная работа 20