Синтаксис символов DCL в OpenVMS - PullRequest
3 голосов
/ 04 июля 2011

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

$    wo = "write sys$output"

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

$ billing_run_number   == p1

Is p1 aпараметр передается в файл .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.?равны?Я также видел .не..eqs.тоже.Чем они отличаются?

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

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

Ответы [ 4 ]

5 голосов
/ 05 июля 2011

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

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

4 голосов
/ 04 июля 2011

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

.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 знает, что делать, когда оно видит две одинарные кавычки подряд, как это ...

Официальным заклинанием является '' symbol '' для замены действительного текста DCL на значение символа

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

2 голосов
/ 12 сентября 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 - исключение любая запущенная вами программа, которая специально читает или пишет, или создает глобальный символ - редко, но я сталкивался с несколькими.

1 голос
/ 05 июля 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 "

In 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"

youможно использовать

wo "Hello World!"

или

'wo "Hello World!"

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

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

wo "'wo Hello World!"

вы получите wo 'wo Hello World!

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

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

wo "'' wo 'Hello World!"


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

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

напечатает Hello world!

...