Синтаксис символа DCL в OpenVMS

Меня действительно смущает некоторый синтаксис в DCL OpenVMS. Например, вот некоторые строки, которые меня смутили:

$    wo = "write sys$output"

Создает ли он символ wo для записи sys$output?

$ billing_run_number   == p1

Является ли p1 параметром, передаваемым в файл .com при его выполнении? Сколько параметров может быть ему предоставлено?

$ wo "BILLING_RUN_NUMBER   = ''billing_run_number'"

Заменяется ли «abc» содержимым символа abc? Почему это «abc», а не «abc»? Можем ли мы использовать ""?

$ if ((status .nes. "P") .and. (status .nes. "M")) .or. (ftp_status .nes. "Y")

Что означает .nes.? равный? Я также видел .ne. , экв. слишком. Чем они отличаются?

Почему "и" и "или" обведены двумя точками? Специальный синтаксис DCL?

Было бы неплохо, если бы были бесплатные онлайн-уроки, которые легко понять. Спасибо вам всем!


person lamwaiman1988    schedule 04.07.2011    source источник


Ответы (4)


Документацию по VMS можно найти в Интернете по адресу http://hp.com/go/vms.

Руководство, которое вы хотите прочитать, — это Руководство пользователя OpenVMS, которое можно найти по адресу http://h71000.www7.hp.com/doc/731final/documentation/pdf/ovms_731_users.pdf (в частности, глава 2).

person Ken Robinson    schedule 05.07.2011

из памяти: $ wo = "write sys$output", как вы говорите, назначает wo в качестве псевдонима для «записи sys $ output», эквивалента VMS для Unix stdout.

.nes. "не равно строке" по сравнению с .ne., которое является числовым "не равно".

p1 - ​​это (первый) параметр, как вы догадались. Я не могу вспомнить, проходит ли он от p1 до p9 или больше, или нет произвольного ограничения. p0 может быть именем программы, например sys.argv[0] в Python.

Командная процедура принимает до 8 параметров, называемых P1 .. P8.

одинарная кавычка (') интерполирует следующее имя переменной, поэтому wo "BILLING_RUN_NUMBER = ''billing_run_number'" выведет, например, BILLING_RUN_NUMBER = '42', предполагая, что p1 равно 42. Я не могу точно вспомнить, как DCL знает, что делать, когда он видит две одинарные кавычки подряд как это...

Официальным заклинанием является «символ», чтобы фактический текст DCL был заменен значением символа.

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

person jcomeau_ictx    schedule 04.07.2011

В дополнение к документации, упомянутой выше, есть также обширная информация с помощью команд HELP HINTS, HELP :=, HELP = и HELP @. Я полагаю, что P9-P16 стал доступен с OpenVMS V8.4.

Кроме того, обратите особое внимание на разницу между глобальными символами (определяемыми двойным знаком равенства {== или :==}) и локальными символами (определяемыми одним знаком равенства {= или :=}). Как и в языках, чувствительных к регистру, символ, определенный A = 1, отличается от символа, определенного A == 1, и локальный символ может маскировать ссылки на глобальный символ - также некоторые команды, такие как READ и INQUIRE, могут создавать символы, но я думаю, что они всегда являются локальным символом - убедитесь, что я работаю по памяти.\

Команда SET SYMBOL /SCOPE[={LOCAL|NOLOCAL},{GLOBAL|NOGLOBAL}) также может повлиять на то, видны ли определенные типы символов.

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

person Mike Kier    schedule 12.09.2011

Параметр p1 передается в файл .com при его выполнении? Сколько параметров может быть предоставлено?

Вы можете передать до 8 параметров. Каждый из них определяется как P1, P2... P8

Если вам нужно более 8 параметров, вы можете использовать такой трюк, как

@my_dcl "my_p1" "my_p2" "my_p3" "my_p4" "my_p5" "my_p6" "my_p7" "my_p8 my_p9 my_p10"

В my_dcl P8 будет содержать значение «my_p8 my_p9 my_p10» в одной строке.

$ wo "BILLING_RUN_NUMBER = ''billing_run_number'"

Заменяется ли «abc» содержанием символа abc? Почему это «abc», а не «abc»? Можем ли мы использовать ""?

$ if ((status .nes. "P") .and. (status .nes. "M")) .or. (ftp_status .nes. "Y")

Одинарная кавычка означает перевод содержимого строки.

Итак, если вы определяете wo = "write sys$output"

вы можете использовать

wo "Hello World!"

or

'wo "Hello World!"

Но что, если вы хотите показать write sys$output Hello World

Если вы попытаетесь,

wo "'wo Hello World!"

ты получишь горе 'wo Hello World!

Итак, вы должны окружить его одинарной кавычкой.

Первые два — это экранированная одинарная кавычка, последний означает остановку перевода.

wo "''wo' Привет, мир!"


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

var_hidden = "Hello world!"
my_var = "var_hidden"
wo 'my_var'

напечатает Привет, мир!

person Luc M    schedule 05.07.2011