Программа на языке NetScript

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

Операторы

Операторы в NetScript-программе подразделяются на простые и структурные. К простым относится оператор присваивания и комментарий.

A = B + C ; А это комментарий к оператору

Структурные операторы представляют собой конструкцию языка, которая объединяет один или несколько операторов (простых и структурных) в операторе условия или в операторе цикла для управления логикой работы программы.

Пример оператора цикла Пример оператора условия

I=1 if K>0

while i<10 do begin then K=1

? i else K=-1

i=i+1

end

Выражения

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

X + Y

I <> J

-X

(R+17)/(h*i-9)

Лексемы

Лексемами называются наименьшие значащие элементы NetScript-программы. Из лексем состоят операторы, а также сомножители и слагаемые, образующие выражения. Лексемами являются зарезервированные слова, специальные символы, имена переменных и числа. Примеры лексем:

WHILE *; Зарезервированное слово *

( *; Специальный символ *

= *; Специальный символ *

Name *; Имя переменной *

9 *; Число *

Ограничением NetScript является запрещение использования зарезервированных слов в качестве имен переменных.

Лексемы

Лексемами называются наименьшие значащие элементы NetScript-программы. К лексемам относятся зарезервированные слова, специальные символы, имена переменных и числа.

В NetScript-программах между лексемами должны стоять разделители, такие как специальные символы, пробелы и символы конца строки, но разделители не должны разрывать лексемы.

Специальные символы

В NetScript-программе для образования лексем используются подмножество набора символов ASCII:

  1. Буквы - английский алфавит от A до Z и от a до z: русский алфавит от А до Я и от а до я; символ подчеркивания ( _ ). Регистр символов значения не имеет, т.е. имя переменной Name и NAME идентичны

  2. Цифры - арабские цифры от 0 до 9

  3. Пробелы - к ним относится символ “пробел” (ASCII 32) и управляющие ASCII-символы с кодами от 0 до 31

Ниже приведены синтаксические диаграммы для букв и цифр:

буква

… … … …

цифры

К специальным символам относятся: + - * / = < > [ ] { } . , и пары символов >= <> <=

Зарезервированные слова

В данном руководстве заразервированные (или ключевые) слова представлены жирным шрифтом. Зарезервированные слова используются для описания операторов NetScript. Они могут быть записаны как строчными, так и прописными буквами: While, WHILE и WhIlE имеют одно и то же значение. Зарезервированные слова не могут являться именами переменных.

В NetScript определены следующие ключевые слова:

**OR XOR AND SHL SHR NOT BEGIN **

END EXIT LOCAL RECORD ARRAY GLOBAL PRINT

IF THEN ELSE WHILE DO REPEAT FOR

FROM TO DOWNTO STEP BREAK CONTINUE OF

TYPE DELETE FALSE TRUE ИСТИНА ЛОЖЬ CREATE

CREATEDATAFILE MAIN SUBMIT FIELD BYTE WORD

INTEGER LONGINT SINGLE REAL DOUBLE DATE ?

HARDLIST FARHARDLIST SOFTLIST FARSOFTLIST STRING

HARDRECORD FARHARDRECORD SOFTRECORD FARSOFTRECORD

MEMO MEMOTEXT MEMOSHEET MEMOGRAPHICS MEMOAV CALL

Переменные

Переменной будем называть область оперативной памяти, которая может хранить некоторое значение (называемое значением переменной). Каждая переменная имеет имя, через которое можно получить доступ к значению переменной. В процессе выполнения программы переменная может менять свое значение с помощью оператора присваивания.

Переменные не требуют предварительного описания. Они могут создаваться и уничтожаться в произвольном месте программы, разрешенном синтаксисом языка. Переменная создается во время присвоения ей значения. Присвоенное значение определяет тип переменной. Тип переменной может измениться во время следующего присваивания значения, если новое значение имеет тип отличный от типа переменной.

Возможные типы переменных:

  1. Строковый. Переменная становится строковой при присвоении ей

    строкового значения. Для строковых переменных допустимы операции сложения и сравнения. Пример строковой переменной:

    Name = “Вася”

    F=“Коровин “+”П.Е.”

    if Name = F or F=“ДА” then

    ? F

  1. Целочисленный. Переменная становится целочисленной при присвоении

    ей целого числа. Для целочисленных переменных допустимы операции сложения, вычитания, умножения, деления и сравнения. Пример целочисленной переменной:

    i=“REST” {Переменная создается как строковая}

    i=1 {Из строковой переменная превращается в целочисленную}

    j=(i+8)/5

  1. Вещественный. Переменная становится вещественной при присвоении ей

    нецелого (т.е. с дробной частью) числового значения. Для вещественных переменных допустимы операции сложения, вычитания, умножения, деления и сравнения. Пример вещественной переменной:

    i=1 {Переменная создается как целочисленная}

    i=1.0 {Из целочисленной переменная превращается в Вещественную}

    j=2/5

  1. Файловая. Переменная становится файловой (или управляющей

    переменной файла данных), когда участвует в операторе открытия Open или связывания Bind файла данных. Файловая переменная не может изменить свой тип и не может самостоятельно (без конкретизации выполняемого действия. См. *Доступ к файлам базы данных*) участвовать в выражениях.

Выражения

Выражения состоят из знаков операции и операндов. Как правило знаки операции в NetScript являются бинарными, так как используют два операнда. Но есть и унарные, т.е. относящиеся только к одному операнду. Бинарные знаки операций имеют как правило алгебраическую форму (на пример, А+В). Унарные знаки всегда предшествуют операнду (например, ).

В сложных выражениях операции выполняются в порядке, соответствующем приоритету знаков операций:

Приоритет

Знак операции

  1. (высший)

not, - (унарный)

and, *, /, shl, shr, <<, >>

or, xor, +, -

  1. (низший)

=, <>, <, >, <=, >=

Существует три главных правила действия приоритета

  1. Операнд между двумя знаками с разными приоритетами относится к тому,

    у которого приоритет выше.

  2. Операнд между знаками с одинаковым приоритетом относится тому,

    который стоит слева.

  3. Выражение в скобках вычисляется в первую очередь.

Синтаксис выражений NetScript

Приоритет операций вытекает из синтаксиса построения выражений в NetScript, которые состоят из сомножителей, слагаемых, сумм и простых выражений.

Сомножитель описывается следующей синтаксической диаграммой:

Сомножитель

Константа без знака имеет следующий синтаксис:

Константа без знака

Ниже приведены примеры сомножителей:

X { Переменная }

N.[»Фамилия»] { Имя поля файла данных }

15 { Беззнаковая константа }

False { Беззнаковая константа }

(X+Y+Z) { Скобочное подвыражение }

Это строка символов { Строка символов должна начинаться и заканчиваться кавычкой}

SIN(3.1415) { Вызов функции }

Слагаемые представляют собой сомножители, объединенные операторами:

Слагаемое

Примеры слагаемых:

X*Y

Z/(1-Z)

A shl 2

Простое выражение объединяет слагаемые:

Простое выражение

Примеры простого выражения:

X+Y

X

I*J+1

Простые выражения, связанные посредством операторов сравнения образуют Выражения NetScript.

Примеры выражений:

(I>=X) and (Y<>Z)

(F>=5) and (F<10) or (F>=15) and (F<=20)

Операторы NetScript

Операторы NetScript описывают алгоритмические действия, которые должны быть выполнены. Все операторы делятся на три типа: простые, структурные и специальные.

Простые операторы

Простой оператор не должно содержать в себе никаких других предложений. К простым относится оператор Присваивания и Комментарий.

Оператор присваивания

Оператор присваивания заменяет текущее значение переменной в программе или поля в файле данных на новое значение, определяемое выражением.

Оператор присваивания

В представленной диаграмме Переменная - это любое разрешенное в NetScript имя переменной.

*Поле файла данных* должно иметь синтаксис, описанный в разделе Доступ к данным.

Ограничений по типу присваиваемого выражения нет, так как тип переменной приводится к типу значения выражения, а в случае с полем файла данных тип выражения приводится к типу поля.

Примеры оператора присваивания:

X = Y + Z

Done = (I >= 1) and (I < 100)

N.[«Name»] = “World” + ”Expo”

Client = N.[«Фамилия»] + N.[«Инициалы»]

Комментарии

Программы в NetScript могут содержать комментарии, т.е. фрагменты программы, не подлежащие исполнению. Комментарии в NetScript являются простыми операторами и должны размещаться в программе в соответствии с правилами построения предложений. Комментарий начинается со знака ; и продолжается до конца строки. Пример оформления комментария:

X=1 ; Присвоить начальное значение Правильно

X= ; Присвоить начальное значение 1 Неправильно

Структурные операторы

Структурные операторы строятся из простых операторов, которые могут выполняться по условию (оператор условия) или в цикле (операторы цикла). Цикл — это повторение выполнения некоторой последовательности операторов. Структурные операторы являются основным средством, позволяющим реализовать сложные вычислительные процессы.

Оператор условия

Оператор условия позволяет выполнить одну из составляющих его последовательностей операторов в зависимости от поставленного условия. Ниже представлен синтаксис записи условного оператора.

Оператор условия

Выражение должно формировать значение логического типа. Если получаемое значение на логическое, то оно приводится к логическому по следующим правилам:

  1. Пустая строка —> false (ложь), иначе true (истина).

  2. Нулевое численное значение —> false, иначе true.

Если результат выражения true, то выполняется оператор, стоящий после **THEN. **

Если результат выражения false и присутствует альтернатива (т.е. else и оператор), то выполняется оператор, стоящий после ELSE; если альтернативная часть отсутствует, то выполнение программы продолжается со следующего оператора.

В синтаксической диаграмме Оператор - это один или несколько простых, структурных или специальных операторов NetScript.

Операторы цикла

Операторы цикла объединяют один или несколько операторов NetScript, которые могут выполняться повторно несколько раз при выполнении поставленного условия. К операторам цикла относятся REPEAT, WHILE, FOR.

Цикл REPEAT

Оператор цикла REPEAT состоит из одного или нескольких операторов, составляющих тело цикла, и выражения, управляющего повторным выполнением операторов тела цикла.

Оператор REPEAT

repeat

k=i/j

i=j

j=k

until j=0

i=1

repeat

? i

i=i+1

until i>10

Выражение должно формировать значение логического типа, иначе значение будет приведено к логическому, как описано в операторе условия. Один или несколько операторов NetScript, представленных на диаграмме блоком Оператор, выполняются повторно до тех пор, пока Выражение формирует значение *false*. Выход из цикла происходит при значении Выражения *true*. Тело цикла всегда выполняется хотя бы один раз, так как условие выхода проверяется после выполнения Оператора.

Пример оператора repeat:

Цикл WHILE

Оператор цикла WHILE состоит из одного или нескольких операторов, составляющих тело цикла, и выражения, управляющего повторным выполнением операторов тела цикла.

Оператор WHILE

Выражение должно формировать значение логического типа, иначе значение будет приведено к логическому, как описано в операторе условия. Один или несколько операторов NetScript, представленных на диаграмме блоком Оператор, выполняются, если Выражение формирует значение true. Работа цикла прекращается, если значение Выражения на очередном шаге становится false. Условие выполнения цикла проверяется перед телом цикла. Поэтому, если значение Выражения равно false в начале выполнения, то тело цикла не выполняется ни разу.

Пример цикла while:

i=1

while Data[i] <> X do

i=i+1

Цикл FOR

Оператор цикла FOR состоит из одного или нескольких операторов, составляющих тело цикла, и выполняющихся при изменении значения управляющей переменной цикла от начального значения до конечного значения с указанным шагом.

Оператор цикла FOR

Управляющая переменная

Начальное значение

Конечное значение

Начальное значение, конечное значение и шаг приращения переменной должны быть целого типа или типа с ним совместимого. Тело цикла выполняется один раз для каждого значения в диапазоне между начальным и конечным значением. Если необходимо, чтобы тело цикло состояло из нескольких операторов – их необходимо заключить между ключевыми словами BEGIN и END.

Выполнение цикла всегда начинается с начального значения. Когда используется форма оператора с ключевым словом TO значение переменной цикла увеличивается при каждой итерации. Если начальное значение больше конечного цикл не выполнится ни разу. Если используется форма оператора с ключевым словом DOWNTO значение управляющей переменной будет уменьшаться при каждой итерации. Если начальное значение меньше конечного цикл не выполнится ни разу.

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

Учитывая все выше сказанное, оператор for

for v from Exp1 to Exp2 step Exp3 do

тело цикла

можно представить как

v=Exp1

while v<=Exp2 do begin

тело цикла

v=v+Exp3

end

а оператор for

for v from Exp1 downto Exp2 step Exp3 do

тело цикла

можно представить как

v=Exp1

while v>=Exp2 do begin

тело цикла

v=v-Exp3

end

Доступ к файлам базы данных

Язык NetScript содержит ряд конструкций, необходимых для работы с файлами данных. К ним относятся операторы создания, открытия, закрытия файла данных; операторы работы с записями; операторы манипулирования данными и т.д.

Создание файла данных

Для создания файла данных NetScript содержит оператор CreateDataFile, синтаксическая диаграмма которого представлена ниже.

Оператор CreateDataFile не проверяет существование файла с указанным названием. Если же такой файл существует, то он будет удален перед созданием файла данных.

Категория ключевое слово MAIN или SUBMIT. Указывает местоположение создаваемого файла в проекте. Если указано ключевое слово MAIN то файл будет помещен в группу главных, а если указано ключевое слово SUBMIT то файл будет помещен в группу справочников.

Название Имя под каким создаваемый файл будет виден в проекте.

Описание полей представляет собой список поле файла. Ниже приведена синтаксическая диаграмма описания полей.

Имя поля представляет собой строку до 25 символов длиной, заключенную в кавычки. Имена поле не должны повторяться.

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

Если поле имеет тип с номером HARDLIST, SOFTLIST, HARDRECORD или SOFTRECORD то после описания типа должно быть указано название подчиненного файла. Это имя записывается в кавычках.

Если поле имеет тип STRING, то после указания типа через пробел записывается числовая константа, указывающая размер строки в символах.

Имя типа

BYTE

Байт

WORD

Целое без знака (2 байта)

INTEGER

Целое со знаком

LONGINT

Длинное целое (4 байта)

SINGLE

Вещественное одинарной точности (4 байта)

REAL

Вещественное (6 байт)

DOUBLE

Вещественное двойной точности (8 байт)

STRING

Текстовое (1-254 символов)

DATE

Дата (8 байта)

HARDLIST

“Жесткая” ссылка на список записей

SOFTLIST

Мягкая” ссылка на список записей

HARDRECORD

“Жесткая” ссылка на запись

SOFTRECORD

“Мягкая” ссылка на запись

FARHARDLIST

“Жесткая” ссылка на список записей в выбираемом файле

FARSOFTLIST

“Мягкая” ссылка на список записей в выбираемом файле

FARHARDRECORD

“Жесткая” ссылка на запись в выбираемом файле

FARSOFTRECORD

“Мягкая” ссылка на запись в выбираемом файле

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

Пример создания файлов базы данных “Список сотрудников”

CreateDataFile Main “Список сотрудников”

field “Фамилия” STRING 25,

field “Имя” STRING 15,

field “Отчество” STRING 20,

field “Дата рождения” DATE,

field “Дети” HARDLIST “Дети”

CreateDataFile Submit “Дети”

field “Имя” STRING 15,

field “Возраст” BYTE

Открытие файлов данных

Для того чтобы работать с файлом данных, его нужно открыть с помощью функции DBOpen, DBOpenFile или DBBind.

Функция DBOpen

Функция DBOpen открывает файл данных и создает управляющую переменную. Через DBOpen можно открывать как главные, так и подчиненные файлы. Ниже приводится синтаксическая диаграмма функции DBOpen

Название БД представляет собой строковую константу или выражение, порождающее значение строкового типа. Если БД с таким именем в проекте не существует, то во время выполнения выдается сообщение об ошибке и работа программы прекращается.

Управляющей переменной в процессе выполнения программы от момента открытия файла до момента закрытия файла нельзя присваивать нового значения, так как при этом она теряет связь с файлом данных, файл остается открытым и внесенные в него изменения окажутся не записанными на диск. Кроме того, это может привести к нарушению логической целостности файла данных.

image37

Управляющая переменная представляет собой имя переменной, разрешенное в NetScript. Если переменная с указанным именем была определена перед вызовом DBOpen, то ее старое значение уничтожается. После открытия доступ к файла осуществляется через управляющую переменную.

Функция DBBind служит для открытия подчиненного файла и связывания его с главным через ссылочное поле или, если подчиненный файл уже был открыт, для связывания подчиненного с главным в цепочку доступа. Связываемый подчиненный файл становится терминальным в цепочке. Синтаксическая диаграмма функции DBBind имеет вид:

Функция DBBIND

Переменная2 должна быть управляющей переменной файла данных, который будет являться главным по отношению к связываемому файлу. Перед связывание, к файлу с управляющей переменной Переменная2 должна быть применена операция позиционирования на ссылочное поле (функция типа DBFldGoto (Переменная2, Имя поля).

Переменная1 должна быть либо не инициализированной переменной, либо являться управляющей переменной файла с именем, указанным в описании ссылочного поля файла-владельца.

Если связывание файлов в цепочку доступа прошло успешно, то через управляющую переменную Переменная1 можно получить доступ к записи или списку записей в подчиненном файле.

CreateDataFile Main “Список сотрудников”

field “Фамилия” STRING 25,

field “Имя” STRING 15,

field “Отчество” STRING 20,

field “Дата рождения” DATE,

field “Дети” HARDLIST “Дети”

CreateDataFile Submit “Дети”

field “Имя” STRING 15,

field “Возраст” BYTE

M = DBOpen(“Список сотрудников”) ;Открываем главный файл

M.[«Фамилия»] = “Иванов”

DBFldGoto(M, «Дети») ;Переходим на ссылочное поле Дети, которое

;ссылается на подчиненный файл «Дети»

M1 = DBBind(M1) ;Связываем подчиненный файл с главным и создаем

;управляющую переменную

DBRecAppend(M1)

M1.[«Имя»]=“Машенька” ; Добавляем запись и записываем имя

DBRecAppend(M1) ; Добавляем запись в конец списка и

M1.[«Имя»]=“Дашенька” ; записываем еще одно имя

DBClose(M1) ; Закрываем сначала подчиненный,

DBClose(M) ; а затем главный файл

Приведенный выше пример является работоспособной программой на языке NetScript. В результате его выполнения создаются главный и подчиненный файлы, а также файл связи. Затем для сотрудника с фамилией “Иванов” в подчиненном файле создается список детей. После закрытия файлов внесенные данные записываются на диск. Следующая программа показывает, как использовать созданные файлы и выводит на экран записанные в них данные.

M := DBOpen(“Список сотрудников”) ;Открываем главный файл

for i from 1 to DBNRecords(M) do begin ;Цикл по всем записям

DBRecGoto (M, I) ;Переходим к записи с номером, который хранится

;в переменной i

? M.[«Фамилия»] ;Напечатать содержимое поля ФАМИЛИЯ

DBFldGoto(M, «Дети») ;Перейти (или сделать текущим) к полю ДЕТИ

m1 = DBBind(M) ;Открыть подчиненный файл через ссылочное поле ДЕТИ

for j from 1 to DBNRecords(m1) do ;Цикл по всем записям в

; подчиненном списке

begin

DBRecGoto(m1, j) ;Переходим к записи с номером, который хранится

; в переменной j

? “ “, m1.[«Имя»] ;Напечатать значение поля ИМЯ

end ;Конец цикла

DBClose(m1) ;Закрываем подчиненный файл

end ; *Конец цикла *

DBClose(M) ;Закрываем главный файл (или файл-владелец)

Закрытие файлов

После завершения обработки данных в открытых файлах их следует закрыть, чтобы записать внесенные изменения, или чтобы создать новую цепочку доступа к файлу (для этого его нужно освободить от связи со старой цепочкой), или освободить занимаемую ими память, или чтобы открыть другой файл (иногда это существенно, так как ДОС не разрешает держать одновременно открытыми более 15 файлов). Для закрытия файла и разрыва связи применяются две функции: DBClose и DBUnBind.

Функция DBClose

Функцию DBClose можно представить следующей синтаксической диаграммой:

Управляющая переменная должна быть создана функцией DBBind или DBOpen и должна управлять подчиненным файлом, участвующем в цепочке доступа как терминальный. Функция DBClose разрывает установленную связь, делая терминальным файлом цепочки файл-владелец, закрывает файл и удаляет из памяти управляющую переменную.

Пример закрытия файла функцией DBClose

M = DBOpen(“Список сотрудников”) ;Открываем главный файл

DBFldGoto(M, «Дети») ;Перейти (или сделать текущим) к полю ДЕТИ

m1 = DBBind(M) ;Открыть подчиненный файл через ссылочное поле ДЕТИ и

; установить цепочку доступа}

DBClose(m1) ;Закрываем подчиненный файл

DBClose(M) ; Закрываем главный файл (или файл-владелец)

Функция DBUnBind

Функцию DBUnBind можно представить следующей синтаксической диаграммой:

Управляющая переменная должна быть создана функцией DBBind и должна управлять подчиненным файлом, участвующем в цепочке доступа как терминальный. Функция DBUnBind разрывает установленную связь, делая терминальным файлом цепочки файл-владелец, но не закрывает файл и не удаляет из памяти управляющую переменную, оставляя тем самым доступ к данным в файле.

Пример использования DBUnBind

M = DBOpen(“Список сотрудников”) ; Открываем главный файл

DBFldGoto(M, «Дети») ; Перейти (или сделать текущим) к полю ДЕТИ

m1 = DBBind(M) ;Открыть подчиненный файл через ссылочное поле ДЕТИ и

;установить цепочку доступа}

