В соответствии со способом доступа к файлам они делятся на два вида.
1. Файл с последовательным доступом; 2. Файл с прямым доступом. Файлы последовательного доступа наиболее просты как в организации, так и в работе с ними. Записи обрабатываются последовательно одна за другой. Информация в таких файлах хранится в виде текста в кодах ASCII. Такие файлы легко просмотреть на экране, используя любой простейший редактор, или в самом Бейсике. Простота — хорошо, а последовательность в данном случае — плохо. Если информация об интересующем объекте упорядочена в файле по алфавиту, то придется перебирать практически весь файл, чтобы добраться до нужной записи. Отсюда, при большом информационном объеме файла обработка его замедляется. Файлы прямого доступа хранят информацию в специальном формате, в котором каждая запись занимает строго фиксированную одинаковую с остальными длину. Такие файлы занимают на диске больше места, чем файлы последовательного доступа, но скорость работы с ними значительно выше. Операции над файлами Независимо от того, какие действия происходят с информацией, хранящейся в файле, производятся следующие обязательные операции: 1. открытие файла; 2. чтение и запись обрабатываемых данных; 3. закрытие файла. Открытие файла Для открытия файла предназначен оператор open, имеющий следующий формат: OPEN имя_ файла FOR режим AS # номер файла Режим определяет доступ к данным файла. Возможны следующие режимы: · INPUT. Это режим чтения информации из файла. В случае если указывается несуществующее имя файла, возникнет сообщение об ошибке "Файл не найден". · OUTPUT. Режим записи информации в файл. Обычно при этом создается новый файл. Если же открывается для записи уже существующий файл, то ранее хранимая в нем информация будет утеряна.
· APPEND. Режим добавления информации в файл. Новая информация будет размещена в конце файла, за последней записью. Номер файла предваряется знаком #, после которого следует целое Запись в файл Рассмотрим пример записи в файл. OPEN "capitals.dat" FOR OUTPUT AS #1 FOR X=l TO 5 INPUT "ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ"; F$ WRITE #1, F$ NEXT X CLOSE #1:END В результате работы программы мы получим (полужирным шрифтом выделены введенные с клавиатуры данные): ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? МОСКВА ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? САНКТ-ПЕТЕРБУРГ ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? ТАЛЛИН ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? РИГА ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? ВИЛЬНЮС При этом на диске в текущем каталоге образуется файл, содержащий пять строковых значений. Имя файла будет capitals.dat. Удобнее всего при работе с файлами сделать текущим каталог, где эти файлы содержатся или будут содержаться, а при обращении к ним указывать только их имена. В качестве параметра имя_файла можно использовать переменную текстового типа. Это позволяет вводить имя файла с клавиатуры и является универсальным способом работы с файлами. На пример: INPUT «Введите имя файла "; FileName$ OPEN FileName$ FOR OUTPUT AS #1 После ключевого слова as указывается номер файла. Больше открыть файл с таким номером в данной программе нельзя. Для каждого последующего файла должен быть указан свой собственный неповторимый номер в пределах от 1 до 255. Сколько всего может быть открыто файлов, зависит от файла конфигурации вашего компьютера config.sys, в котором число одновременно открытых файлов определяется командой files. Представленный далее пример демонстрирует программу создания небольшой базы данных автомобилей, предназначенных для продажи. О каждом автомобиле заносится информация о его марке, номере, цвете, годе производства и продажной цене.
REM Программа создания файла данных об автомобилях CLS INPUT «Введите имя файла"; F$ Открытие файла OPEN F$ FOR OUTPUT AS #1 DO INPUT "Марка автомобиля? (Для окончания работы введите QWE.); М$ IF UCASE$(M$)="QWE" OR OCASE$(М$)="ЙЦУ" THEN 1 INPUT "Номер автомобиля?"; N$ INPUT "Цвет автомобиля?"; С$ INPUT "Год производства автомобиля?"; G$ INPUT "Продажная цена автомобиля?"; S$ WRITE #1, М$, N$, C$, G$, S$ LOOP ' Закрытие файла 1: CLOSE #1 PRINT "Файл сформирован" Программа действует следующим образом. Запрашивает имя файла, открывает его для записи, запрашивает информацию, записывает ее в файл до введения пользователем сочетания букв "QWE" или "ЙЦУ" (эти символы расположены на одних клавишах, вследствие чего пользователь может случайно набрать как одну комбинацию, так и другую). Запись в файл может производиться операторами: PRINT # номер_файла, выражение ИЛИ WRITE # номер_файла, выражение Результат работы этих операторов одинаков. Для закрытия файлов применяется оператор CLOSE # номер_файла Если номер файла в операторе CLOSE указан, то будет закрыт именно этот, вполне определенный файл. Если же номер не указан, будут закрыты все открытые файлы. Чтение из файла Чтение из файла производится аналогично записи, но — вместо режима output используется режим input. Прочитаем занесенные нами данные из файла avto.dat. REM Программа чтения файла данных об автомобилях CLS INPUT " Введите имя файла"; F$ ' Открытие файла OPEN F$ FOR INPUT AS #1 PRINT "База данных автомобилей на 17 декабря 2000 года" I=1 DO PRINT "Вывести данные об"; I; "автомобиле?" INPUT "Для окончания введите QWE, для продолжения -<Enter>"; M$ IF UCASE$(M$)="QWE" OR UCASE$(М$)="ЙЦУ" THEN 1 INPUT #1, M$, N$, C$, G$, S$ PRINT M$, N$, C$, G$, S$ I=I+1 LOOP UNTIL EOF(1) ' Закрытие файла 1: close #1 PRINT "Файл закрыт" Оператор loop until eof(1). Означает, что считывание ведется до тех пор, пока не будет обнаружен символ конца файла (end of file), а в скобках указан номер открытого файла. Изменения данных в файле Для изменения какой-либо записи, удаления старых или добавления новых данных в последовательном файле необходимо открыть два файла: подлежащий изменению и новый, в котором создается обновленная версия исходного файла. Старый файл в дальнейшем можно удалить.
Приведенная ниже программа в файле avto.dat изменяет "МОСКВИЧ" на "МЕРСЕДЕС". В первых строках открываются исходный файл avto.dat и новый файл avto2.dat, сначала пустой. Очередная запись считывается из файла avto.dat и, при условии, что это не "МОСКВИЧ", переписывается без изменения в новый файл. Если же встречается значение "МОСКВИЧ", то оно заменяется на "МЕРСЕДЕС" путем присваивания нового значения переменной м$. В следующей. Строке данное значение попадает в выходной файл. После того как весь входной файл просмотрен, оба файла закрываются. OPEN "avto.dat" FOR INPUT AS #1 OPEN "avto2.dat" FOR OUTPUT AS #2 FOR i=1 TO 5 INPUT #1, M$, N$, C$, G$, S$ IF UCASE$(M$)-"МОСКВИЧ" THEN М$-"МЕРСЕДЕС" PRINT 12, M$, N$, C$, G$, S$ NEXT i CLOSE 1, 2 KILL "avto.dat" NAME "avto2.dat" AS "avto.dat" END Заключительный этап — удаление исходного и переименование нового файла, которому придается прежнее имя, что обеспечивает и в дальнейшем наличие на дискете файла avto.dat. Добавление данных в файл Указание for append в операторе open подготавливает файл для вывода данных и смещает указатель на конец файла. Последующие операторы приписывают новую информацию к уже имеющейся. В предложенной далее программе в файл данных об автомобилях добавляются сведения о двух новых поступлениях. REM Программа создания файла данных об автомобилях CLS INPUT " Введите имя файла"; F$ REM Открытие файла OPEN F$ FOR APPEND AS 1 DO INPUT "Марка автомобиля? (Для окончания работы введите QWE.); М$ IF UCASE$(M$)="QWE" OR UCASE$(М$)="ЙЦУ" THEN 1 INPUT "Номер автомобиля?"; N$ INPUT "Цвет автомобиля?"; С$ INPUT "Год производства автомобиля?"; G$ INPUT "Продажная цена автомобиля?"; S$ WRITE #1, М$, N$, C$, G$, S$ LOOP REM Закрытие файла 1 CLOSE #1 PRINT "Файл дополнен"' Порядок выполнения работы 1. Получить у преподавателя вариант задания. 2. Написать программу на Qbasic. 3. Отладить программу. 4. Пполучить результат. 5. Проанализировать полученный результат. Содержание отчета 1. Содержательная постановка задачи. 2. Исходные данные. 3. Краткие теоретические данные.
4. Блок схема программы. 5. Листинг программы. 6. Распечатка полученных результатов. Задание 1. Составить программу создания файла данных МАГАЗИН · Название товара · Страна изготовитель · Дата изготовления · Срок годности (истек или нет, yes/no) · Стоимость товара 2. Составить программу вывода на экран в табличной форме всех записей файла, и записей наименований товаров, срок годности которых не истек, найти самый дешевый товар, вывести его название и стоимость. Пример решения задачи · Зададим имя файла данных - magasin.txt · Опишем переменные: Название товара - name$ Страна изготовитель - ctrana$ Дата изготовления - den Срок годности (истек или нет, yes/no) - god$ Стоимость товара - manu ПРОГРАММА НА ЯЗЫКЕ QBasic CLS OPEN "magasin.txt" FOR OUTPUT AS #1 CLS FOR i = 1 TO 10 INPUT " Название "; name$ INPUT " Страна изготовитель "; ctrana$ INPUT " год изготовления "; den INPUT " годность yes/no: "; god$ INPUT " стоимость "; manu WRITE #1, name$, ctrana$, den, god$, manu NEXT i CLOSE #1 PRINT "МАГАЗИН" PRINT "------------------------------------------------------------------------------------" PRINT "Название Страна изготовитель Дата Годность yes/no Стоимость" OPEN "magasin.txt" FOR INPUT AS #1 DO WHILE NOT EOF(1) INPUT #1, name$, ctrana$, den, god$, manu PRINT name$, " "; ctrana$, den; " ", god$; " ", manu LOOP CLOSE #1 PRINT "------------------------------------------------------------------------------------" min = 10 ^ 10 OPEN "magasin.txt" FOR INPUT AS #1 PRINT "Товары со сроком годности yes" DO WHILE NOT EOF(1) INPUT #1, name$, ctrana$, den, god$, manu IF manu <= min THEN nas1$ = name$: ctrana1$ = ctrana$: god1$ = god$: min = manu END IF IF god$ = "yes" THEN PRINT TAB(10); name$; PRINT TAB(20); ctrana$; " "; den; " "; god$; " "; manu END IF LOOP CLOSE #1 PRINT "------------------------------------------------------------------------------------" PRINT "Дешевый товар и его стоимость " PRINT nas1$, min; "pyb", ctrana1$ END
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|