Для закрытия файлов применяется оператор
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. Составить программу создания файла данных МАГАЗИН
(не менее 10 записей), каждая запись которого содержит следующие поля:
· Название товара
· Страна изготовитель
· Дата изготовления
· Срок годности (истек или нет, 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