UnBind m1 ;Разрываем связь, оставляя подчиненный файл открытым

DBClose(m1) ;Закрываем подчиненный файл

DBClose(M) ;Закрываем главный файл (или файл-владелец)

Позиционирование в файле данных

Язык NetScript поддерживает ряд операторов, выполняющих переход к нужному полю или записи в файле. Операторы позиционирования можно представить следующей синтаксической диаграммой:

В приведенной диаграмме Переменная должна быть управляющей переменной открытого файла данных. Ниже, в примерах операторов, используется переменная M, являющаяся управляющей переменной файла «Список сотрудников».

Оператор Field выполняет переход к полю с указанным номером или указанным именем (при этом имя поля должно быть заключено в квадратные скобки), делая его текущим. Текущее поле используется для связывания с подчиненным файлом, а также в операторе присваивания. Например, M.Field 1 или M.Field [Дети].

Оператор RecGoto выполняет переход на запись, номер которой задается параметром Номер записи (это может быть константа или выражение с целым значением), делая ее текущей. Операторы присвоения/получения значения полю, удаления и вставки записей работают с текущей записью. Например, M.RecGoto 1.

Оператор RecNext выполняет переход на следующую после текущей запись в файле или списке, делая ее текущей. Если текущая запись является последней в файле или списке, то никаких действий не производится. Например, M.RecNext.

