Rexx-quick-guide
Rexx-概要
- Rexx(Restructured Extended Executor)*は、スクリプト言語として設計されています。 その目標は、スクリプトを可能な限り簡単、高速、信頼性が高く、エラーのないものにすることです。 多くのプログラミング言語は、古い言語との互換性のために設計されており、特定の対象者またはプラットフォーム向けに作成されています。 Rexxは無関係な目的を無視します。 強力でありながら使いやすいように、初日から設計されました。
Rexxは、もともと言語 EXECおよびEXEC 2 。 これは、あらゆるシステムの*マクロまたはスクリプト言語*として設計されました。 そのため、RexxはTclおよびPythonの前身と見なされます。 Rexxは、作成者がPL/Iプログラミング言語のシンプルで簡単に習得できるバージョンにすることも意図していました。
Rexxの機能
プログラミング言語としてのRexxには、次の重要な機能があります-
- 簡単な構文
- コマンドを複数の環境にルーティングする機能
- 特定の呼び出し環境に関連する機能、手順、およびコマンドをサポートする機能。
- ホストスタック(存在する場合)と相互運用する機能を備えた組み込みスタック。
- わずか20個の命令を含む小さな命令セット
- 自由形式の構文
- 変数名を含む大文字と小文字を区別しないトークン
- 文字列ベース
- 動的なデータ型指定、宣言なし
- ローカルコンテキストを除き、予約済みのキーワードはありません
- インクルードファイル機能なし
- 任意の数値精度
- 10進算術、浮動小数点
- 豊富な組み込み関数、特に文字列およびワードプロセッシング
- 自動ストレージ管理
- 衝突保護
- 連想可能なデータ構造
- 連想配列
- システムのコマンドと機能への簡単なアクセス
- シンプルなエラー処理、組み込みのトレースおよびデバッガー
- 人為的な制限が少ない
- 簡素化されたI/O機能
Rexxの公式Webサイトはhttp://www.oorexx.org/[www.oorexx.org]です。
Rexx-環境
Rexxで作業を開始する前に、システムで実行されているRexxの完全に機能するバージョンがあることを確認する必要があります。 この章では、Rexxのインストールと、Rexxを開始するためのWindowsマシンへのその後の構成について説明します。
インストールを進める前に、次のシステム要件が満たされていることを確認してください。
システム要求
Memory | 2 GB RAM (recommended) |
Disk Space | No minimum requirement. Preferably to have enough storage to store the programs which will be created using Rexx. |
Operating System Version | Rexx can be installed on Windows, Ubuntu/Debian, Mac OS X. |
Rexxのダウンロード
Rexxをダウンロードするには、次のURLを使用する必要があります-http://www.oorexx.org/downloadl[https://www.oorexx.org/downloadl]
次のスクリーンショットに示すように、このページには、Rexxのさまざまなバージョンのさまざまなダウンロードがあります。
リリース4.2.0のヘッダーがある表の「ooRexxインストールファイル」をクリックします。
この後、次のページにリダイレクトされます。
*ooRexx-4.2.0.windows.x86_64.exe* をクリックして、* 64ビットバージョンのソフトウェアをダウンロードします。 次の章でソフトウェアのインストールについて説明します。
Rexx-インストール
次の手順では、RexxをWindowsシステムにインストールする方法を詳細に説明します。
- ステップ1 *-前のセクションでダウンロードしたインストーラーを起動します。 インストーラーが起動したら、[実行]ボタンをクリックします。
- ステップ2 *-次の画面で[次へ]ボタンをクリックして、インストールを続行します。
- ステップ3 *-[同意する]ボタンをクリックして続行します。
- ステップ4 *-*デフォルトのコンポーネント*を受け入れ、次のボタンをクリックします。
- ステップ5 *-インストール場所を選択して、[次へ]ボタンをクリックします。
- ステップ6 *-インストールされるデフォルトのプロセスを受け入れ、[次へ]ボタンをクリックします。
- ステップ7 *-デフォルトのファイルの関連付けを選択し、[次へ]ボタンをクリックします。
- ステップ8 *-Rexxアイテムを実行可能ファイルに送信するチェックボックスをクリックし、次のスクリーンショットに示すように[次へ]ボタンをクリックします。
- ステップ9 *-次の画面で、Rexxファイルを操作するためのエディターを選択します。 デフォルトのオプションとしてメモ帳を保持します。 各Rexxファイルのデフォルト拡張子も受け入れます。
- ステップ10 *-表示される次の画面でデフォルト設定を受け入れ、[次へ]ボタンをクリックしてインストールを続行します。
- ステップ11 *-最後に[インストール]ボタンをクリックして、インストールを続行します。
- ステップ12 *-インストールが完了したら、[次へ]ボタンをクリックしてさらに進む必要があります。
- ステップ13 *-[完了]ボタンをクリックして、インストールを完了します。
Rexx-プラグインのインストール
この章では、* popular IDE’s(Integrated Development Environment)にプラグインをインストールする方法について説明します。 プログラミング言語としてのRexxは、 *Eclipse などの一般的なIDEでも使用できます。 これらのIDEで必要なプラグインを取得する方法を見てみましょう。これにより、Rexxを使用する際の選択肢が増えます。
Eclipseでのインストール
EclipseでRexxを問題なくインストールするには、次の手順に従う必要があります。
ステップ1 *-Eclipseを開き、次のスクリーンショットに示すように、メニュー項目 *Help→Eclipse Marketplace をクリックします。
- ステップ2 *-次のダイアログボックスで、検索条件にRexxと入力し、検索ボタンをクリックします。
完了したら、[インストール]ボタンをクリックします。
- ステップ3 *-確認ボタンをクリックして、機能のインストールをさらに続行します。
- ステップ4 *-Eclipseは必要なファイルをダウンロードして、インストールを開始します。 完了すると、Eclipseはライセンス契約への同意を求めます。 ライセンス契約への同意をクリックしてから、次のスクリーンショットに示すように[完了]ボタンをクリックします。
その後、Eclipseはバックグラウンドでソフトウェアのインストールを開始します。
- ステップ5 *-おそらくセキュリティ警告が表示されます(次のスクリーンショットを参照)。 [OK]ボタンをクリックして続行します。
- ステップ6 *-アップデートがインストールされると、Eclipseを再起動するように求められます。 [はい]をクリックしてEclipseを再起動します。
Rexx-基本的な構文
Rexxの基本的な構文を理解するために、まず簡単なHello Worldプログラムを見てみましょう。
例
/*Main program*/
say "Hello World"
Hello Worldプログラムがいかにシンプルであるかを見ることができます。 Hello Worldプログラムを実行するために使用される単純なスクリプト行です。
上記のプログラムについては、次のことに注意する必要があります-
- * sayコマンド*は、コンソールに値を出力するために使用されます。
- / / はRexxのコメントに使用されます。
上記のプログラムの出力は次のようになります-
Hello World
声明の一般的な形式
Rexxでは、プログラムの一般的な形式を見てみましょう。 次の例を見てください。
/*Main program*/
say add(5,6)
exit
add:
parse arg a,b
return a + b
上記のプログラムの出力は次のようになります-
11
上記のプログラムからわかったことを見てみましょう-
- 追加は、2つの数値を追加するために定義された関数です。
- メインプログラムでは、5および6の値が関数addのパラメーターとして使用されます。
- exitキーワードは、メインプログラムを終了するために使用されます。 これは、メインプログラムと追加機能を区別するために使用されます。
- 追加機能は「:」記号で区別されます。
- 解析ステートメントは、入力引数を解析するために使用されます。
- 最後に、returnステートメントを使用して、数値の合計を返します。
サブルーチンと関数
Rexxでは、コードは通常、サブルーチンと関数に分割されます。 サブルーチンと関数は、コードを異なる論理ユニットに区別するために使用されます。 サブルーチンと関数の主な違いは、関数は値を返すのに対してサブルーチンは返さないことです。
以下は、追加の実装のためのサブルーチンと関数の重要な違いの例です-
機能実装
/*Main program*/
say add(5,6)
exit
add:
parse arg a,b
return a + b
サブルーチンの実装
/*Main program*/
add(5,6)
exit
add:
parse arg a,b
say a + b
両方のプログラムの出力は値11になります。
コマンドの実行
Rexxは、さまざまなコマンドベースのシステムの制御言語として使用できます。 これらのシステムでRexxがコマンドを実行する方法は次のとおりです。 Rexxは、命令でも割り当てでもないプログラム行を検出すると、その行を評価してから環境に渡す文字列式として扱います。
例は次のとおりです-
例
/*Main program*/
parse arg command
command "file1"
command "file2"
command "file3"
exit
このプログラムの3つの同様の行は、ファイル名(文字列定数に含まれる)をコマンド名(パラメーターとして指定)に追加する文字列式です。 結果の文字列は、コマンドとして実行される環境に渡されます。 コマンドが終了すると、変数「rc」がコマンドの終了コードに設定されます。
上記のプログラムの出力は次のとおりです-
sh: file1: command not found
3 *- *command "file1"
>>> " file1"
+++ "RC(127)"
sh: file2: command not found
4* - *command "file2"
>>> " file2"
+++ "RC(127)"
sh: file3: command not found
5* -* command "file3"
>>> " file3"
+++ "RC(127)"
Rexxのキーワード
REXXの無料の構文は、一部のシンボルが特定のコンテキストでの言語プロセッサの使用のために予約されていることを意味します。
特定の命令内では、命令の一部を分離するためにいくつかのシンボルが予約されている場合があります。 これらのシンボルはキーワードと呼ばれます。 REXXキーワードの例は、DO命令の WHILE 、および* IFまたはWHEN句*に続く THEN (この場合は句終端子として機能します)です。
これらの場合とは別に、句の最初のトークンであり、その後に「=」または「:」が続かない単純なシンボルのみが、それらが命令キーワードであるかどうかが確認されます。 シンボルは、キーワードと見なされることなく、句内の他の場所で自由に使用できます。
Rexxのコメント
コメントは、コードを文書化するために使用されます。 単一行コメントは、行の任意の位置で/* */を使用して識別されます。
例は次のとおりです-
/*Main program*/
/*Call the add function*/
add(5,6)
/*Exit the main program*/
exit add:
/*Parse the arguments passed to the add function*/parse arg a,b
/*Display the added numeric values*/
say a + b
コメントは、次のプログラムに示すように、コード行の間に書き込むこともできます-
/*Main program*/
/*Call the add function*/
add(5,6)
/*Exit the main program*/
exit
add:
parse /*Parse the arguments passed to the add function*/
arg a,b
/*Display the added numeric values*/
say a + b
上記のプログラムの出力は次のようになります-
11
また、次のプログラムに示すようにコメントに複数の行を持つことができます-
/*Main program
The below program is used to add numbers
Call the add function*/
add(5,6)
exit
add:
parse arg a,b
say a + b
上記のプログラムの出力は次のようになります-
11
Rexx-データ型
どのプログラミング言語でも、さまざまな変数を使用してさまざまな種類の情報を保存する必要があります。 変数は、値を保存するために予約されたメモリの場所に他なりません。 これは、変数を作成するときに、その変数に関連付けられた値を保存するためにメモリ内にスペースを確保することを意味します。
文字列、文字、ワイド文字、整数、浮動小数点、ブールなどのさまざまなデータ型の情報を保存することができます。 変数のデータ型に基づいて、オペレーティングシステムはメモリを割り当て、予約メモリに保存できるものを決定します。
組み込みデータ型
Rexxは、さまざまな組み込みデータ型を提供します。 以下は、Rexxで定義されているデータ型のリストです。
- 整数-小数点または指数識別子を含まない数値の文字列。 最初の文字は、* aプラス(+)またはマイナス(-)記号*です。 表示される数値は、-2147483648〜2147483647の範囲である必要があります。
- ビッグ整数-小数点または指数識別子を含まない数字の文字列。 最初の文字には、プラス(+)またはマイナス(-)記号を使用できます。 表示される番号は、-9223372036854775808から2147483648まで、または2147483648から9223372036854775807までの間である必要があります。
- * 10進数*-次のいずれかの形式になります- 小数点を含むが指数識別子を含まない数値の文字列。 p は精度を表し、 *s は文字列が表す10進数のスケールを表します。 最初の文字には、プラス(+)またはマイナス(-)記号を使用できます。
- *小数点*または指数識別子を含まない数値の文字列。 最初の文字には、プラス(+)またはマイナス(-)記号を使用できます。 表示される数は-9223372036854775808未満または9223372036854775807を超えています。
- Float -科学表記法で数値を表す文字列。 文字列は、一連の数値とそれに続く指数識別子(Eまたはeの後にオプションのプラス(+)またはマイナス(-)記号と一連の数値)で構成されます。 文字列はプラス(+)またはマイナス(-)記号で始めることができます。
- String -通常の文字列。
次に、各データ型の使用方法の例をいくつか示します。 繰り返しますが、各データ型については、後続の章で詳しく説明します。 これは、上記のデータ型の簡単な説明を使用して、すぐに理解できるようにするためのものです。
整数
数値データ型の使用方法の例を次のプログラムに示します。 このプログラムは、2つの整数の追加を示しています。
例
/*Main program
The below program is used to add numbers
Call the add function*/
add(5,6)
exit
add:
parse arg a,b
say a + b
上記のプログラムの出力は次のようになります-
11
大きい整数
次のプログラムは、Rexxの大きな整数を処理する機能を示しています。 このプログラムは、2つの大きな整数を追加する方法を示しています。
例
/*Main program
The below program is used to add numbers
Call the add function*/
add(500000000000,6000000000000000000000)
exit
add:
parse arg a,b
say a + b
上記のプログラムの出力は次のようになります-
6.00000000E+21
小数
次のプログラムは、10進数を処理するRexxの機能を示しています。 このプログラムは、2つの10進数を追加する方法を示しています。
例
/*Main program
The below program is used to add numbers
Call the add function*/
add(5.5,6.6)
exit
add:
parse arg a,b
say a + b
上記のプログラムの出力は次のようになります-
12.1
浮く
次の例は、数値がフロートとして機能する方法を示しています。
例
/*Main program
The below program is used to add numbers
Call the add function*/
add(12E2,14E4)
exit
add:
parse arg a,b
say a + b
上記のプログラムの出力は次のようになります-
141200
ひも
Tupleデータ型の使用方法の例を次のプログラムに示します。
ここでは、3つの用語を持つ Tuple P を定義しています。 tuple_size は、Rexxで定義されている組み込み関数で、タプルのサイズを決定するために使用できます。
例
/*Main program*/
display("hello")
exit
display:
parse arg a
say a
上記のプログラムの出力は次のようになります-
hello
Rexx-変数
Rexxでは、すべての変数は「=」ステートメントでバインドされます。 変数名はシンボルと呼ばれることもあります。 文字、数字、および「」などの文字で構成される場合があります。 ! ? _’. 作成する変数名は、数字またはピリオドで始まってはなりません。 単純な変数名にはピリオドは含まれません。 ピリオドを含む変数名は複合変数と呼ばれ、配列またはテーブルを表します。
以下は、前の章でも説明されたRexxの変数の基本的なタイプです-
- 整数-これは、整数または浮動小数点数を表すために使用されます。 この例は10です。
- 大きな整数-これは大きな整数値を表します。
- Decimal -10進数値は、小数点を含むが指数識別子を含まない数値の文字列です。
- フロート-フロート値は、科学表記法で数値を表す文字列です。
- 文字列-一連の文字は、Rexxの文字列を定義します。
さまざまなタイプの変数関数
このセクションでは、変数が実行できるさまざまな機能について説明します。
可変宣言
変数を定義する一般的な構文は次のように示されています-
var-name = var-value
どこで
- var-name -これは変数の名前です。
- var-value -これは変数にバインドされた値です。
次のプログラムは、変数宣言の例です-
例
/*Main program*/
X = 40
Y = 50
Result = X + Y
say Result
上記の例では、2つの変数があります。1つは値 40 にバインドされた X で、次は 50 の値にバインドされた Y です。 Resultという別の変数は、 XとY の追加にバインドされます。
上記のプログラムの出力は次のようになります-
90
変数の命名
変数名はシンボルと呼ばれることもあります。 文字、数字、および「」などの文字で構成される場合があります。 ! ? _’ . 作成する変数名は、数字またはピリオドで始まってはなりません。
変数に値がまだ割り当てられていない場合、初期化されていないものと呼ばれます。 初期化されていない変数の値は、大文字の変数自体の名前です。
未割り当て変数の例は次のとおりです-
例
/*Main program*/
unassignedvalue
say unassignedvalue
上記のプログラムを実行すると、次の出力が得られます-
UNASSIGNEDVALUE
sh: UNASSIGNEDVALUE: command not found
2 *-* unassignedvalue
>>> "UNASSIGNEDVALUE"
+++ "RC(127)"
変数には値を複数回割り当てることができます。 以下のプログラムは、Xの値に値を複数回割り当てる方法を示しています。
例
/*Main program*/
X = 40
X = 50
say X
上記のプログラムの出力は次のようになります-
50
変数の印刷
変数の値は、 say コマンドを使用して出力されます。 以下は、さまざまな変数を出力する例です。
例
/*Main program*/
X = 40
/*Display an Integer*/
say X
Y = 50.5
/*Display a Float*/
say Y
Z = "hello"
/*Display a string*/
say Z
上記のプログラムの出力は次のようになります-
40
50.5
hello
Rexx-オペレーター
演算子は、特定の数学的または論理的な操作を実行するようコンパイラーに指示する記号です。
Rexxには、次のように詳細に説明されているさまざまなタイプの演算子があります-
- 算術演算子
- 関係演算子
- 論理演算子 *ビットごとの演算子
算術演算子
Rexx言語は、すべての言語として通常の算術演算子をサポートしています。 以下は、Rexxで使用可能な算術演算子です。
リンク:/rexx/rexx_arithmetic_operators [例を表示]
Operator | Description | Example |
---|---|---|
PLUS | Addition of two operands | 1 PLUS 2 will give 3 |
− | Subtracts second operand from the first | 1 - 2 will give -1 |
∗ | Multiplication of both operands | 2 ∗ 2 will give 4 |
/ | Division of numerator by denominator | 2/2 will give 1 |
// | Remainder of dividing the first number by the second | 3//2 will give 1 |
% | The div component will perform the division and return the integer component. | 3 % 2 will give 1 |
関係演算子
関係演算子を使用すると、オブジェクトを比較できます。 以下は、Rexxで使用可能な関係演算子です。 Rexxでは、真の値は1で示され、偽の値は0で示されます。
link:/rexx/rexx_relational_operators [例を表示]
Operator | Description | Example |
---|---|---|
== | Tests the equality between two objects | 2 = 2 will give 1 |
< | Checks to see if the left object is less than the right operand. | 2 < 3 will give 1 |
=< | Checks to see if the left object is less than or equal to the right operand. | 2 =< 3 will give 1 |
> | Checks to see if the left object is greater than the right operand. | 3 > 2 will give 1 |
>= | Checks to see if the left object is greater than or equal to the right operand. | 3 > 2 will give 1 |
論理演算子
論理演算子は、ブール式を評価するために使用されます。 以下は、Rexxで使用可能な論理演算子です。
リンク:/rexx/rexx_logical_operators [例を表示]
Operator | Description | Example |
---|---|---|
& | This is the logical “and” operator | 1 or 1 will give 1 |
This is the logical “or” operator | ||
1 or 0 will give 1 | \ | This is the logical “not” operator |
\0 will give 1 | && | This is the logical exclusive “or” operator |
ビット演算子
Groovyは4つのビット演算子を提供します。 以下は、Groovyで使用可能なビットごとの演算子です。
リンク:/rexx/rexx_bitwise_operators [例を表示]
Sr.No. | Operator & Description |
---|---|
1 |
これはビット単位の「and」演算子です |
2 |
bitor これはビット単位の「or」演算子です |
3 |
bitxor これはビット単位の「xor」または排他的論理和演算子です |
演算子の優先順位
次の表に、Rexx演算子の演算子の優先順位を、優先順位の降順で示します。
Operators | Precedence |
---|---|
Prefix operators | PLUS - \ |
Addition and subtraction | PLUS - |
Comparison operators | = == > < >= ⇐ |
Logical AND | & |
Logical OR | |
EXCLUSIVE OR |
Rexx-配列
プログラミング言語の配列を使用すると、同じ型の値のリストをグループ化できます。 配列を使用すると、 sortable、searchable であり、*容易に操作できる*類似タイプの値のリストを作成できます。 Rexxでは、配列を定義することもできます。 これらの配列は、1次元または多次元にすることができます。
Rexx配列はまばらかもしれません。 つまり、すべての配列位置に値が必要なわけではなく、初期化される必要もありません。 データ要素を含む配列位置の間には、空の配列位置またはスロットが存在する可能性があります。 または、配列が密集していて、連続した配列スロットにすべてデータ要素が含まれている場合があります。
多くのプログラミング言語では、テーブルの最初のエントリの添え字が何であるかを考慮する必要があります。 最初の数値の添え字は0または1ですか? Rexxでは、最初の添え字は使用するものです。 したがって、最初の配列要素を希望する位置0または1に入力します。
array_name.0 = ‘first element’
or
array_name.1 = ‘first element’
配列に使用できるさまざまな操作を見てみましょう。
配列の作成
配列は、Rexxの変数に使用されるものと同じ命名規則で作成されます。
配列を作成するための一般的な構文は次のとおりです-
Arrayname.index = value
どこで
- Arrayname -これは、配列に提供される名前です。
- インデックス-これは、特定の要素を参照するための配列内のインデックス位置です。
- 値-これは、配列内のインデックス要素に割り当てられた値です。
配列宣言の例は次のとおりです-
例
/*Main program*/
list.1 = 0
list.2 = 0
list.3 = 0
上記のプログラムについて、次の点に注意する必要があります-
- 配列の名前はリストとして与えられます
- 0の値に初期化される配列には3つの要素があります。
配列要素への値の割り当て
配列要素が初期化されるのと同じ方法で、値を配列要素に再割り当てできます。
次のプログラムは、既存の配列のさまざまなインデックス値に割り当てることができる値の例です。
/*Main program*/
list.1 = 0
list.2 = 0
list.3 = 0
/* Assigning new values to the array*/
list.1 = 10
list.3 = 30
配列の値を表示する
配列の値は、配列要素のインデックス位置を参照することで表示できます。 次の例は、配列のさまざまな要素にアクセスする方法を示しています。
例
/*Main program*/
list.1 = 0
list.2 = 0
list.3 = 0
/* Assigning new values to the array*/
list.1 = 10
list.3 = 30
say list.1
say list.2
say list.3
上記のプログラムの出力は次のようになります-
10
0
30
配列のコピー
配列のすべての要素を別の配列にコピーできます。 これの一般的な構文は次のとおりです-
Newarray. = sourcearray.
どこで
- Newarray -これは、要素をコピーする必要がある新しい配列です。
- Sourcearray -これは、要素のコピー元のソース配列です。
配列のコピー操作を実行する方法の例は、次のプログラムに示されています-
例
/*Main program*/
list.1 = 0
list.2 = 0
list.3 = 0
/* Assigning new values to the array*/
list.1 = 10
list.3 = 30
listnew. = list.
say listnew.1
say listnew.2
say listnew.3
上記のプログラムの出力は次のようになります-
10
0
30
配列要素を反復処理する
Rexxで使用可能な反復ステートメントを使用して、配列の要素を反復することもできます。 これを行う方法の例は次のとおりです-
例
/*Main program*/
list.1 = 10
list.2 = 20
list.3 = 30
number_of_elements = 3
do j = 1 to number_of_elements
say list.j
end
上記のプログラムについては、次のポインタに注意する必要があります-
- * doループ*は、配列要素を反復処理するために使用されます。
- 変数 number_of_elements は、配列内の要素の数を格納するために使用されます。
- *変数j *は、配列の各要素を反復処理するために使用されます。
上記のプログラムの出力は次のようになります-
10
20
30
二次元配列
Rexxで多次元配列を構築できることも言及されました。 2次元配列を実装する方法の例を見てみましょう。
例
/*Main program*/
list.1 = 10
list.1.1 = 11
list.1.2 = 12
say list.1
say list.1.1
say list.1.2
上記のプログラムの出力は次のように表示されます-
10
11
12
上記のプログラムについて、次の点に注意する必要があります-
- 多次元配列を作成するには、別のインデックス付け層を使用できます。 したがって、この例では、 list.1.1 を使用して、リスト配列のインデックス値1に別の内部配列を作成しました。
Rexx-ループ
これまでのところ、次々に順番に実行されるステートメントを見てきました。 さらに、プログラムのロジックの制御フローを変更するステートメントがRexxで提供されます。 次に、それらを詳細に検討する制御ステートメントのフローに分類します。
ループステートメントを使用すると、ステートメントまたはステートメントのグループを複数回実行できます。 次の図は、ほとんどのプログラミング言語でのループステートメントの一般的な形式です。
Rexxでサポートされているさまざまなループについて説明しましょう。
Sr.No. | Loop Type & Description |
---|---|
1 |
|
2 |
do-whileステートメントは、他のプログラミング言語に存在する単純なwhileループをシミュレートするために使用されます。 |
3 |
do-untilループは、do whileループのわずかなバリエーションです。 このループは、評価される条件が偽の場合に終了するという点で異なります。 |
制御された繰り返し
doループは、ステートメントの制御された繰り返しを実行するように仕立てることができます。
構文
この種のステートメントの一般的な構文は次のとおりです。
do index = start [to limit] [by increment] [for count]
statement #1
statement #2
end
このステートメントの違いは、ループの実行回数を制御するために使用されるインデックスがあることです。 第二に、インデックスの開始値、終了位置、増分値を指定するパラメーターがあります。
流れ図
このループのフロー図を見てみましょう-
上記の図から、ループがインデックス値とインデックス値の増分方法に基づいて実行されることが明確にわかります。
次のプログラムは、制御された繰り返しステートメントの例です。
例
/*Main program*/
do i = 0 to 5 by 2
say "hello"
end
上記のプログラムでは、 count i の値が最初に0に設定されます。 次に、値が5以下になるまで2のカウントでインクリメントされます。
上記のコードの出力は次のようになります-
hello
hello
hello
Rexx-意思決定
意思決定構造では、プログラマがプログラムで評価またはテストする1つ以上の条件を指定する必要があります。
次の図は、ほとんどのプログラミング言語で見られる一般的な意思決定構造の一般的な形式を示しています。
条件が true であると判断された場合に実行されるステートメントがあり、オプションで、条件が false であると判断された場合に実行される他のステートメントがあります。
Rexxで利用できるさまざまな意思決定ステートメントを見てみましょう。
Sr.No. | Statement & Description |
---|---|
1 |
最初の意思決定ステートメントは、 if ステートメントです。 if ステートメントは、ブール式とそれに続く1つ以上のステートメントで構成されます。 |
2 |
次の意思決定ステートメントはif-elseステートメントです。 if ステートメントの後にオプションのelseステートメントを続けることができます。これは、ブール式がfalseの場合に実行されます。 |
ネストされたIfステートメント
他のプログラミング言語で可能なように、相互に埋め込まれた*複数のifステートメント*が必要な場合があります。 Rexxではこれも可能です。
構文
if (condition1) then
do
#statement1
end
else
if (condition2) then
do
#statement2
end
流れ図
ネストされた if ステートメントのフロー図は次のとおりです-
ネストされた if ステートメントの例を見てみましょう-
例
/*Main program*/
i = 50
if (i < 10) then
do
say "i is less than 10"
end
else
if (i < 7) then
do
say "i is less than 7"
end
else
do
say "i is greater than 10"
end
上記のプログラムの出力は次のようになります-
i is greater than 10
ステートメントを選択
Rexxは、selectステートメントの出力に基づいて式を実行するために使用できるselectステートメントを提供します。
構文
この声明の一般的な形式は-
select
when (condition#1) then
statement#1
when (condition#2) then
statement#2
otherwise
defaultstatement
end
この声明の一般的な作業は次のとおりです-
- selectステートメントには、さまざまな条件を評価するための一連のwhenステートメントがあります。
- 各* when節*には異なる条件があり、評価する必要があり、後続のステートメントが実行されます。
- それ以外のステートメントは、以前のwhen条件が true に評価されない場合に、デフォルトステートメントを実行するために使用されます。
流れ図
*select* ステートメントのフロー図は次のとおりです
次のプログラムは、Rexxのcaseステートメントの例です。
例
/*Main program*/
i = 50
select
when(i <= 5) then
say "i is less than 5"
when(i <= 10) then
say "i is less than 10"
otherwise
say "i is greater than 10"
end
上記のプログラムの出力は次のようになります-
i is greater than 10
Rexx-数字
Rexxには、数値に関して次のデータ型があります。
- 整数-小数点または指数識別子を含まない数値の文字列。 最初の文字には、プラス(&plus;)またはマイナス(-)記号を使用できます。 表示される数値は、-2147483648〜2147483647の範囲である必要があります。
- ビッグ整数-小数点または指数識別子を含まない数字の文字列。 最初の文字には、プラス(&plus;)またはマイナス(-)記号を使用できます。 表示される番号は、-9223372036854775808から2147483648まで、または2147483648から9223372036854775807までの間である必要があります。
- Decimal -次の形式のいずれか-
- 小数点を含むが指数識別子を含まない数値の文字列。 p は精度を表し、 s は文字列が表す10進数のスケールを表します。 最初の文字には、プラス(&plus;)またはマイナス(-)記号を使用できます。
- 小数点または指数識別子を含まない数値の文字列。 最初の文字には、プラス(&plus;)またはマイナス(-)記号を使用できます。 表示される数は-9223372036854775808未満または9223372036854775807を超えています。
- Float -科学表記法で数値を表す文字列。 文字列は、一連の数値とそれに続く指数識別子(Eまたはeの後にオプションのプラス(&plus;)またはマイナス(-)記号と一連の数値)で構成されます。 文字列はプラス(&plus;)またはマイナス(-)記号で始めることができます。
それでは、さまざまな*数字で利用可能な方法*を見てみましょう。
Sr.No. | Methods available for Numbers |
---|---|
1 |
このメソッドは、入力番号の絶対値を返します。 |
2 |
このメソッドは、数値のリストから最大値を返します。 |
3 |
このメソッドは、数値のリストから最小値を返します。 |
4 |
このメソッドは、ランダムに生成された数値を返します。 |
5 |
数値が0より大きい場合は1、数値が0の場合は0、数値が0より小さい場合は-1を返します。 |
6 |
このメソッドは、数値を切り捨てます。 |
Rexx-文字列
Rexxの文字列は、一連の文字で表されます。 次のプログラムは、文字列の例です-
/*Main program*/
a = "This is a string"
say a
上記のプログラムの出力は次のとおりです-
This is a string
Rexxで文字列に使用できるいくつかのメソッドについて説明します。
Sr.No. | Methods available in Rexx for Strings |
---|---|
1 |
このメソッドは、文字列の左から一定数の文字を返します。 |
2 |
このメソッドは、文字列の右側から一定数の文字を返します。 |
3 |
このメソッドは、文字列の文字数を返します。 |
4 |
このメソッドは、文字を逆形式で返します。 |
5 |
このメソッドは2つの文字列を比較します。 「string1」と「string2」が同一の場合、「0」を返します。 それ以外の場合、一致しない最初の文字の位置を返します。 |
6 |
このメソッドは、 string n 回コピーします。 |
7 |
このメソッドは、特定の文字列からサブ文字列を取得します。 |
8 |
このメソッドは、ある文字列の別の文字列内の位置を返します。 |
9 |
このメソッドは、文字列内からサブ文字列を削除します。 |
Rexx-関数
Rexxのコードは通常、関数とサブルーチンに分けられます。 関数を使用すると、コードをより多くの論理ユニットに分離できます。 これらの機能を詳しく見てみましょう。
関数を定義する
関数宣言の構文は次のとおりです-
FunctionName:
PARSE ARG arguement1, arguement2… arguementN
Return value
どこで、
- FunctionName -これは関数に割り当てられた名前です。
- PARSE ARG -これらは、パラメーターが関数に渡されることを示すために使用されるRexxのキーワードです。
- arguement1、arguement2…arguementN -これらは関数に渡される引数です。
- 戻り値-これは関数によって返される値です。
次のプログラムは、Rexxでの関数の使用方法の簡単な例です。
/*Main program*/
say add(5,6)
exit
add:
PARSE ARG a,b
return a + b
上記のプログラムについては、次のことに注意する必要があります-
- 2つのパラメーターaとbを受け入れるaddという関数を定義しています。
- 関数はreturnステートメントを使用して、aとbの合計を返します。
- メインプログラムの終了を示すには、exitステートメントを使用する必要があります。
上記のプログラムの出力は次のようになります-
11
引数の使用
Rexxには、引数を処理するために作成できる特定の関数があります。 そのような議論をいくつか見てみましょう。
arg
このメソッドは、関数に定義された引数の数を返すために使用されます。
構文-
arg()
パラメータ-なし
戻り値-このメソッドは、関数に定義された引数の数を返します。
例-
/*Main program*/
say add(5,6)
exit
add:
PARSE ARG a,b
say arg()
return a + b
出力-上記のプログラムを実行すると、次の結果が得られます。
2
11
arg(インデックス)
このメソッドは、特定の位置にある引数の値を返すために使用されます。
構文-
arg(index)
パラメータ-
- Index -返される引数のインデックス位置。
戻り値-このメソッドは、特定の位置にある引数の値を返します。
例-
/*Main program*/
say add(5,6)
exit
add:
PARSE ARG a,b
say arg(1)
return a + b
出力-上記のプログラムを実行すると、次の結果が得られます。
5
11
再帰関数
再帰的な関数またはルーチンは、それ自体を呼び出すものです。 再帰関数は、従来の非再帰的な方法で(または反復的に)コード化できますが、再帰がより優れた問題解決策を提供する場合があります。 すべてのプログラミング言語が再帰をサポートしているわけではありません。 Rexxがします。
Rexxで再帰関数を使用する有名な階乗プログラムの例を見てみましょう。
/*Main program*/
do n = 1 to 5
say 'The factorial of' n 'is:' factorial( n )
end
return
/*Function to get factorial*/
factorial : procedure
n = arg(1)
if n = 1 then
return 1
return n * factorial( n - 1 )
上記のプログラムの出力は次のとおりです-
The factorial of 1 is: 1
The factorial of 2 is: 2
The factorial of 3 is: 6
The factorial of 3 is: 24
The factorial of 3 is: 120
Rexx-スタック
スタックは外部データキューと呼ばれることもありますが、一般的な使用法に従い、スタックと呼びます。 Rexxの論理的に外部にあるメモリブロックです。 プッシュやキューなどの命令はデータをスタックに配置し、プルやプルなどの命令はスタックからデータを抽出します。 キューに組み込まれた組み込み関数は、スタックにあるアイテムの数を報告します。
スタックの例を見てみましょう。
/*STACK:*/
/* */
/*This program shows how to use the Rexx Stack as either a*/
/*stack or a queue.*/
do j = 1 to 3
push ‘Stack: line #’ || j
/*push 3 lines onto the stack*/
end
do j = 1 to queued()
/*retrieve and display LIFO*/
pull line
say line
end
do j = 1 to 3 queue ‘Queue: line #’ || j
/*queue 3 lines onto the stack*/
end
do queued()
/*retrieve and display FIFO*/
pull line
say line
end
exit 0
プログラムの最初のdoループは、3行のデータをスタックに配置します。 これを行うには、プッシュ命令を使用します。 行に番号を付けて、LIFO順序で取得したときに順序が明確になるようにします。
プッシュ命令によってスタックに配置されたアイテムは、LIFOの順序で取得されます-
do j = 1 to 3
push ‘Stack: line #’ || j /*push 3 lines onto the stack*/
end
次のコードブロックは、スタック上のすべての行を取得するためのループだけでなく、スタック上の行の数を発見するためにキューイングされた組み込み関数の使用を示しています-
do j = 1 to queued() /*retrieve and display LIFO*/
pull line
say line
end
3つのアイテムはプッシュによってスタックに配置されたため、LIFOの順序で取得されます。
上記のプログラムの出力は次のようになります。
STACK: LINE #3
STACK: LINE #2
STACK: LINE #1
Rexx-ファイルI/O
Rexxは、I/Oを操作するときに多くのメソッドを提供します。 Rexxは、ファイルに次の機能を提供するための簡単なクラスを提供します。
- ファイルを読む
- ファイルへの書き込み
- ファイルがファイルかディレクトリかを確認する
Rexx for File I/Oで使用可能な機能は、行入力と文字入力の両方に基づいており、両方で使用可能な機能について詳しく見ていきます。
Rexxが提供するファイル操作のいくつかを見てみましょう。 これらの例の目的のために、次のテキスト行を含む NewFile.txt というファイルがあると想定します-
- 例1 *
- 例2 *
- 例3 *
このファイルは、次の例で読み取りおよび書き込み操作に使用されます。 ここでは、ファイルの内容をさまざまな方法で読み取る方法について説明します。
ファイルの内容を一度に1行ずつ読み取る
ファイルに対する一般的な操作は、Rexxライブラリ自体で使用可能なメソッドを使用して実行されます。 ファイルの読み取りは、Rexxのすべての操作の中で最も単純です。
これを実現するために使用される関数を見てみましょう。
リネン
このメソッドは、テキストファイルから行を返します。 テキストファイルは、関数への入力パラメーターとして提供されるファイル名です。
構文-
linein(filename)
パラメータ-
- filename -これは、行を読み取る必要があるファイルの名前です。
戻り値-このメソッドは、一度に1行のファイルを返します。
例-
/*Main program*/
line_str = linein(Example.txt)
say line_str
上記のコードは、 Example.txt ファイル名がlinein関数に提供されるという点で非常に単純です。 次に、この関数はテキストの行を読み取り、結果を変数 line_str に提供します。
出力-上記のプログラムを実行すると、次の結果が得られます。
Example1
ファイルの内容を一度に読み取る
Rexxでは、whileステートメントを使用して、ファイルのすべてのコンテンツを読み取ることができます。 whileステートメントは、ファイルの最後に到達するまで、各行を1行ずつ読み取ります。
これを実現する方法の例を以下に示します。
/*Main program*/
do while lines(Example.txt) > 0
line_str = linein(Example.txt)
say line_str
end
上記のプログラムでは、次のことに注意する必要があります-
- lines関数は Example.txt ファイルを読み取ります。
- while関数は、Example.txtファイルにさらに行が存在するかどうかを確認するために使用されます。
- ファイルから読み取られた各行について、 line_str 変数は現在の行の値を保持します。 これは、出力としてコンソールに送信されます。
出力-上記のプログラムを実行すると、次の結果が得られます。
Example1
Example2
Example3
ファイルへのコンテンツの書き込み
ファイルの読み取りと同様に、Rexxにはファイルへの書き込み機能もあります。 これを達成するために使用される関数を見てみましょう。
ラインアウト
このメソッドは、ファイルに行を書き込みます。 行の書き込み先のファイルは、lineoutステートメントのパラメーターとして提供されます。
構文-
lineout(filename)
パラメータ-
- ファイル名-これは、行を書き込む必要があるファイルの名前です。
戻り値-このメソッドは、ラインアウト関数のステータスを返します。 行が正常に書き込まれた場合、返される値は0です。それ以外の場合、値1が返されます。
例-
/*Main program*/
out = lineout(Example.txt,"Example4")
出力-上記のコードが実行されるたびに、行「Example4」がファイル Example.txt に書き込まれます。
Rexx-ファイルの機能
この章では、ファイルに使用できる他の機能のいくつかについて説明します。
Sr.No. | Functions for Files |
---|---|
1 |
この関数は、値1または入力ストリームで読み取るために残っている行数を返します。 ファイル名は、関数への入力として与えられます。 |
2 |
この関数は、ファイルのステータスを確認するために使用されます。 使用する前にファイルのステータスを確認する必要がある場合があります。 ファイルが破損しているか使用できない場合、ファイルに対してそれ以上の操作は実行できません。 そのため、最初にファイルのステータスを確認する方が理にかなっています。 |
3 |
この関数は、ファイルから一度に1文字を読み取るために使用されます。 時々、プログラムはファイルを文字単位で読み取る必要があるため、この機能はこの目的に使用できます。 |
4 |
この関数は、1またはファイル自体で読み取るために残っている文字数を返します。 ファイル名は、関数のパラメーターとして記載されています。 |
5 |
この関数は、一度に1文字をファイルに書き込むために使用されます。 ファイル名は、関数のパラメーターとして入力されます。 |
Rexx-サブルーチン
どのプログラミング言語でも、プログラム全体は論理モジュールに分割されます。 これにより、簡単に保守できるコードを作成しやすくなります。 これは、プログラミング言語の基本的な要件です。
Rexxでは、サブルーチンと関数を使用してモジュールを作成できます。 サブルーチンを詳しく見てみましょう。
サブルーチンの定義
関数宣言の構文は次のとおりです-
FunctionName:
Statement#1
Statement#2
….
Statement#N
どこで、
- FunctionName -これはサブルーチンに割り当てられた名前です。
- *ステートメント#1 .. Statement#N *-これらは、サブルーチンを構成するステートメントのリストです。
次のプログラムは、サブルーチンの使用を示す簡単な例です。
/*Main program*/
call add
exit
add:
a = 5
b = 10
c = a + b
say c
上記のプログラムについては、次のことに注意する必要があります-
- add というサブルーチンを定義しています。
- このサブルーチンは、単純な追加機能を実行します。
- メインプログラムの終了を示すには、exitステートメントを使用する必要があります。
上記のプログラムの出力は次のようになります-
15
引数の使用
Rexxの引数を使用することもできます。 次の例は、これを実現する方法を示しています。
/*Main program*/
call add 1,2
exit
add:
PARSE ARG a,b
c = a + b
say c
上記のプログラムについては、次のことに注意する必要があります-
- 2つのパラメーターをとるaddというサブルーチンを定義しています。
- サブルーチンでは、2つのパラメーターがPARSEおよびARGキーワードを使用して解析されます。
上記のプログラムの出力は次のようになります-
3
引数のさまざまなメソッド
引数に使用できる他のメソッドを見てみましょう。
arg
このメソッドは、サブルーチンに定義された引数の数を返すために使用されます。
構文-
arg()
パラメータ-なし
戻り値-このメソッドは、サブルーチンに定義された引数の数を返します。
例-
/*Main program*/
call add 1,2
exit
add:
PARSE ARG a,b
say arg()
c = a + b
say c
上記のプログラムを実行すると、次の結果が得られます。
2
3
arg(インデックス)
このメソッドは、特定の位置にある引数の値を返すために使用されます。
構文-
arg(index)
パラメーター
- Index -返される引数のインデックス位置。
戻り値-このメソッドは、特定の位置にある引数の値を返します。
例-
/*Main program*/
call add 1,2
exit
add:
PARSE ARG a,b
say arg(1)
c = a + b
say c
上記のプログラムを実行すると、次の結果が得られます。
1
3
Rexx-組み込み関数
すべてのプログラミング言語には、プログラマが日常的なタスクを実行するのに役立つ組み込み関数がいくつかあります。 Rexxには多くの組み込み関数もあります。
Rexxで利用可能なこれらの機能をすべて見てみましょう。
Sr.No. | Functions available in Rexx |
---|---|
1 |
このメソッドは、Rexxコマンドが現在実行されている環境の名前を返します。 |
2 |
このメソッドは、特定の周波数と持続時間でシステムにサウンドを生成します。 |
3 |
このメソッドは、入力が有効な数値の場合は「NUM」の値を返し、それ以外の場合は「CHAR」の値を返します。 入力値をNUM値またはCHAR値と比較するかどうかも指定できます。 いずれの場合も、返される値は結果に応じて1または0になります。 |
4 |
このメソッドは、ローカル日付を次の形式で返します。 |
5 |
このメソッドは、現在のシステムで定義されているNUMERIC DIGITSの現在の設定を返します。 |
6 |
このメソッドは、エラー番号「errorno」に関連付けられたRexxエラーメッセージを返します。 エラー番号は0〜99の値である必要があることに注意してください。 これは、プログラムがエラーコードを返し、エラーコードの意味を知りたい場合に役立ちます。 |
7 |
このメソッドは、システムで数学計算を行うために使用される「NUMERIC FORM」の現在の設定を返します。 |
8 |
このメソッドは、次のプログラムに示すように、現地時間を24時間形式で返します。 |
9 |
このメソッドは、システムにログインしている現在のユーザーIDを返します。 |
10 |
このメソッドは、開始文字と終了文字で指定された範囲内の文字を返します。 |
11 |
このメソッドは、* hexstring値*の10進変換を返します。 |
12 |
このメソッドは、16進文字列値の文字変換を返します。 |
Rexx-システムコマンド
Rexxの最大の利点の1つは、再利用可能なスクリプトを作成できることです。 多くの場合、最近の組織では、再利用可能なスクリプトを使用することは、一般的な反復タスクを実行する時間を節約する上で大きな価値です。
たとえば、IT組織のテクノロジーチームは、一般的な日常タスクを実行するスクリプトを用意する必要があります。 これらのタスクには、オペレーティングシステムとの対話が含まれます。 これらのスクリプトは、不良なリターンコードまたはエラーを処理するようにプログラムできます。
Rexxは、このような反復タスクを実行するために使用できる多くのシステムコマンドを提供します。 Rexxで使用できるシステムコマンドの一部を見てみましょう。
dir
これは、Windowsで使用される通常のディレクトリ一覧コマンドです。
構文
dir
パラメーター
None
戻り値
このメソッドは、システム上の現在のディレクトリリストを返します。
例
/*Main program*/
dir
出力は、システム内のディレクトリに依存します。
次のプログラムは単なる例です。
出力
Volume in drive D is LENOVO
Volume Serial Number is BAC9-9E3F
Directory of D:\
04/06/2016 12:52 AM 268,205 100008676689.pdf
10/20/2015 08:51 PM <DIR> data
06/01/2016 10:23 AM 31 Example.txt
10/28/2014 06:55 PM <DIR> Intel
06/02/2016 11:15 AM 23 main.rexx
12/22/2014 08:49 AM <DIR> PerfLogs
12/13/2015 11:45 PM <DIR> Program Files
12/24/2015 10:26 AM <DIR> Program Files (x86)
07/17/2015 01:21 AM <DIR> Users
12/23/2015 10:01 AM <DIR> Windows
3 File(s) 268,259 bytes
7 Dir(s) 202,567,680 bytes free
- dirコマンド*の別の例を次のプログラムに示します。 今回だけ、*特別なrc変数*を使用しています。 この変数はRexxで特別であり、システムコマンドの実行ステータスを示します。 返される値が0の場合、コマンドが正常に実行されていることを意味します。 それ以外の場合、エラー番号はrc変数名で指定されます。
例
/*Main program*/
dir
if rc = 0 then
say 'The command executed successfully'
else
say 'The command failed, The error code is =' rc
上記のプログラムを実行すると、次の結果が得られます。
出力
The command failed, The error code is = 127
リダイレクトコマンド
Rexxには、リダイレクトコマンドを使用する機能もあります。 Rexxでは、次のリダイレクトコマンドを使用できます。
- * <*-このコマンドは、ファイルからの入力を取り込むために使用されます。
- *> *-このコマンドは、コンテンツをファイルに出力するために使用されます。 ファイルが存在する場合、上書きされます。
- >> -コンテンツをファイルに出力するためにも使用されます。 ただし、ファイルの既存の内容を保持するために、出力はファイルの最後に追加されます。
リダイレクトコマンドの使用方法の例を見てみましょう。 次の例では、sortコマンドを使用して sortin.txt というファイルをソートしています。 ファイルからのデータはsortコマンドに送信されます。 次に、sortコマンドの出力がsortout.txtファイルに送信されます。
例
/*Main program*/
'sort <sortin.txt> sortout.txt'
ファイルsortin.txtに次のデータがあると仮定します。
出力
b
c
a
ファイル sortout.txt には、次のデータが含まれます。
a
b
c
ADDRESS関数
このメソッドは、入力ストリーム、エラーストリーム、および出力ストリームに使用されるデフォルト環境を調べるために使用されます。
構文
ADDRESS(options)
パラメーター
- 特定のシステムのアドレスのオプション。
戻り値
このメソッドは、入力、エラー、および出力ストリームの環境の名前を返します。
例
/*Main program*/
say ADDRESS('I')
say ADDRESS('O')
say ADDRESS('E')
上記のプログラムを実行すると、次の結果が得られます。
出力
INPUT NORMAL
REPLACE NORMAL
REPLACE NORMAL
Rexx-XML
XMLは、オペレーティングシステムや開発言語に関係なく、プログラマが他のアプリケーションで読み取れるアプリケーションを開発できるようにする、移植可能なオープンソース言語です。 これは、アプリケーション間でデータを交換するために使用される最も一般的な言語の1つです。
XMLとは何ですか?
拡張マークアップ言語XMLは、HTMLやSGMLによく似たマークアップ言語です。 これは、World Wide Web Consortiumによって推奨されており、オープンスタンダードとして利用できます。 XMLは、SQLベースのバックボーンを必要とせずに、少量から中量のデータを追跡するのに非常に役立ちます。
すべてのXMLコード例について、次の単純なXMLファイル movies.xml を使用して、XMLファイルを作成し、その後ファイルを読み取ります。
<collection shelf = "New Arrivals">
<movie title = "Enemy Behind">
<type>War, Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>10</stars>
<description>Talk about a US-Japan war</description>
</movie>
<movie title = "Transformers">
<type>Anime, Science Fiction</type>
<format>DVD</format>
<year>1989</year>
<rating>R</rating>
<stars>8</stars>
<description>A schientific fiction</description>
</movie>
<movie title = "Trigun">
<type>Anime, Action</type>
<format>DVD</format>
<year>1986</year>
<rating>PG</rating>
<stars>10</stars>
<description>Vash the Stam pede!</description>
</movie>
<movie title = "Ishtar">
<type>Comedy</type>
<format>VHS</format>
<year>1987</year>
<rating>PG</rating>
<stars>2</stars>
<description>Viewable boredom </description>
</movie>
</collection>
入門
デフォルトでは、xml機能はRexxインタープリターに含まれていません。 RexxでXMLを使用するには、次の手順に従う必要があります。
- 次のファイルをダウンロードします−
- Rexxxml-http://www.interlog.com/ptjm/[www.interlog.com/ptjm/]
- Libxml2-http://ctindustries.net/libxml/[www.ctindustries.net/libxml/]
- iconv-1.9.2.win32-http://xmlsoft.org/sources/win32/oldreleases/[www.xmlsoft.org/sources/win32/oldreleases/]
- libxslt-1.1.26.win32-http://xmlsoft.org/sources/win32/oldreleases/[www.xmlsoft.org/sources/win32/oldreleases/]
- すべてのファイルを抽出し、それらがシステムパスに含まれていることを確認します。
XML関数の読み込み
上記のセクションのすべてのファイルがダウンロードされ、正常に登録されたら、次のステップは、Rexx XML関数をロードするコードを記述することです。 これは、次のコードで実行されます。
rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs')
if rcc then do
say rxfuncerrmsg()
exit 1
end
call xmlloadfuncs
上記のプログラムについては、次のことに注意することができます-
- 関数 rxfuncadd は、外部ライブラリをロードするために使用されます。 xmlloadfuncs 関数は、 rexxxml ファイル内のすべてのライブラリをメモリにロードするために使用されます。
- rcc <> 0の値の場合、エラーになります。 このために、 rxfuncerrmsg を呼び出して、エラーメッセージの詳細を提供できます。
- 最後に xmlloadfuncs を呼び出して、Rexxプログラムですべてのxml関連機能を有効にできるようにします。
RexxでXMLに使用できるさまざまな*メソッドを見てみましょう。
xmlVersion
このメソッドは、システムで使用されているXMLおよびXSLTライブラリのバージョンを返します。
構文
xmlVersion()
パラメーター
None
戻り値
このメソッドは、システムで使用されているXMLおよびXSLTライブラリのバージョンを返します。
例
rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs')
if rcc then do
say rxfuncerrmsg()
exit 1
end
call xmlloadfuncs
say xmlVersion()
上記のプログラムを実行すると、次の結果が得られます。 これも、システムで使用されているXMLライブラリのバージョンに依存します。
出力
1.0.0 20631 10126
xmlParseXML
この関数は、関数に送信されたXMLデータを解析するために使用されます。 ドキュメントツリーは、関数によって返されます。
構文
xmlParseXML(filename)
パラメーター
- ファイル名-これは解析する必要があるXMLファイルの名前です。
戻り値
ドキュメントツリーは、関数によって返されます。 エラーがある場合、Elseは0を返します。
例
rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs')
if rcc then do
say rxfuncerrmsg()
exit 1
end
call xmlloadfuncs
say xmlVersion()
sw = xmlParseXML('test.xml')
出力
一般的な出力はありません。
xmlFindNode
このメソッドは、渡された* XPath式*を評価します。 これは、ドキュメントツリーを解析して、 nodeset を生成し、さらに処理できるようにするために使用されます。
構文
xmlParseXML(XPath,document)
パラメーター
- XPath -これは、xmlファイル内のノードのパスです。
- document -このXMLドキュメント
戻り値
XPath式を評価し、後で使用できるノードセットとして結果を返します。
例
rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs')
if rcc then do
say rxfuncerrmsg()
exit 1
end
call xmlloadfuncs
say xmlVersion()
document = xmlParseXML('test.xml')
nodeset = xmlFindNode('//movie', document)
say xmlNodesetCount(nodeset)
上記のプログラムを実行すると、次の結果が得られます。
出力
4
出力は、xmlリスト内のムービーノードの数を示しています
xmlEvalExpression
以下のメソッドは、XPath式を評価し、結果として文字列を返すために使用されます。
構文
xmlParseXML(XPath,Node)
パラメーター
- XPath -これは、xmlファイル内のノードのパスです。
- document -特定のノード要素。
戻り値
送信されたXPath式に基づいて文字列が返されます。
例
rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs')
if rcc then do
say rxfuncerrmsg()
exit 1
end
call xmlloadfuncs
document = xmlParseXML('test.xml')
nodeset = xmlFindNode('//movie', document)
do j = 1 to xmlNodesetCount(nodeset)
value = xmlEvalExpression('type', xmlNodesetItem(nodeset, j))
say value
end
上記のプログラムを実行すると、次の結果が得られます。
出力
War, Thriller
Anime, Science Fiction
Anime, Action
Comedy
Rexx-レジーナ
Reginaは、Rexxプログラムのコンパイルと実行に使用できる別のRexxインタープリターです。 レジーナの公式サイトは-http://regina-rexx.sourceforge.net/[www.regina-rexx.sourceforge.net/]です。
レジーナを使用する利点のいくつかは次のとおりです-
- Reginaは、Windows、Linux、Mac OSのいずれのプラットフォームでも実行できます。
- Reginaは、利用可能なすべての標準に従って機能します。
- レジーナには大きなコミュニティがあり、したがって、レジーナで利用できるフォーラムや学習資料がたくさんあります。
- Reginaには、Rexxプログラムの作成とテストに使用できる多くのツールがあります。
- Reginaでは、デフォルトのRexxインタープリターでは不可能なコマンドを実行できます。 たとえば、特定の構成設定を含めると、基本的なシステムレベルのコマンドを実際に実行できますが、これはRexxでは不可能です。
- 第2章– Rexx環境*に記載されているインストールを介してRexxをインストールすると、Reginaインタープリターがインストールされます。
次に、Reginaを使用するときに利用できる一般的な方法のいくつかを見てみましょう。 これらの機能は、通常の使用では利用できない拡張機能です。
拡張機能を利用するには、次のコード行を含める必要があります。 これにより、Regina拡張機能を使用できるようになります。
options arexx_bifs
次に、すべてのRexxプログラムを実行しながら、次のコマンドを使用します。
regina main.rexx
どこ、
- regina -これは、Rexxプログラムに使用されるインタープリターです。
- main.rexx -Rexxプログラム。
ここで、Regina Rexx Interpreter *のさまざまな機能について詳しく説明します。
Sr.No. | Functions of Regina Rexx Interpreter |
---|---|
1 |
このメソッドは、バイナリ値を文字列値に変換するために使用されます。 |
2 |
このメソッドは、2ビット文字列をビットごとに比較するために使用されます。 |
3 |
このメソッドは、ビット文字列内の指定されたビットの状態を示すために使用されます。 |
4 |
このメソッドは、文字列が別の文字列で最初に出現する場所を検索するために使用されます。 |
5 |
このメソッドは、システム上の環境変数の値を返します。 |
6 |
このメソッドは、現在実行中のプロセスIDの値を取得するために使用されます。 |
7 |
このメソッドは、文字列のハッシュ属性を10進数として返します。 また、文字列の内部ハッシュ値も更新します。 |
8 |
このメソッドは、長さの値に基づいて文字列の値を調整またはトリミングするために使用されます。 |
9 |
このメソッドは、環境変数の値を設定するために使用されます。 |
10 |
このメソッドは、システム上の現在のディレクトリの値を取得します。 |
11 |
このメソッドは、システム上の現在の作業ディレクトリの値を変更します。 |
12 |
このメソッドは、0〜1の擬似乱数を返します。 |
Rexx-解析
Rexxの最も強力な機能の1つは、テキスト値を解析する機能です。 他のプログラミング言語ではおそらくこれを見ないでしょう。
解析文の一般的な形式は次のとおりです-
構文
PARSE {UPPER|LOWER|CASELESS} source {template}
どこ、
- UPPER -ソースは解析前に大文字に変換されます。
- LOWER -ソースは解析前に小文字に変換されます。
- CASELESS -このパラメーターが渡されると、大文字と小文字は無視されます。
- source -これは解析する必要があるソースです。 これのために利用可能な多くのオプションがあり、次のいずれかになることができます-
- ARG -プログラムまたはプロシージャの引数をソースとして使用できます。
- LINEIN -次の行入力をソースとして使用できます。
- SOURCE -プログラムのソース情報をソースとして使用できます。
- VAR name -変数名の値をソースとして使用できます。
- template -このパラメータは、ソースの解析方法を指定します。 これには多くのオプションがあります。 それらのいくつかを以下に示します。
- 変数名-これは変数に割り当てられた値です。
- リテラル文字列-ひもを分割するパターンを使用できるリテラル文字列。
- #-ソース自体内の絶対文字位置。 したがって、値5を指定すると、5 ^ th ^文字が使用されます。
- &plus;#-ソース自体の中の相対的な文字位置。 したがって、5の値を指定すると、5 ^ th ^文字が比較的使用されます。
Rexxで構文解析を行う方法の簡単な例を見てみましょう。
例
/*Main program*/
parse value 'This is a Tutorial' with word1 word2 word3 word4
say "'"word1"'"
say "'"word2"'"
say "'"word3"'"
say "'"word4"'"
上記のプログラムは、フレーズ内の単語を解析します。 値が1つのスペースのみで区切られた単語で構成され、先頭または末尾のスペースがない場合、値は次のように既知の数の単語に簡単に解析されます。
Rexxでは、解析関数を使用して文字列値を取得し、それらを単語に分解します。 上記の例では、単語が分割され、単語変数に保存されます。
上記のプログラムの出力は次のようになります-
'This'
'is'
'a'
'Tutorial'
解析の別の例を次のプログラムに示します。 今回は、解析を行うためにwhile句を使用しています。
例
/*Main program*/
phrase = 'This is a Tutorial'
do while phrase <> ''
parse var phrase word phrase
say "'"word"'"
end
上記のプログラムは、次の出力を提供します-
'This'
'is'
'a'
'Tutorial'
位置解析
Rexxを使用すると、位置解析を行うこともできます。 parseステートメントを使用して位置解析を実現する方法の例を見てみましょう。
例
/*Main program*/
testString = "Doe John M. 03/03/78 Mumbai India";
parse var testString name1 11 name2 21 birthday 31 town 51 country
say name1
say name2
say birthday
say town
say country
上記の例から、変数名とともに、文字列の終了位置も指定していることに注意してください。 したがって、name1の場合、11文字目で終了し、name2の解析を開始する必要があります。
上記のプログラムの出力は次のようになります-
Doe
John M.
03/03/78
Mumbai
India
この場合、*相対位置解析*を使用することもできます。
例
/*Main program*/
testString = "Doe John M. 03/03/78 Mumbai India";
parse var testString name1 +10 name2 +10 birthday +10 town +20 country
say name1
say name2
say birthday
say town
say country
上記のプログラムの出力は次のようになります。
Doe
John M.
03/03/78
Mumbai
India
Rexx-シグナル
Rexxでは、信号命令は一般的に2つの目的のために使用されます-
- 1つは、プログラムの別の部分に制御を移すことです。 これは通常、他のプログラミング言語で使用されるgo-toラベルのようなものです。
- もう1つは、特定のトラップラベルに移動することです。
signalコマンドが次の命令コマンドのいずれかで使用されている場合、保留中の制御構造は自動的に無効になります。
- もし… それで… それ以外の場合
- 行う … end
- i = 1からn … end [および同様のdoループ]
- いつ選択するか… それで… …等。 さもないと … end
信号文の一般的な構文は次のように示されています-
構文
signal labelName
signal [ VALUE ] labelExpression
シグナルステートメントの使用方法の例を見てみましょう。
例
/*Main program*/
n = 100.45
if \ datatype( n, wholenumber ) then
signal msg
say 'This is a whole number'
return 0
msg :
say 'This is an incorrect number'
上記のプログラムの出力は次のようになります。
出力
This is an incorrect number.
次のプログラムに示すように、変数nの値を整数に変更した場合-
/*Main program*/
n = 100
if \ datatype( n, wholenumber ) then
signal msg
say ' This is a whole number '
return 0
msg :
say ' This is an incorrect number '
あなたは次の出力を取得します-
This is a whole number
次のプログラムに示すように、ラベルの値に転送することもできます-
/*Main program*/
n = 1
if \ datatype( n, wholenumber ) then
signal msg
if n < 1 | n > 3 then
signal msg
signal value n
3 : say 'This is the number 3'
2 : say ' This is the number 2'
1 : say ' This is the number 1'
return n
msg :
say ' This is an incorrect number '
exit 99
上記のプログラムの出力は次のように表示されます-
This is the number 1
トラップラベル転送の有効化/無効化
前述したように、シグナル命令を使用して、制御をトラップラベルに転送することもできます。
トラップラベル転送の一般的な構文は次のとおりです-
構文
signal ON conditionName [ NAME Label ]
signal OFF conditionName
どこで、
- conditionName -これは、信号をオンまたはオフにする条件です。
- Label -プログラムの宛先となるオプションのラベル。
トラップラベル転送の使用例を見てみましょう。
例
/*Main program*/
signal on error
signal on failure
signal on syntax
signal on novalue
beep(1)
signal off error
signal off failure
signal off syntax
signal off novalue
exit 0
error: failure: syntax: novalue:
say 'An error has occured'
上記の例では、最初にエラー信号をオンにします。 次に、エラーになるステートメントを追加します。 次に、カスタムエラーメッセージを表示するエラートラップラベルを取得します。
上記のプログラムの出力は次のようになります-
An error has occurred.
Rexx-デバッグ
デバッグは、プログラミング言語の重要な機能です。 開発者がエラーを診断し、根本原因を見つけて、それに応じて解決するのに役立ちます。 Rexxでは、トレースユーティリティがデバッグに使用されます。 トレース命令は、2つの方法で実装できます。1つはバッチモードで、もう1つはインタラクティブモードです。 両方のオプションを実装する方法を見てみましょう。
バッチモードでのトレース
traceコマンドは、実行される各Rexxコマンドの詳細レベルを提供するために使用されます。
トレース文の一般的な構文は次のように示されています-
構文
trace [setting]
設定は、次のオプションのいずれかになることができます-
- A -すべてのコマンドをトレースします。
- C -オペレーティングシステムに送信されるホストコマンドのみをトレースします。
- E -エラーになったオペレーティングシステムに送信されるホストコマンドのみをトレースします。
- F -失敗に終わったオペレーティングシステムに送信されたホストコマンドのみをトレースします。
- I -これは、Rexxコマンドの中間レベルのトレースを提供します。
- L -このオプションは、発生時にトレースにラベルを付ける場合に使用します。
- N -これは、トレースが発生しないデフォルトのオプションです。
traceコマンドの例を見てみましょう。
例
/*Main program*/
trace A
/*Main program*/
n = 100.45 if datatype( n, wholenumber ) then signal msg
say 'This is a whole number'
return 0
msg :
say ' This is an incorrect number '
上記のプログラムの出力は次のようになります-
5 *- *n = 100.45 if datatype( n, wholenumber ) then signal msg
7* - *say 'This is a whole number
This is a whole number
8* -* return 0
出力から、プログラムの出力に追加のトレースが追加されたことがわかります。 次のことは、出力について注意することができます-
- 行番号と実行されたステートメントがトレース出力に追加されます。
- 実行される各行は、トレース出力に表示されます。
トレース機能
トレースは、トレース機能を使用して有効にすることもできます。 一般的な構文と例を以下に示します。
構文
trace()
上記の関数は、現在のトレースレベルを返します。
パラメーター
None
戻り値
上記の関数は、現在のトレースレベルを示します。
例
/*Main program*/
say trace()
/*Main program*/
n = 100.45 if datatype( n, wholenumber ) then signal msg
say 'This is a whole number'
return 0
msg :
say 'This is an incorrect number '
上記のプログラムの出力は次のようになります。
N
This is an incorrect number
Nの最初の行は、トレースが標準に設定されていることを示します。
トレース値の設定
トレースレベルは、トレース機能で設定できます。 一般的な構文と例を以下に示します。
構文
trace(travel_level)
パラメーター
- trace_level -これは、トレースレベルの設定に使用できるオプションに似ています。
戻り値
上記の関数は、現在のトレースレベルを示します。
例
/*Main program*/
say trace()
current_trace = trace('A')
say current_trace
/*Main program*/
n = 100.45 if datatype( n, wholenumber ) then
signal msg say 'This is a whole number'
return 0
msg :
say ' This is an incorrect number '
上記のプログラムの出力は次のようになります-
N
4 *- *say current_trace
N
6* - *n = 100.45
7* - *if \ datatype( n, wholenumber ) then
8* - *signal msg
12* -* say 'This is an incorrect number'
'This is an incorrect number'
インタラクティブなトレース
対話型トレースでは、プログラムの実行時にトレースが実行されます。 Visual Studio for .NetなどのIDEのように、ブレークポイントを追加して各ステートメントの実行方法を確認できます。同様に、各コード行の実行中にプログラムを確認できます。
一般的な構文は次のとおりです-
構文
trace ?options
ここで、オプションは以下に示すようにtraceコマンドの場合と同じです。
- A -すべてのコマンドをトレースします
- C -オペレーティングシステムに送信されるホストコマンドのみをトレースします。
- E -エラーになったオペレーティングシステムに送信されるホストコマンドのみをトレースします。
- F -失敗に終わったオペレーティングシステムに送信されたホストコマンドのみをトレースします。
- I -これは、Rexxコマンドの中間レベルのトレースを提供します。
- L -このオプションは、発生時にトレースにラベルを付ける場合に使用します。
- N -これは、トレースが発生しないデフォルトのオプションです。
アクティブトレースを実装する例を見てみましょう。
例
/*Main program*/
trace ?A
/*Main program*/
n = 100.45 if datatype( n, wholenumber ) then
signal msg
say 'This is a whole number'
return 0
msg : say 'This is an incorrect number'
上記のプログラムの出力は、次のプログラムのようになります。 トレースはコードの各行で停止します。次に、Enterボタンを押して次のコード行に移動する必要があります。
This is an incorrect number
+++ "LINUX COMMAND/home/cg/root/5798511/main.rex"
5 *- *n = 100.45 if datatype( n, wholenumber ) then
+++ Interactive trace. "Trace Off" to end debug, ENTER to Continue. +++
6* - *signal msg
10* - *msg :
10* -* say 'This is an incorrect number'
Rexx-エラー処理
Rexxには、他のプログラミング言語と同様に、エラー処理にも取り組む能力があります。
以下は、Rexxで見られるさまざまなエラー状態の一部です。
- ERROR -オペレーティングシステムに送信されたコマンドがエラーになった場合はいつでも発生します。
- FAILURE -これは、オペレーティングシステムに送信されるコマンドが失敗に終わるたびに発生します。
- HALT -これは通常、操作が別の操作に依存している場合に発生します。 例は、何らかの理由で入出力操作が停止されている場合です。
- NOVALUE -このイベントは、値が変数に割り当てられていない場合に発生します。
- NOTREADY -これは、操作を受け入れる準備ができていないI/Oデバイスによって発生します。
- SYNTAX -このイベントは、コードに構文エラーがある場合に発生します。
- LOSTDIGITS -このイベントは、算術演算の結果、演算中に数字が失われると発生します。
トラップエラー
エラーは、signalコマンドの助けを借りてトラップされます。 この構文と例を見てみましょう。
構文
signal on [Errorcondition]
どこで、
- Errorcondition -これは上記のエラー条件です。
例
これの例を見てみましょう。
/*Main program*/
signal on error
signal on failure
signal on syntax
signal on novalue beep(1)
signal off error
signal off failure
signal off syntax
signal off novalue
exit 0
error: failure: syntax: novalue:
say 'An error has occured'
上記の例では、最初にエラー信号をオンにします。 次に、エラーになるステートメントを追加します。 次に、カスタムエラーメッセージを表示するエラートラップラベルを取得します。
上記のプログラムの出力は次のようになります。
An error has occurred.
エラーコードの例を次のプログラムに示します。
/*Main program*/
signal on error
signal on failure
signal on syntax
signal on novalue beep(1)
exit 0
error: failure: syntax: novalue:
say 'An error has occured'
say rc
say signal
上記のプログラムの出力は次のようになります。
An error has occured
40
6
Rexx-オブジェクト指向
環境の章に従ってooRexxをインストールすると、クラスとオブジェクトを操作することもできます。 以下のコードはすべて、ooRexxインタープリターで実行する必要があることに注意してください。 通常のRexxインタープリターは、このオブジェクト指向コードを実行できません。
クラスとメソッドの宣言
クラスは、次の構文宣言で定義されます。
構文
::class classname
*classname* はクラスに付けられた名前です。
クラスのメソッドは、次の構文宣言で定義されます。
構文
::method methodname
ここで、 methodname はメソッドに付けられた名前です。
クラスのプロパティは、以下の構文宣言で定義されます。
構文
::attribute propertyname
*propertyname* は、プロパティに付けられた名前です。
例
以下は、Rexxのクラスの例です。
::class student
::attribute StudentID
::attribute StudentName
上記のプログラムについて、以下の点に注意する必要があります。
- クラスの名前は学生です。
- クラスには、StudentIDとStudentNameの2つのプロパティがあります。
ゲッターおよびセッターメソッド
GetterメソッドとSetterメソッドは、プロパティの値を自動的に設定および取得するために使用されます。 Rexxでは、属性キーワードを使用してプロパティを宣言すると、getterメソッドとsetterメソッドが既に配置されています。
例
::class student
::attribute StudentID
::attribute StudentName
上記の例では、StudentIdおよびStudentNameにGetterおよびSetterメソッドがあります。
それらの使用方法の例を、次のプログラムに示します。
/*Main program*/
value = .student~new
value~StudentID = 1
value~StudentName = 'Joe'
say value~StudentID
say value~StudentName
exit 0
::class student
::attribute StudentID
::attribute StudentName
上記のプログラムの出力は次のようになります。
1
Joe
インスタンスメソッド
- 〜new演算子*を介して、クラスからオブジェクトを作成できます。 クラスのメソッドは、次の方法で呼び出すことができます。
Object~methodname
*methodname* は、クラスから呼び出す必要のあるメソッドです。
例
次の例は、クラスからオブジェクトを作成する方法と、それぞれのメソッドを呼び出す方法を示しています。
/*Main program*/
value = .student~new
value~StudentID = 1
value~StudentName = 'Joe'
value~Marks1 = 10
value~Marks2 = 20
value~Marks3 = 30
total = value~Total(value~Marks1,value~Marks2,value~Marks3)
say total
exit 0
::class student
::attribute StudentID
::attribute StudentName
::attribute Marks1
::attribute Marks2
::attribute Marks3
::method 'Total'
use arg a,b,c
return (ABS(a) + ABS(b) + ABS(c))
上記のプログラムの出力は次のようになります。
60
複数のオブジェクトを作成する
クラスの複数のオブジェクトを作成することもできます。 次の例は、これを実現する方法を示しています。
ここでは、3つのオブジェクト(st、st1、st2)を作成し、それに応じてインスタンスメンバーとインスタンスメソッドを呼び出しています。
複数のオブジェクトを作成する方法の例を見てみましょう。
例
/*Main program*/
st = .student~new
st~StudentID = 1
st~StudentName = 'Joe'
st~Marks1 = 10
st~Marks2 = 20
st~Marks3 = 30
total = st~Total(st~Marks1,st~Marks2,st~Marks3)
say total
st1 = .student~new
st1~StudentID = 2
st1~StudentName = 'John'
st1~Marks1 = 10
st1~Marks2 = 20
st1~Marks3 = 40
total = st1~Total(st1~Marks1,st1~Marks2,st1~Marks3)
say total
st2 = .student~new
st2~StudentID = 3
st2~StudentName = 'Mark'
st2~Marks1 = 10
st2~Marks2 = 20
st2~Marks3 = 30
total = st2~Total(st2~Marks1,st2~Marks2,st2~Marks3)
say total
exit 0
::class student
::attribute StudentID
::attribute StudentName
::attribute Marks1
::attribute Marks2
::attribute Marks3
::method 'Total'
use arg a,b,c
return (ABS(a) + ABS(b) + ABS(c))
上記のプログラムの出力は次のようになります。
60
70
60
継承
継承は、あるクラスが別のクラスのプロパティ(メソッドとフィールド)を取得するプロセスとして定義できます。 継承を使用すると、情報は階層順に管理可能になります。
他のプロパティを継承するクラスは*サブクラス*(派生クラス、子クラス)と呼ばれ、プロパティが継承されるクラスは*スーパークラス*(ベースクラス、親クラス)と呼ばれます。
Rexxの継承の例を見てみましょう。 次の例では、 Person というクラスを作成しています。 そこから、サブクラスキーワードを使用して、* Studentクラス*を Person のサブクラスとして作成します。
例
/*Main program*/
st = .student~new
st~StudentID = 1
st~StudentName = 'Joe'
st~Marks1 = 10
st~Marks2 = 20
st~Marks3 = 30
say st~Total(st~Marks1,st~Marks2,st~Marks3)
exit 0
::class Person
::class student subclass Person
::attribute StudentID
::attribute StudentName
::attribute Marks1
::attribute Marks2
::attribute Marks3
::method 'Total'
use arg a,b,c
return (ABS(a) + ABS(b) + ABS(c))
上記のプログラムの出力は次のようになります。
60
Rexx-移植性
移植性は、プログラミング言語の重要な側面です。 ご存じのとおり、RexxはWindowsやLinuxなどのさまざまなオペレーティングシステムで使用できます。 そのため、Windowsプラットフォームでプログラムを開発する場合、同じプログラムがLinuxプラットフォームで実行される場合に必要な予防措置を講じることを確認する必要があります。
Rexxには、システムレベルのコマンドを実行する機能があります。 実行されているオペレーティングシステムを理解するために使用できるコマンドがあります。 出力に基づいて、適切なアクションを実行して、このオペレーティングシステムで実行できるコマンドを確認できます。
例
次の例は、解析関数を使用して、プログラムが実行されているオペレーティングシステムの詳細を取得する方法を示しています。
/*Main program*/
parse version language level date month year.
parse source system invocation filename.
language = translate(language)
if pos('REGINA',language) = 0 then
say 'Error , the default interpreter is not Regina' language
say 'The Interpreter version/release date is:' date month year
say 'The Language level is: ' level say 'The Operating System is'
select
when system = 'WIN32' then
'ver'
when system = 'UNIX' | system = 'LINUX' then
'uname -a'
otherwise
say 'Unknown System:' system
end
if rc <> 0 then
say 'Error :' rc
出力は、オペレーティングシステムによって異なります。 出力例を以下に示します。
The Interpreter version/release date: 5 Apr 2015
The Language level is: 5.00
The Operating System is
Unknown System: WIN64
Bad return code: RC
Rexx-拡張機能
Rexxは、さまざまな機能を提供する多くの拡張機能を提供します。それらのほとんどは、オペレーティングシステムとの対話を可能にします。 以下に説明するように、それらのいくつかを詳細に見てみましょう。
Sr.No. | Extended Functions |
---|---|
1 |
この関数は、バイナリ値を文字列値に変換します。 |
2 |
この関数は、バイナリ文字列の指定されたビットを0に切り替えるために使用されます。 |
3 |
この関数は、ビット0で始まる2つのバイナリ文字列を比較するために使用されます。 |
4 |
この関数は、デバッグの目的で通常使用されるスタックの内容を表示するために使用されます。 |
5 |
この関数は、文字列を暗号化するために使用されます。 |
6 |
この関数は、システムで新しい子プロセスを生成するために使用されます。 |
7 |
この関数は、現在実行中のプロセスのIDを取得します。 |
8 |
この関数は、文字列のハッシュ値を返します。 |
Rexx-手順
Rexxは、さまざまな機能を提供する多くの指示を提供します。ほとんどの指示は、オペレーティングシステムと対話できるようにします。 それらのいくつかを詳しく見てみましょう。
Sr.No. | Rexx Instructions |
---|---|
1 |
この関数は、現在のコマンド環境を表示するために使用されます。 |
2 |
この関数は、変数の割り当てを解除するために使用されます。 |
3 |
定義された命令を解釈または実行します。 |
4 |
この関数は、操作を実行しないことを意味します。 このコマンドは、通常* ifステートメント*で使用されます。 |
5 |
これは、スタックまたはデフォルトストリームから入力をプルするために使用されます。 |
6 |
これは、Rexxスタックに値をプッシュするために使用されます。 |
Rexx-実装
Rexx言語には、前の章ですでに見たように、さまざまな実装がたくさんあります。 各実装には独自の機能があります。 Rexxで利用可能なさまざまな実装を見てみましょう。
OoRexx
これは、Rexxのオブジェクト指向バージョンです。 デフォルトでは、Rexxの基本的な実装はすべて手順に基づいています。 しかし、ooRexxを使用すると、Rexxに対してオブジェクト指向のアプローチをとることにより、柔軟性を高めることができます。 ooRexxを使用すると、再利用可能なクラスとオブジェクトを作成することで、より適切に再利用できます。
次のプログラムは、ooRexxインプリメンターで実行できる単純なRexxプログラムの例です。
例
/*Main program*/
say ‘hello’
このプログラムを実行するには、次のコマンドを実行します。
rexx main.rexx
上記のコマンドを実行すると、次の出力が得られます。
hello
Netrexx
これは、Rexx言語のJavaベースの代替を提供するため、すべてのJavaベースの開発者向けです。 そのため、すべてのオブジェクトはJava Object Modelに基づいています。 このフレームワークの利点は、Javaが広く普及している言語であるため、開発者がこのフレームワークを使用しやすくなることです。 そのため、この実装では、RexxコードはJavaプログラムに変換され、任意のJava仮想マシンで実行できます。
次のコードは、NetRexxプログラムの例です。
*main.nrx* というファイルを作成し、次のコードをファイルに配置します。
/*Main program*/
say ‘hello’
コードをコンパイルするには、次のコマンドを実行します-
NetRexxC main.nrx
その後、次の出力が得られます。 NetRexxCは、Rexxプログラムを同等のJavaに変換するコンパイラです。
java -cp ";;G:\NetRexx-3.04GA\lib\NetRexxF.jar;."
-Dnrx.compiler = ecj org.netrexx.process.NetRexxC main.nrx
NetRexx portable processor 3.04 GA build 4-20150630-1657
Copyright (c) RexxLA, 2011,2015. All rights reserved.
Parts Copyright (c) IBM Corporation, 1995,2008.
Program main.nrx
Compilation of 'main.nrx' successful
これで、次のjavaコマンドを使用してjavaプログラムを実行できます。
java main
上記のコマンドを実行すると、次の出力が得られます。
Hello
ブレックス
これは、Rexxの軽量実装です。 これは、標準のRexx実装者よりも軽いパッケージです。 ただし、Rexxの完全な機能はまだあります。
次のコードは、BRexxプログラムの例です。
/*Main program*/
say ‘hello’
プログラムを実行するには、次のコマンドを実行します。
rexx32 main.rexx
上記のコマンドを実行すると、次の出力が得られます。
hello
Rexx-Netrexx
NetRexxはRexxのJava実装です。 NetRexxでは、インプリメンターを使用してRexxプログラムをJavaプログラムに変換し、任意のJava仮想マシンで実行できるようにします。
NetRexxのセットアップ
NetRexxの最初のステップは、ローカルマシンでセットアップすることです。 これを行うには、次の手順を実行する必要があります-
- ステップ1 *-NetRexxダウンロードサイトにアクセスします-http://www.netrexx.org/downloads.nsp
NetRexx.3.04.GAファイルをダウンロードします。
- ステップ2 *-システムにjavaがインストールされ、実行されていることを確認します。 java–versionコマンドを使用して、javaが実行されていることを確認できます。
出力の例を以下に示します。
H:\>java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) Client VM (build 24.79-b02, mixed mode, sharing)
- ステップ3 *-Netrexx zipファイルの内容を解凍します。 NetRexx3.04GA \ libフォルダーからjava installation/lib/etcフォルダーにファイルをコピーします。
- ステップ4 *-NetRexx-3.04GA \ binパスをシステムのパス変数に追加します。
最初のNetRexxプログラムの実行
*main.nrx* というファイルを作成し、次のコードをファイルに配置します。
/*Main program*/
say ‘hello’
コードをコンパイルするには、次のコマンドを実行します。
NetRexxC main.nrx
その後、次の出力が得られます。 NetRexxCは、rexxプログラムを同等のJavaに変換するコンパイラです。
java -cp ";;G:\NetRexx-3.04GA\lib\NetRexxF.jar;."
-Dnrx.compiler = ecj org.netrexx.process.NetRexxC main.nrx
NetRexx portable processor 3.04 GA build 4-20150630-1657
Copyright (c) RexxLA, 2011,2015. All rights reserved.
Parts Copyright (c) IBM Corporation, 1995,2008.
Program main.nrx
Compilation of 'main.nrx' successful
これで、次のjavaコマンドを使用してjavaプログラムを実行できます。
java main
上記のコマンドを実行すると、次の出力が得られます。
Hello
次に、Netrexxライブラリの特別な側面について説明します。
インデックス付き文字列
NetRexxでは、文字列は配列のインデックスになります。 例を以下に示します。
例
/*Main program*/
value = 'unknown'
value['a'] = 'b'
c = 'a'
say value[c]
上記のプログラムを実行すると、次の結果が得られます。
出力
b
複数のインデックス
NetRexxでは、配列に複数のインデックスを設定できます。 例を以下に示します。
例
/*Main program*/
value = 'null'
value['a', 'b'] = 1
say value['a', 'b']
上記のプログラムを実行すると、次の結果が得られます。
出力
1
Sr.No. | Command & Description |
---|---|
1 |
このコマンドは、デフォルトの入力ストリームから行を読み取るために使用されます。 |
2 |
このコマンドは、数字の値の現在の値を表示するために使用されます。 |
3 |
このコマンドは、フォーム値の現在の値を表示するために使用されます。 |
4 |
このコマンドは、文字列値の長さを表示するために使用されます。 |
5 |
このコマンドは、使用されているNetRexxの現在のバージョンを返すために使用されます。 |
6 |
このコマンドは、NetRexxが使用している現在のトレース設定を返すために使用されます。 |
Rexx-Brexx
BRexxは、Rexxの軽量実装です。 Rexx実装の一部として提供する多くの機能がまだあります。
BRexxのセットアップ
BRexxの最初のステップは、ローカルマシンでセットアップすることです。 これを行うには、次の手順を実行する必要があります-
- ステップ1 *-BRexxダウンロードサイトに移動します-https://ftp.gwdg.de/pub/languages/rexx/brexx/html/rxl
ダウンロードセクションに移動して、製品をダウンロードします。
- ステップ2 *-Brexx zipファイルの内容を解凍します。
- ステップ3 *-システムのパス変数にBRexx \ binパスを追加します。
- ステップ4 *-RXLIBという新しい変数を作成し、Brexxフォルダーのlibフォルダーをポイントします。
最初のBRexxプログラムの実行
*main.rexx* というファイルを作成し、次のコードをファイルに配置します。
/*Main program*/
say ‘hello’
プログラムを実行するには、次のコマンドを実行します。
rexx32 main.rexx
上記のコマンドを実行すると、次の出力が得られます。
hello
ここで、BRexxライブラリで利用できる最も一般的に使用される関数のいくつかについて説明しましょう。
Sr.No. | Functions available in the BRexx Library |
---|---|
1 |
このコマンドは、数値のアークコサイン変換を取得するために使用されます。 |
2 |
このコマンドは、数値のコサイン変換を取得するために使用されます。 |
3 |
このコマンドは、数値のサイン変換を取得するために使用されます。 |
4 |
このコマンドは、数値のアークサイン変換を取得するために使用されます。 |
5 |
このコマンドは、数値の正接変換を取得するために使用されます。 |
6 |
このコマンドは、数値のアークタンジェント変換を取得するために使用されます。 |
7 |
このコマンドは、現在の作業ディレクトリにディレクトリを作成するために使用されます。 |
8 |
このコマンドは、現在の作業ディレクトリ内のディレクトリを削除するために使用されます。 |
9 |
このコマンドは、ディレクトリ一覧全体を返すために使用されます。 |
Rexx-データベース
Rexxには、以下にリストされているさまざまなデータベースを操作する機能があります。
- HSQLDB
- オラクル
- SQLサーバー
- MySQL
- MongoDB
Rexxデータベースのすべての情報は、次のリンクをクリックすると見つかります。http://rexxsql.sourceforge.net/[https://rexxsql.sourceforge.net/]
この例では、サンプルとしてMySQL DBを使用します。 したがって、最初のステップは、RexxプログラムがSQLに応じて動作できるように、Rexx SQLサイトから必要なドライバーをダウンロードすることを確認することです。 したがって、以降の手順に従って、RexxプログラムがMySQLデータベースで動作することを確認してください。
- ステップ1 *-Rexxサイトから次のドライバーダウンロードページに移動します-https://sourceforge.net/projects/rexxsql/files/rexxsql/2.6/
- ステップ2 *-MYSQLドライバーのダウンロード-rxsql26B3_my_w32_ooRexx
- ステップ3 *-コンテンツをローカルマシンに解凍します。
- ステップ4 *-解凍したフォルダーのパスをマシンのパス変数に追加します。
後続のすべての例では、次のポインタが所定の位置にあることを確認してください-
- データベースTESTDBを作成しました。
- TESTDBにテーブルEMPLOYEEを作成しました。
- このテーブルには、FIRST_NAME、LAST_NAME、AGE、SEX、およびINCOMEフィールドがあります。
- ユーザーID「testuser」とパスワード「test123」は、TESTDBにアクセスするように設定されています。
- mysql jarファイルをダウンロードし、ファイルをクラスパスに追加したことを確認してください。
- MySQLチュートリアルを完了しました
データベース接続
データベース接続を確立するには、最初にRexxsql DLLを使用してから、SQLConnect関数を使用してデータベースへの接続を確立する必要があります。 これを実現する方法の構文と例を以下に示します。
構文
SQLConnect(cname,username,password,dbname)
パラメーター
- cname -これは接続に付ける名前です。
- username -データベースに接続するためのユーザー名。
- password -データベースに接続するためのパスワード。
- dbname -接続先のデータベーススキーマ。
戻り値
0に等しい値は、データベース接続が成功したことを意味します。
例
/*Main program*/
Call RxFuncAdd 'SQLLoadFuncs', 'rexxsql', 'SQLLoadFuncs'
Call SQLLoadFuncs
say SQLConnect(c1,' testuser ',' test123','testdb')
上記のプログラムの出力は次のようになります。
0
データベーステーブルの作成
データベースに接続した後の次のステップは、データベースにテーブルを作成することです。 次の例は、Rexxを使用してデータベースにテーブルを作成する方法を示しています。 Rexx SQLのすべてのコマンドは、SQLCommand関数を使用して実行されます。
構文
SQLConnect(sname,statement)
パラメーター
- sname -これは、実行するステートメントに付ける名前です。
- ステートメント-これは、データベースに対して実行する必要があるステートメントです。
戻り値
0に等しい値は、コマンドが成功したことを意味します。
例
/*Main program*/
Call RxFuncAdd 'SQLLoadFuncs', 'rexxsql', 'SQLLoadFuncs'
Call SQLLoadFuncs
if SQLConnect(c1,'testuser','test123','testdb') == 0 then say 'Connect Succedded'
if SQLCommand(u1,"use testdb") == 0 then say 'Changed database to testdb'
sqlstr = 'create table employee (first_name char(20) not null, last_name
char(20),age int, sex
char(1), income float)'
if SQLCommand(c2,sqlstr) == 0 then say 'Employee table created'
上記のプログラムの出力は次のようになります。
Connect Succedded
Changed database to testdb
Employee table created
データベーステーブルの操作
次の種類の操作は、データベーステーブルで最も一般的に実行されます。
Sr.No. | Operation & Description |
---|---|
1 |
データベーステーブルにレコードを作成する場合に必要です。 |
2 |
任意のデータベースでの読み取り操作は、データベースからいくつかの有用な情報を取得することを意味します。 |
3 |
データベースでのUPDATE操作は、データベースですでに利用可能な1つ以上のレコードを更新することを意味します。 |
4 |
データベースから一部のレコードを削除する場合は、DELETE操作が必要です。 |
5 |
次のコマンドを使用して、データベースへの接続を閉じることができます。 |
トランザクションの実行
トランザクションは、データの一貫性を保証するメカニズムです。 トランザクションには、次の4つのプロパティがあります-
- Atomicity -トランザクションが完了するか、まったく何も起こりません。
- 一貫性-トランザクションは一貫した状態で開始し、システムを一貫した状態のままにする必要があります。
- 分離-トランザクションの中間結果は、現在のトランザクションの外部では見えません。
- 耐久性-トランザクションがコミットされると、システム障害が発生した後でも効果は持続します。
トランザクションを実装する方法の簡単な例を次に示します。
例
/*Main program*/
Call RxFuncAdd 'SQLLoadFuncs', 'rexxsql', 'SQLLoadFuncs'
Call SQLLoadFuncs
if SQLConnect(c1,'testuser','test123','testdb') == 0 then say 'Connect Succedded'
if SQLCommand(u1,"use testdb") == 0 then say 'Changed database to testdb'
sqlstr = "DELETE FROM EMPLOYEE WHERE AGE > 20"
if SQLCommand(c2,sqlstr) == 0 then
if sqlcommit() == 0 then say committed
上記のプログラムの出力は次のようになります。
Connect Succedded
Changed database to testdb
COMMITTED
コミット操作
コミット操作は、操作を続行し、データベースへのすべての変更を完了するようにデータベースに指示するものです。 上記の例では、これは次のコマンドによって実現されます。
Sqlcommit()
ロールバック操作
1つ以上の変更に満足せず、それらの変更を完全に元に戻したい場合は、ロールバックメソッドを使用します。 上記の例では、これは次のコマンドによって実現されます。
SqlRollback()
Rexx-ハンドヘルドおよび組み込みプログラミング
ハンドヘルドデバイスには大きな進歩があり、Rexxにはこれらのデバイスで実行できる多くの方法があります。 Rexxは、Pocket PC、Palmデバイス、PDA、およびその他のスマートフォンデバイスをサポートしています。 これらのプラットフォームで動作するRexxの利点は、Rexxが実際には数キロバイトのスパンで実行される軽量のプログラミングシステムであることです。 したがって、これらのデバイスでRexxプログラムを実行するのが簡単になります。
ハンドヘルドデバイスのRexxは、次のモードで実行できます-
- 最初のモードは、オペレーティングシステム自体で直接実行されるネイティブノードです。 このモードで実行する利点は、オペレーティングシステムから直接実行されるため、高速であるということです。
- 次のモードは、DOSの上にあるか、ハンドヘルドデバイスの上にあるエミュレータプログラムです。 このモードの利点は、エミュレータがそのオペレーティングシステムで実行されている限り、どのタイプのオペレーティングシステムでも実行できることです。
さまざまなハンドヘルドデバイスカテゴリのRexx通訳を以下に示します。
- Windows CE-Brexx
- Palm OS-Palm OSのRexx
- Symbian OS-レジーナ
DOSエミュレータの場合、次の手順を実行する必要があります-
- ステップ1 *-まず、人気のあるDOSエミュレーターであるPocketDOSをダウンロードします。 多くのオペレーティングシステムで実行するように設計されており、一般的なVGA画面とシリアルポートおよびパラレルポートをサポートしています。
- ステップ2 *-次のステップは、16ビットDOS用のBRexxファイルをWindows PCにダウンロードすることです。
- ステップ3 *-最後のステップは、ActiveSyncを使用してRexxプログラムを携帯デバイスに同期することです。
他にも市販のDOSベースの製品がいくつかあります。 XTMはこのカテゴリに該当する製品です。 この製品の機能は次のとおりです-
- 80186 CPUおよび命令セットのサポート。
- これは、パフォーマンスを向上させるためにBIOSコードを無効にします。
- Mathコプロセッサ、バージョン8087 MPUのエミュレーションを提供できます。
- シリアルポートへのアクセスを提供します。
- 英語、フランス語、ドイツ語などのさまざまな言語をサポートしています。
Rexx-パフォーマンス
プログラミング言語の重要な側面の1つは、アプリケーションのパフォーマンスです。 アプリケーションのパフォーマンスが妨げられないように、特別な慣行に注意する必要があります。 より良い理解のために、手順で説明されている考慮事項のいくつかを見てみましょう-
- ステップ1 *-命令数を減らしてみてください-Rexxでは、各命令にオーバーヘッドが伴います。 したがって、プログラム内の命令の数を減らすようにしてください。 再設計できる命令の例を以下に示します。
複数のif elseステートメントを使用する代わりに、parseステートメントを使用できます。 そのため、次のプログラムのように、各値にif条件を設定し、word1、word2、word3、word4の値を取得する代わりに、parseステートメントを使用します。
/*Main program*/
parse value 'This is a Tutorial' with word1 word2 word3 word4
say "'"word1"'"
say "'"word2"'"
say "'"word3"'"
say "'"word4"'"
- ステップ2 *-複数のステートメントを1つのステートメントに結合してみてください。 例を以下に示します。
- aおよびb の割り当てを行い、 proc というメソッドに渡す次のコードがあるとします。
do i = 1 to 100
a = 0
b = 1
call proc a,b
end
parseステートメントを使用して、上記のコードを次のコードに簡単に置き換えることができます。
do i = 1 for 100
parse value 0 1 with
a,
b,
call proc a,b
end
ステップ3 *-可能な限り do..toループ*を* do..forループ*に置き換えてみてください。 これは通常、制御変数がループで繰り返される場合にお勧めします。
/*Main program*/
do i = 1 to 10
say i
end
上記のプログラムは、次のプログラムに置き換える必要があります。
/*Main program*/
do i = 1 for 10
say i
end
- ステップ4 *-可能であれば、次のプログラムに示すように、doループからfor条件を削除します。 制御変数が不要な場合は、以下に示すようにdoループに終了値を入れてください。
/*Main program*/
do 10
say hello
end
ステップ5 *- select句*で、評価される最良の条件であると感じるものは何でも、* when句*に最初に置く必要があります。 したがって、次の例では、1が最も頻繁に使用されるオプションであることがわかっている場合、selectステートメントの最初の句として* when 1句*を配置します。
/*Main program*/
select
when 1 then say'1'
when 2 then say'2'
otherwise say '3'
end
Rexx-プログラミングのベストプラクティス
すべてのプログラマーは、品質と効率の点で自分のプログラムが最高のものであることを望んでいます。 以下は、これらの目標を達成するのに役立つRexxプログラムを作成する際の最良のプログラミングプラクティスまたはヒントの一部です。
ヒント1
オペレーティングシステムまたはコマンドプロンプトにコマンドを発行する前に、addressコマンドを使用します。 これにより、メモリ内のアドレススペースを事前に取得し、プログラムをより効率的に実行できます。
アドレスコマンドの例を以下に示します。
例
/*Main program*/
address system dir
コマンドの出力は次のとおりですが、システムによって異なる場合があります。
Volume in drive H is Apps
Volume Serial Number is 8E66-AC3D
Directory of H:\
06/30/2016 01:28 AM <DIR> Apps
07/05/2016 03:40 AM 463 main.class
07/07/2016 01:30 AM 46 main.nrx
07/07/2016 01:42 AM 38 main.rexx
3 File(s) 547 bytes
Dir(s) 313,085,173,760 bytes free
ヒント2
オペレーティングシステムへのすべてのコマンドが大文字であり、可能な限り引用符で囲まれていることを確認してください。
同じ例を以下に示します。
例
/*Main program*/
options arexx_bifs
say chdir('\REXXML100')
say directory()
上記のプログラムを実行すると、次の結果が得られます。
0
D:\rexxxml100
ヒント3
次のプログラムに示すように、大きなコメントブロックを作成しないでください。
例
/******/
/* */
/* */
/* */
/******/
/*Main program*/
address system dir
ヒント4
Parseステートメントを使用して、デフォルト値を割り当てます。 同じ例を以下に示します。
例
parse value 0 1 with
a,
b
ヒント5
「substr(var1,1,2)」ステートメントの代わりに、可能な限り「Left(var1,2)」ステートメントを使用します。
ヒント6
「substr(var1、length(var1)、2)」ステートメントの代わりに、可能な限り「Right(var1,2)」ステートメントを使用します。
Rexx-グラフィカルユーザーインターフェイス
Rexxで利用可能なグラフィックユーザーインターフェイスを使用するには、1つは ActiveTcl と呼ばれ、もう1つは Rexxtk パッケージと呼ばれる2つのパッケージを使用する必要があります。 これらの2つのパッケージに加えて、フォーム上のボタンやその他のコントロールを持つことができる通常のフォームを設計できます。
環境設定
最初に行うことは、環境のセットアップです。 次の手順を実行して、環境を整えましょう。
- ステップ1 *-次のWebサイトからActivetclパッケージをダウンロードします-https://www.activestate.com/activetcl
- ステップ2 *-次のステップは、ActiveTClのインストールを開始することです。 画面の[次へ]ボタンをクリックして続行します。
- ステップ3 *-ライセンス契約に同意し、[次へ]ボタンをクリックします。
- ステップ4 *-インストールの場所を選択し、次のボタンをクリックします。
- ステップ5 *-デモのインストール場所を選択し、[次へ]ボタンをクリックします。
- ステップ6 *-[次へ]ボタンをクリックして、インストールを続行します。
- ステップ7 *-[完了]ボタンをクリックして、インストールを完了します。
- ステップ8 *-次のステップは、次のリンクからRexxtkソフトウェアをダウンロードすることです-https://sourceforge.net/projects/rexxtk/
- ステップ9 *-前のステップのリンクからインストーラーファイルをダブルクリックして、インストールを開始します。 次のボタンをクリックして続行します。
- ステップ10 *-次の画面で、[はい]ボタンをクリックして、使用許諾契約に同意します。
- ステップ11 *-次の画面で、インストールの場所を選択し、[次へ]ボタンをクリックします。
- ステップ12 *-プログラムフォルダの場所を選択し、次のボタンをクリックします。
インストールが完了したら、RexxでGUIのプログラミングを開始できます。
基本プログラム
グラフィカルユーザーインターフェイス形式でRexxを使用した簡単な基本プログラムを設計する方法を見てみましょう。
例
/*Main program*/
call RxFuncAdd 'TkLoadFuncs','rexxtk','TkLoadFuncs'
call TkLoadFuncs
do forever
interpret 'Call' TkWait()
end
call TkDropFuncs
exit 0
上記のプログラムについては、次のことに注意する必要があります-
- Rexxtkライブラリとそのすべての機能は、RxFuncAddコマンドを使用してロードされます。
- do foreverループは、ウィンドウを開いたままにし、ユーザー入力を待ちます。
- ユーザー入力が検出されると、プログラムは終了します。
上記のプログラムを実行すると、次の出力が得られます。
メニューを作成する
メニューは、TkMenuおよびTkAdd関数を使用して作成されます。 これらの関数の構文は次のとおりです。
構文
TkMenu(widgetname,options,0)
パラメーター
*Widgetname* -メニューに付ける名前。
オプションは次のいずれかです-
- selectcolor -チェックボックスまたはラジオボタンがメニューオプションとして使用される場合、このオプションはメニューオプションが選択されたときに選択する色を指定します。
- ティアオフ-このオプションは、メインメニューにサブメニューを追加するために使用されます。
- title -ウィンドウにタイトルを付けるために使用する必要がある文字列。
戻り値
作成されたメニューへのハンドル。
例
/*Main program*/
call RxFuncAdd 'TkLoadFuncs','rexxtk','TkLoadFuncs'
call TkLoadFuncs
menubar = TkMenu('.m1')
filemenu = TkMenu('.m1.file','-tearoff', 0)
call TkAdd menubar, 'cascade', '-label', 'File', '-menu', filemenu
call TkAdd filemenu, 'command', '-label', 'Open...', '-rexx', 'getfile'
call TkConfig '.', '-menu', menubar
do forever
interpret 'Call' TkWait()
end
call TkDropFuncs
exit 0
上記のプログラムについては、次のことに注意する必要があります-
- メニューバーは、TkMenu関数を使用して作成されます。 「ティアオフ」パラメータは、メインメニューにアタッチするサブメニューを作成する必要があることを意味します。
- 次に、TkAdd関数を使用して、FileおよびOpenという2つのメニューオプションを追加します。
上記のプログラムを実行すると、次の出力が得られます。
Rexx-レジナルド
Reginaldは、Jeff Glanttによって開発された別のRexxインタープリターであり、Rexxプログラムの実行方法に関するいくつかのカスタマイズがあります。 このセクションでは、Reginaldのセットアップを取得し、その中でいくつかのRexxプログラムを実行する方法を説明します。
環境設定
最初のステップは、Reginaldファイルをダウンロードするための環境設定です。 これは次のWebサイトリンクから行うことができます-http://www.manmrk.net/tutorials/rexx/Reginald/win32/rxusrw32
ダウンロードが完了してインストーラーを起動すると、次の画面でインストール場所を選択できます。
[インストール]ボタンをクリックして続行します。
完了すると、Reginaldインタープリターで1つのサンプルプログラムの実行を開始できます。 次のように簡単なプログラムを作成します。
/*Main program*/
say 'Hello'
その後、次のコマンドを実行します-
RxLaunch.exe main.rexx
その後、次の出力が得られます。 このプログラムは、Reginaldインタープリターで実行されます。
利用可能な他の機能
通常のRexxコマンドとは別に、ReginaldにはWindowsオペレーティングシステム用にカスタマイズされた特定のコマンドがいくつかありました。 DriveMapはそのようなコマンドの1つです-
ドライブマップ
この関数は、ドライブに関する情報を提供します。
構文-
Drivemap(,options)
パラメータ-
オプション-これらは、ローカルコンピューターのドライブに関するさまざまな情報を取得するために使用できるキーワードのリストです。
戻り値
ドライブに関する情報を持つ文字列値。
例-
/*Main program*/
say 'Drives on system : ' DriveMap(,'FIXED')
上記のプログラムを実行すると、次の出力が得られます。 この出力はシステムによって異なります。
List of disk drives : C:\ D:\
Rexx-Webプログラミング
Rexxには、Webサーバーでも機能する機能があります。 最も一般的なのは、Apache Webサーバーです。 Apache WebサーバーでRexxwを使用するには、まず次のリンクからRexxモジュールをダウンロードする必要があります-https://sourceforge.net/projects/modrexx/?source=typ_redirect
完了したら、mod Rexxモジュールをクラスパスに追加してください。
以下の行をApache構成ファイルに追加および変更する必要があります。
次の行は、適切なの最後に追加する必要があります-
httpd.conf LoadModuleリスト。
LoadModule rexx_module modules/mod_rexx.dll
*http.conf* ファイルの最後に次の行を追加する必要があります。
AddType application/x-httpd-rexx-script .rex .rexx
AddType application/x-httpd-rexx-rsp .rsp
REXX Server Pageサポート用にこれらを追加します
RexxRspCompiler“ c:/Program Files/Apache Group/Apache2/bin/rspcomp.rex”
上記の変更を行ったら、Apache Webサーバーをシャットダウンして再起動する必要があります。
上記の行では、Javaサーバーページと同様にRexxベースのサーバーページを使用することもできます。 RexxコードをHTMLページに直接追加できます。
以下に例を示します-
<p>The current date and time is
<?rexx
/*Inserting the rexx statement*/
say date() time()
?>
</p>
Rexxベースのサーバーページが実行されると、次のことが実行されます-
- 最初に一時ファイルが作成されます。
- 次に、Rexx ServerコンパイラーはファイルをRexxプログラムにコンパイルし、一時ファイルに配置します。
- 次のステップは、Rexxプログラムを実際に実行することです。
最後に、一時ファイルが削除されます。