D3doc - FlashBASIC - Операторы
D3doc - FlashBASIC - Операторы
Открывает файл и создает фиксированный массив file file1 {, file2 ...}
Директива компилятору использовать словарные записи описания атрибутов для компиляции программы.
В одном и том же операторе через запятые можно задать несколько файлов. В настоящий момент использование полных поисковых имен файлов (pathnames) в операторе "file" не разрешается.
Как правило, оператор "file" применяется для того, чтобы разрешить использование записей описания атрибутов для определения счетчика атрибутов поля ("ac") и автоматического применения словарных кодов корреляций к значению поля в записи.
Когда компилятор FlashBASIC встречает оператор "file", он открывает словарь файла, заданного в "file1", создает исполняемый код для открытия раздела данных файла во время выполнения, просматривает код FlashBASIC в поисках ссылок на заданный файл и задает размерность массива с тем же самым именем, как имя заданного файла.
Размер массива-матрицы определяется компилятором. Компилятор просматривает программу и отыскивает ссылки на имена атрибутов, которые он рассматривает как нижние индексы массива-матрицы (напр., fv.entity(credit.limit)). Выявив все ссылки к заданному файлу, компилятор берет "самое высокое" полученное значение счетчика атрибутов, прибавляет к нему "1" и использует полученное значение в качестве размера массива-матрицы.
После того, как запись считана из файла, можно обращаться к атрибутам внутри записи, используя имя атрибута из соответствующего словаря в качестве подстрочного индекса элемента массива. Коды корреляций, заданные в словаре файла, выполняются, а выходные конверсии - нет.
Операторы "read" и "write" не могут задавать файловую переменную, если в качестве переменной используется имя массива-матрицы "file1".
Указатель файла присваивается файловой переменной (file.variable) в форме "fv.file1" и является ссылкой на раздел данных открытого файла.
Примеры: file entity id = "100" read entity from id then if entity(name) = "" then crt "no name!" end
Файл "entity" открыт оператором "file". Если запись "100" успешно прочитана, проверяется поле "name". Если имя поля пустое, на экран будет выдано сообщение "no name".
fv.entity = access(1) if not(assigned(fv.entity)) then file entity
Здесь выясняется, было ли присвоено значение переменной "fv.entity", с помощью функции "access". Если значение не присвоено, выполняется оператор "file". Этот метод особенно полезен при вызове подпрограмм из AQL. Он устраняет необходимость повторного открытия файла при каждом вызове программы. Если используется эта логика, оператор "file" выполняется один раз.