Для закрытия файлов применяется оператор

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 "Дешевый товар и его стоимость "

PRINT nas1$, min; "pyb", ctrana1$

END