Оператор RecPrev выполняет переход на запись, предшествующую текущей, делая ее текущей. Если текущая запись является первой в файле или списке, то никаких действий не производится. Например, M.RecPrev.

Оператор RecLast выполняет переход на последнюю запись в файле или списке, делая ее текущей. Если текущая запись является последней в файле или списке, то никаких действий не производится. Например, M.RecLast.

Оператор RecFirst выполняет переход на первую запись в файле или списке, делая ее текущей. Если текущая запись является первой в файле или списке, то никаких действий не производится. Например, M.RecFirst.

Добавление и удаление записей

Для добавления и удаления записей в/из файла данных применяются операторы Insert, Append и Delete, синтаксическая диаграмма которых приведена ниже.

В приведенной диаграмме Переменная должна быть управляющей переменной открытого файла данных. Ниже, в примерах операторов, используется переменная M, являющаяся управляющей переменной файла «Список сотрудников».

Оператор Insert вставляет пустую запись перед текущей. Если перед вставкой в файле или списке не было записей, то вставляется первая запись. Вставленная запись становится текущей. Например, M.Insert

Оператор Append добавляет запись после последней записи в файле или списке. Добавленная запись становится текущей. Например, M.Append

Оператор Delete удаляет текущую запись из файла данных. Удаленную запись восстановить нельзя. После удаления текущей становится следующая запись (или предыдущая, если текущая была последней в списке или файле). Например, M.Delete

