Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

В соответствии со способом доступа к файлам они делятся на два вида.





1. Файл с последовательным доступом;

2. Файл с прямым доступом.

Файлы последовательного доступа наиболее просты как в орга­низации, так и в работе с ними. Записи обрабатываются после­довательно одна за другой.

Информация в таких файлах хранит­ся в виде текста в кодах ASCII. Такие файлы легко просмотреть на экране, используя любой простейший редактор, или в самом Бейсике.

Простота — хорошо, а последовательность в данном случае — плохо. Если информация об интересующем объекте упорядочена в файле по алфавиту, то придется пе­ребирать практически весь файл, чтобы добраться до нужной записи. Отсюда, при большом информационном объеме файла обработка его замедляется.

Файлы прямого доступа хранят информацию в специальном фор­мате, в котором каждая запись занимает строго фиксированную одинаковую с остальными длину. Такие файлы за­нимают на диске больше места, чем файлы последовательного доступа, но скорость работы с ними значительно выше.

Операции над файлами

Независимо от того, какие действия происходят с инфор­мацией, хранящейся в файле, производятся следующие обязательные операции:

1. открытие файла;

2. чтение и запись обрабатываемых данных;

3. закрытие файла.

Открытие файла

Для открытия файла предназначен оператор open, имеющий следующий формат:

OPEN имя_ файла FOR режим AS # номер файла

Режим определяет доступ к данным файла. Возможны следующие режимы:

· INPUT. Это режим чтения информации из файла. В случае если указывается несуществующее имя файла, возникнет со­общение об ошибке "Файл не найден".

· OUTPUT. Режим записи информации в файл. Обычно при этом создается новый файл. Если же открывается для записи уже существующий файл, то ранее хранимая в нем информация будет утеряна.

· APPEND. Режим добавления информации в файл. Новая инфор­мация будет размещена в конце файла, за последней записью.

Номер файла предваряется знаком #, после ко­торого следует целое
число от 1 до 255.

Запись в файл



Рассмотрим пример записи в файл.

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. Составить программу создания файла данных МАГАЗИН
(не менее 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





Рекомендуемые страницы:

Воспользуйтесь поиском по сайту:



©2015- 2021 megalektsii.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.