Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
28
Добавлен:
15.02.2016
Размер:
4.77 Mб
Скачать

К лабораторной работе № 5

Цель работы: приобретение практических навыков в разработке и отладке программ, работающих с файлами последовательного доступа.

Файлы последовательного доступа наиболее просты как в организации, так и в работе. Записи обрабатываются последовательно одна за другой. Информация в таких файлах хранится в виде текста в кодах ASCII. Подобные файлы легко просмотреть на экране, используя любой простейший редактор, или в самом Бейсике. Однако при большом информационном объеме файла обработка его заметно замедляется. В данной работе необходимо создать программу, работающую с файлами последовательного доступа, содержащими 5-буквенные слова.

Структура создаваемой программы: главный модуль программы, осуществляющий: а) выбор варианта работы с файлами и обращение по результатам выбора к соответствующей подпрограмме, б) побуквенный ввод слов в оперативную память, с последующим использованием их для создания файла или добавления в файл слов, в) формирующий условия завершения работы с программой; а также 3 подпрограммы: создания файла, добавления слов в файл и считывания слов из файла.

В главном модуле посредством операторов PRINT реализуется выводимое на экран своеобразное меню, обеспечивающее выбор варианта работы с файлами, осуществляемый оператором INPUT. Также операторами INPUT реализуется ввод имени файла, задается число вводимых слов, а также организуется блок побуквенного ввода слов в оперативную память, причем для последнего INPUT со строковой переменной помещается в двойной цикл. Поскольку программа работает с 5-буквенными словами, то один из циклов (для ввода букв слова) будет от 1 до 5, тогда как верхний предел второго цикла определяется числом вводимых слов.

Управляющим оператором SELECT CASE … END SELECT обрабатываются результаты выбора, обеспечивая обращение к выбранной подпрограмме с помощью оператора GOSUB, причем каждому GOSUB должен соответствовать оператор RETURN в подпрограмме. В противном случае Бейсик выдаст сообщение об ошибке "RETURN без GOSUB".

Подпрограммы обычно располагаются в конце программы, причем перед первой из них необходимо поставить оператор GOTO или IF…THEN, чтобы исключить обращение к подпрограмме без оператора GOSUB.

Пусть обращение к подпрограмме создания файла обеспечивается оператором GOSUB 50. Рассмотрим эту подпрограмму:

50 OPEN p2$ FOR OUTPUT AS #2

60 FOR j =1 TO N1

70 WRITE #2, x10$ (1, j); x10$ (2, j); x10$ (3, j); x10$ (4, j); x10$ (5, j)

80 PRINT x10$ (1, j); x10$ (2, j); x10$ (3, j); x10$ (4, j); x10$ (5, j)

90 NEXT j

100 CLOSE #2

110 RETURN

Оператор OPEN в строке 50 открывает файл для создания по каналу 2. Имя файла задается в главном модуле с помощью строковой переменной p2$. Далее в строках 60-90 организуется цикл для записи в файл N1 5-буквенных слов посредством оператора WRITE #2 в строке 70, который записывает в файл в одну строку 5 элементов (букв) массива x10$. Оператор PRINT в строке 80 выводит на экран записываемое в файл слово. По завершению цикла оператор CLOSE #2 закрывает файл, а RETURN завершает подпрограмму, передавая управление оператору, следующему в главном модуле программы за оператором GOSUB 50. Подпрограмма добавления слов в файл аналогична рассмотренной и отличается лишь заменой ключевого слова OUTPUT в строке 50 на APPEND, также лучше изменить и номер канала. Одновременно можно открыть несколько файлов, но каждый по своему каналу, обозначаемому своим номером от 1 до 255. Сколько всего можно открыть файлов зависит от файла конфигурации компьютера. Во избежание неприятностей рекомендуется не открывать сразу слишком много файлов, а по окончании работы с файлом сразу же закрыть его.

В подпрограмме считывания в строке с оператором OPEN ставится ключевое слово INPUT, а для считывания данных используется оператор INPUT #n (где n – номер канала), поставленный в двойной цикл. Верхний предел одного цикла определяется числом букв в слове, а второго – количеством читаемых слов. С помощью оператора PRINT считываемые слова выводятся на экран. С помощью функции EOF(n), где n – номер канала, следует предусмотреть выход из цикла в случае, когда заданное число считываемых слов превышает число записанных в файл слов. Это позволит избежать появления сообщения об ошибке "Введен конец файла". Используемые в программе массивы лучше описывать операторами REDIM.

Таблица 0.5.1.

Оператор и его описание

OPEN "file2.dat" FOR OUTPUT AS #2

Оператор, открывающий по 2-му каналу файл file2.dat для создания. Если файл file2.dat уже был создан, то он уничтожается и создается заново.

OPEN "file2.dat" FOR APPEND AS #1

Оператор, открывающий по 1-му каналу файл file2.dat для добавления. Если файл находится не в текущем каталоге, с которым работает Бейсик, то в названии файла необходимо указывать полный путь к нему, например, "A:\ZZ\file.dat" для файла, находящегося на диске А (дискете) в каталоге (папке) ZZ.

OPEN "file2.dat" FOR INPUT AS #3

Оператор, открывающий по 3-му каналу файл file2.dat для считывания

WRITE #2, x10$ (1, j); x10$ (2, j)

В открытый по 2-му каналу файл оператор записывает в одну строку из массива x10$ два символьных элемента c разделительными знаками

PRINT #1, x10$ (1, j); x10$ (2, j)

В открытый по 1-му каналу файл оператор записывает в одну строку из массива x10$ два символьных элемента без разделительных знаков

INPUT #3, x11$ (i, j)

Оператор, читающий данные из открытого по 3-му каналу файла и присваивающий их значения переменной x11$(i, j).

CLOSE #1

Оператор, закрывающий открытый по 1-му каналу файл

CLOSE

Если все аргументы опущены, то закрываются все файлы и устройства.

EOF(n)

Функция файлового ввода-вывода, определяющая условие конца файла, где n – номер открытого файла. Используется, например, для досрочного выхода из цикла, организованного для считывания данных из файла, когда данные файла исчерпаны.

NAME " file1.dat" AS "file2.dat"

Оператор переименовывает файл file1.dat в file2.dat

KILL " file2.dat "

Оператор стирает указанный файл file2.dat с диска. Соответствует команде DOS del.