Информатика |
Глава 10. Описание языка Basic | назад оглавление вперед |
10.9. Работа с файлами данных.
Наборы данных целесообразно хранить на диске в тех случаях, когда
Для идентификации и удобства дальнейшей работы наборам данных присваиваются имена. Набор данных с именем называется файлом.
Для работы с файлами данных (формирования файла или считывания из файла) файл нужно объявить в программе (“открыть” файл).
Открытие файла данных осуществляется при помощи оператора
ОРЕN имя FOR режим AS FILE #n
где имя – имя файла, которое может включать имя диска и путь к файлу;
режим – режим использования файла; INPUT – указывается при считывании данных из файла, OUTPUT - указывается при записи данных в файл;
n – номер файла (число в диапазоне от 1 до 255), который идентифицирует файл во время его открытия.
Закрытие файла данных должно осуществляться после окончания работы с ним при помощи оператора
CLOSE #n
где n — номер открытого файла; если номер файла опущен, то оператор закрывает все открытые в данный момент файлы.
В Basic имеется возможность работать с файлами данных последовательного и прямого доступа. Далее рассматриваются только файлы последовательного доступа.
Файл последовательного доступа характеризуется тем, что порядок следования данных в нем определяется последовательностью, в которой данные записываются на диск. Считывание из файла последовательного доступа возможно только в том же порядке, в котором данные хранятся в этом файле.
Пересылка данных в файл последовательного доступа осуществляется при помощи оператора
PRINT #n, список
Считывание из файла последовательного доступа осуществляется при помощи оператора
INPUT #n, список
где n — номер открытого файла.
Список здесь имеет тот же смысл, что и для операторов PRINT и INPUT, изученных ранее.
Данные, передаваемые в файл при помощи одного оператора PRINT #n , называются записью. Таким образом сформированный файл состоит из последовательности записей. Считывание из файла также осуществляется записями, т. е. при пересылке данных в следующий элемент списка оператора INPUT #n выбирается следующая запись. Это необходимо учитывать при формировании файла. Рекомендуется, как правило, при одном выполнении оператора PRINT #n записывать в файл одно данное, т. е. список оператора PRINT #n должен содержать только один элемент.
После окончания пересылки данных в файл последовательного доступа и выполнения оператора CLOSE на диске формируется признак конца файла.
Пример 10.19. Составим программу для формирования файла последовательного доступа. Имя файла вводится пользователем. В этот файл записывается строка текста, которая затем считывается из файла и выводится на экран (см. программу 10.17).
Программа 10.17
INPUT "Введите имя файла:
"; n$
OPEN n$ FOR
OUTPUT AS #1
PRINT #1, "Эта
строка сохранена в файле."
CLOSE #1
OPEN n$ FOR
INPUT AS #1
INPUT #1, a$
PRINT "Считано
из файла: "; a$
CLOSE #1
END
Считано из файла: Эта строка сохранена в файле.
Пояснения к программе. Первый оператор программы запрашивает имя файла, который затем открывается для записи данных во втором операторе. Оператор PRINT записывает в открытый файл строку текста, после чего файл с номером 1 закрывается.
В пятой строке программы созданный ранее файл открывается для чтения и с помощью оператора INPUT из файла считывается запись, которая помещается в строковую переменную a$. Затем значение переменной a$ выводится на экран.
Пример 10.20. В качестве примера составим программу для записи двумерного массива в файл последовательного доступа. Файл a:\matr.dat создается на диске А:. В этот файл записываются значения элементов матрицы, генерируемые с помощью функции RND(). Одновременно значения элементов матрицы выводятся на экран (см. программу 10.18).
Программа 10.18
OPEN "a:\matr.dat" FOR
OUTPUT AS #1
PRINT "Введите
размер матрицы"
INPUT n
FOR i = 1 TO
n
FOR j = 1 TO
n
a = INT(RND(i)
* 10)
PRINT a;
PRINT #1, a;
NEXT
j
PRINT
PRINT #1,
NEXT i
CLOSE #1
END
Пояснения к программе. Первый оператор программы открывает файл с номером 1 для записи данных. Затем пользователь вводит размер матрицы, значения элементов которой генерируются с помощью функции RND(). Оператор PRINT #1, а; записывает в открытый файл элемент матрицы. Матрица записывается в файл и выводится на экран по строкам. В конце программы файл, открытый для записи закрывается.
Если при считывании из файла количество данных в нем заранее не известно, то для окончания считывания можно использовать функцию EOF(#n), n — номер файла.
Пример 10.21. В качестве примера составим программу для считывания данных из файла последовательного доступа и записи их двумерный массив (см. программу 10.19). Файл a:\matr.dat был создан на диске А: в предыдущем примере. В этот файл были записаны значения элементов матрицы.
Программа 10.19
OPEN "a:\matr.dat" FOR
INPUT AS #1
INPUT n
DIM a(n, n)
FOR i = 1 TO
n
FOR j = 1 TO
n
INPUT #1, a(i,
j)
PRINT a(i,
j);
IF EOF(1) THEN
100
NEXT j
PRINT
NEXT i
100 : CLOSE
#1
END
Пояснения к программе. Первый оператор программы открывает файл с номером 1 для считывания данных. Затем пользователь вводит размер матрицы, значения элементов которой необходимо считать из файла. Оператор INPUT #1, a(i, j)считывает очередное значение из файла и записывает его в очередной элемент двумерного массива. Если достигнут конец файла, т.е. считано последнее значение из файла, то функция EOF(1) возвратит значение TRUE (ИСТИНА) и управление будет передано оператору с меткой 100, находящемуся за пределами цикла.
Одновременно матрица записывается выводится на экран по строкам. В конце программы файл, открытый для записи закрывается.