|
Работа с файлами
1.
Введение и основные функции
Большинство программ работает с данными, которые можно вводить с
клавиатуры и выводить на экран, или с данными, хранящимися в каких-либо
файлах на дискетах или жестких дисках.
Рассмотрим некоторые основные понятия. Прежде всего следует выяснить, что
собственно понимают под словом "файл". Это понятие можно определить так:
файл — это область на носителе информации, где хранятся некоторые
данные. Правда это определение слишком обобщенное, так как, следуя такому
определению, файлами можно назвать и такие вещи как:
-
Телефонный справочник (носитель - бумага)
-
Ящик
картотеки (носитель - бумага)
-
Сведения
об адресах на жестком диске (носитель - жесткий диск).
Нас будут
интересовать лишь такие файлы, хранящиеся на носителях, которые можно
обрабатывать программами QBASIC. Вернемся к картотеке.
В картотечном ящике, как правило, находится некоторое количество карточек,
в противном случае — картотека пуста. Если к картотеке применить понятие
файла, то может возникнуть ситуация, когда файл окажется пустым. Однако
файл существует, в нем только нет информации. Отдельные карточки картотеки
называются записями. Так же, как карточки в ящике картотеки, записи в
файле расположены последовательно: есть первая запись файла и последняя.
На отдельной карточке картотеки или в отдельной записи может храниться
всевозможная информация (например, фамилия, адрес, возраст,...). Эта
информация называется полем данных. Объединение отдельных полей
составляет логическое целое — запись или предложение файла. Прежде
чем создавать или обрабатывать файлы в программе, следует позаботится о
том, чтобы нужная информация запоминалась в предложении файла.
В этой
главе попробуем создать небольшой адресный справочник, в котором
будут следующие поля данных:
Чтобы
ввести данные в справочник, необходимо сначала
открыть файл данных. Для этого
используется оператор OPEN в следующем формате:
OPEN Имя_фаила FOR Режим_работы AS #Номер_файла
Имя_фаила- Имя файла с расширением и маршрутом
Режим_работы - Устанавливает разрешенный режим доступа к данным,
хранящимся в файле.
APPEND: файл открывается для записи, причем новые предложения
записываются в конец файла.
INPUT: файл открывается для чтения.
OUTPUT: файл открывается для записи, причем если файла не
существует, то создается новый, а если существует, то ранее существовавшая
там информация будет уничтожена, а новая будет записана в начало.
RANDOM: файл состоит из записей фиксированной длины и открыт как
для записи, так и для чтения.
Номер_файла: Целое число между 1 и 255. Обращение к файлу из
программы происходит под этим номером.
После того как файл обработан, с помощью команды CLOSE его необходимо
закрыть. В программе это выглядит так:
CLOSE #Номер_фаила
Доступ к файлу возможен между командами OPEN и CLOSE, например, командой
WRITE можно записать предложение
в файл.
WRITE Номер_файла, Переменная [, Переменная]...
Следующая программа показывает, как можно вводить данные для файла
адресов. В режиме APPEND каждое записываемое предложение помещается в
конец файла. Таким образом, программу можно вызывать сколь угодно часто и
дописывать данные в файл. Если же режим APPEND изменить на OUTPUT, данные
будут каждый раз обновляться.
'*********************************
'** Программа для ввода адресов **
'*********************************
'Объявление полей данных
DIM nachnameS, vorname$, strasseS, plz$, ort$, telefon$, stlchwort$
DIM nocheinS 'Переключатель
'Открыть файл в режиме APPEND
OPEN "adresse.asc" FOR APPEND AS #1
'Ввод данных будет продолжаться до тех пор, пока в поле nocheinS
'будет вводиться "Y" или "у"
DO
CLS
'Ввести поля данных
INPUT "Фамилия : ", nachnameS
INPUT "Имя . ", vorname$
INPUT "Улица : ", strasse$
INPUT "Почт.индекс: ", plz$
INPUT "Местность : ", ort$
INPUT "Телефон : ", telefon$
INPUT "Заглавие : ", stichwortS
'Записать предложение
WRITE #1,nachname$,vorname$,strasse$,plz$,ort$,telefon$,stichwort$
PRINT
'Спросить, продолжить ли ввод
INPUT "Следующий адрес? (Y/N)", nocheln$
LOOP WHILE UCASE$(nochein$)-"Y"
'Закрыть файл
CLOSE #1
'Конец программы
Далее необходимо вывести содержимое созданного файла на экран. Это значит,
что данные последовательно читаются, и отдельные поля при необходимости
появляются на экране. Для распознавания конца файла используется функция
EOF.

