3

OpenVMS の DCL のいくつかの構文について、私は本当に混乱しています。たとえば、これらは私を混乱させた行の一部です。

$    wo = "write sys$output"

wowrite 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 も見ました。、.eqs。それも。それらの違いは何ですか?

「and」と「or」が 2 つのドットで囲まれているのはなぜですか? DCL 固有の構文ですか?

分かりやすい無料のオンラインチュートリアルがあればいいのにと思います。皆さん、ありがとうございました!

4

4 に答える 4

5

VMS のドキュメントは、オンラインでhttp://hp.com/go/vmsにあります。

読みたいマニュアルは、http://h71000.www7.hp.com/doc/731final/documentation/pdf/ovms_731_users.pdf (具体的には第 2 章) にある OpenVMS ユーザーズ マニュアルです。

于 2011-07-05T13:48:09.440 に答える
4

メモリから:$ wo = "write sys$output"あなたが言うように、wo を "write sys$output" のエイリアスとして割り当てます。これは、VMS の Unix stdout に相当します。

.nes.は「等しくない文字列」で.ne.あり、これと比較して「等しくない」数値です。

p1 は、ご想像のとおり (最初の) パラメータです。p1 から p9 まで、またはそれ以上になるのか、それとも任意の制限がないのか思い出せません。p0 は、Python の sys.argv[0] のようなプログラム名かもしれません。

コマンド・プロシージャーは、P1 .. P8 と呼ばれる最大 8 個のパラメーターを受け入れます。

一重引用符 (') は次の変数名を補間するためwo "BILLING_RUN_NUMBER = ''billing_run_number'"、たとえば、BILLING_RUN_NUMBER = '42'p1 が 42 に等しいと仮定すると、出力されます。このように 2 つの一重引用符が連続している場合、DCL が何をすべきかを正確に思い出せません。 ...

公式の呪文は ''symbol' で、実際の DCL テキストを symbol の値に置き換えます

これで少なくとも始められます... VMS を使用するほとんどのショップでは、3 リング バインダーに数百ポンドの書類が入っています。周りに聞いてください。

于 2011-07-04T07:57:00.587 に答える
2

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_dclP81 つの文字列に「my_p8 my_p9 my_p10」の値が含まれます。

$ wo "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!"

また

'wo "Hello World!"

しかし、表示したい場合はどうすればよいですかwrite sys$output Hello World

試してみると、

wo "'wo Hello World!"

あなたはwoを得るでしょう'wo Hello World!

したがって、単一引用符で囲む必要があります。

最初の 2 つはエスケープされた単一引用符で、最後の 1 つは翻訳を停止することを意味します。

wo "''wo' Hello World!"


他のスクリプト言語と同様に、可変変数を使用できます...

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

Hello world! を出力します。

于 2011-07-05T13:19:32.163 に答える
2

上記のドキュメントに加えて、HELP HINTS、HELP :=、HELP =、および HELP @ コマンドによる広範な情報もあります。P9-P16 は OpenVMS V8.4 で利用可能になったと思います。

また、グローバル シンボル (2 つの等号 {== または :==} で定義) とローカル シンボル (1 つの等号 {= または :=} で定義) の違いにも注意してください。大文字と小文字を区別する言語のように、 A = 1 で定義されたシンボルは A == 1 で定義されたシンボルとは異なり、ローカルシンボルはグローバルシンボルへの参照をマスクできます-また、READやINQUIREなどの一部のコマンドはシンボルを作成できますが、それらはは常にローカル シンボルです。メモリから作業しているので確認してください。\

コマンド SET SYMBOL /SCOPE[={LOCAL|NOLOCAL},{GLOBAL|NOGLOBAL}) も、特定の種類のシンボルを表示できるかどうかに影響を与える可能性があります。

一般に、できる限りローカル シンボルを使用してください。通常、グローバル シンボルが必要になるのは、より高いレベルの (呼び出し元の) コマンド プロシージャがアクセスする必要がある場合、または対話型 DCL に戻ったときにシンボルがまだ定義されている必要がある場合のみです。例外は、すべてのプログラムです。グローバルシンボルを具体的に読み取り、書き込み、または作成することを実行します-まれですが、私はいくつかに遭遇しました。

于 2011-09-12T18:55:48.067 に答える