Работа с данными

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

Переменная должна быть управляющей переменной открытого файла данных.

Имя поля должно быть записано в том виде, в каком оно определено в файле данных. Если указанного поля нет файле, то выдается сообщение об ошибке и выполнение программы прекращается. Если имя поля не указано, то обращение происходит к текущему полю (см. Позиционирование … Field ). Поле файла данных может использоваться в выражениях на правах переменной и может быть левой частью оператора присваивания (в этом случае в поле будет записываться новое значение).

Пример использования полей:

T.[«Фамилия»] = “Иванов”

if T.[«Фамилия»] = “Иванов” then ? T.[Имя]

T.[«Возраст»] = T.[«Возраст»] +1

DBFldGoto(T, «Имя»)

Команды ввода/вывода данных

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

Ввод информации.

Для ввода информации используется команда INPUT, синтаксическая диаграмма которой представлена ниже.

При выполнении этой команды на экране появится окно следующего вида

Пользователь должен ввести необходимые данные или нажать кнопку «Cancel».

При нажатии кнопки «ОК» указанной переменной присвоится значение из строки ввода. Если же пользователь нажал кнопку «Cancel», переменная будет иметь пустое значение.

Пример:

INPUT «Запрос» «Имя считываемой точки» Name

Вывод информации.

Для вывода информации в режиме телетайпа используется команда PRINT. Ее можно описать следующей синтаксической диаграммой:

Пример использования:

PRINT «Расстояние до объекта : «, T.[«Расстояние»]

Команды отображения состояния процесса

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

InitProgress, SetProgressValue, DoneProgress