2. Функция EOF
Функция EOF (Номер_файла) применяется
с аргументом Номер_файла и возвращает логическое значение "истина", если
достигнут конец файла, и "ложь" — в противном случае.
Отдельные записи файла считываются одним из вариантов команды INPUT. Ранее
было рассмотрено считывание данных с клавиатуры и запоминание полученной
информации в переменных. Для того чтобы
читать данные из файла, следует
применять оператор INPUT в таком виде:
INPUT #Номер_фаила, Поле_данных_1
[,Поле_данных_2]... [,Поле_данных_n]
'Работа с файлами
'Программа для последовательного чтения адресов
'Объявление полей данных
DIM nachname$, vornameS, strasse$, plz$, ort$, telefon$,stichwort$
'Открыть файл в режиме INPUT
OPEN "adresse.asc FOR INPUT AS #1
CLS
'Читать файл до тех пор, пока функция EOF не примет
'значение "ложь" (0)
DO UNTIL EOF(1)
'0 до тех пор, пока не достигнут конец файла
'Читать запись
INPUT #1,nachname$,vornamee$,strasse$,plz$,ort$,telefon$, stichworrtS
'Вывести на экран
PRINT nachname$," "; vorname$; " "; strasse$
PRINT plz$; " "; ort$, " ", telefonS; " "; stichwort$
PRINT LOOP
'Закрыть файл CLOSE *1

3. Работа с адресами в справочнике.
В данном разделе работу с адресами в справочнике дополним
несколькими важными функциями. Прежде всего должны быть разработаны
удобные формы представления справочных данных на экране. Не следует
обходить вниманием этот раздел, даже если Вас отпугнут несколько
пространные примеры. Интенсивная проработка этого раздела несомненно даст
Вам ценный материал для собственной практики программирования. У Вас
появится возможность повторить основные операции QBASIC.
Программа управления адресами должна выполнять следующие действия:
-
искать адрес
-
изменять адрес
В главной программе для выбора отдельных действий необходимо создать меню.
Из меню программа разветвляется на отдельные процедуры, которые выполняют
независимые задачи. Преимущество такой структуры программы в том, что,
во-первых, можно достаточно быстро получить доступ к любому фрагменту
рабочей программы, а также меню - очень удобный интерфейс любой программы.
Для начала попробуем нарисовать некую рамку, в которой и будет находится
наша программа. Пример программы представлен ниже.
Пример:
CLS
FOR i = 17 TO 64
COLOR 1
LOCATE 10, i
PRINT "=" 'Прорисовка 1-й горизонтальной линии
LOCATE 23, i
PRINT "=" 'Прорисовка 2-й горизонтальной линии
NEXT i
FOR j = 11 TO 22
LOCATE j, 17
PRINT "" 'Прорисовка 1-й вертикальной линии
LOCATE j, 65
PRINT "¦" 'Прорисовка 2-й вертикальной линии
NEXT j
LOCATE 10, 17 ' Прорисовка уголков
PRINT "?"
LOCATE 10, 65
PRINT "?"
LOCATE 23, 17
PRINT "?"
LOCATE 23, 64
PRINT "?"
COLOR 2
LOCATE 21, 39
PRINT "OK"
Теперь мы имеем рамочку в центре экрана и внутри написано ОК. Далее... Во
первых нам нужен обработчик клавиш для передвижения по меню, а во вторых
требуется составить алгоритм прорисовки экрана после каждого нового
перехода от одного пункта к другому.
Попробуйте составить программу самостоятельно.

|