Rexx-クイックガイド
Rexx (Restructured Extended Executor)スクリプト言語として設計されています。その目標は、スクリプトをできるだけ簡単、高速、信頼性が高く、エラーのないものにすることです。多くのプログラミング言語は、古い言語との互換性のために設計されており、特定の対象者またはプラットフォーム向けに作成されています。Rexxは無関係な目的を無視します。初日からパワフルでありながら使いやすいように設計されました。
REXXは、20との間に自身-時間」プロジェクトとして、アセンブリ言語で設計し、最初に実装された番目の元々の言語を置き換えるために、スクリプトプログラミング言語として、1979年3月およびIBMのマイク・カウリッショウ1982年の真ん中EXEC and EXEC 2。それはmacro or scripting languageどのシステムでも。そのため、RexxはTclおよびPythonの前身と見なされています。Rexxはまた、その作成者によって、PL / Iプログラミング言語の単純化された学習しやすいバージョンになることを目的としていました。
Rexxの機能
プログラミング言語としてのRexxには、次の主要な機能があります。
単純な構文
コマンドを複数の環境にルーティングする機能
特定の呼び出し環境に関連する機能、手順、およびコマンドをサポートする機能。
ホストスタックがある場合はそれと相互運用する機能を備えた組み込みスタック。
わずか20個の命令を含む小さな命令セット
自由形式の構文
変数名を含む大文字と小文字を区別しないトークン
文字列ベース
動的データ入力、宣言なし
ローカルコンテキストを除いて、予約済みのキーワードはありません
インクルードファイル機能はありません
任意の数値精度
10進算術、浮動小数点
組み込み関数、特に文字列とワードプロセッシングの豊富な選択肢
自動ストレージ管理
クラッシュプロテクション
コンテンツアドレス可能なデータ構造
連想配列
システムコマンドと機能への直接アクセス
シンプルなエラー処理、および組み込みのトレースとデバッガー
人工的な制限はほとんどありません
簡素化されたI / O機能
Rexxの公式ウェブサイトはwww.oorexx.orgです。
Rexxでの作業を開始する前に、システムで完全に機能するバージョンのRexxが実行されていることを確認する必要があります。この章では、Rexxのインストールと、Rexxの使用を開始するためのWindowsマシンへのその後の構成について説明します。
インストールを続行する前に、次のシステム要件が満たされていることを確認してください。
システム要求
記憶 | 2 GB RAM(推奨) |
ディスクスペース | 最小要件はありません。できれば、Rexxを使用して作成されるプログラムを保管するのに十分なストレージを用意してください。 |
オペレーティングシステムのバージョン | Rexxは、Windows、Ubuntu / Debian、Mac OSXにインストールできます。 |
Rexxのダウンロード
Rexxをダウンロードするには、次のURLを使用する必要があります- https://www.oorexx.org/download.html
このページには、次のスクリーンショットに示すように、Rexxのさまざまなバージョンのさまざまなダウンロードがあります。
リリース4.2.0のヘッダーが付いた表の「ooRexxインストールファイル」をクリックします。
この後、次のページにリダイレクトされます。
クリックしてください ooRexx-4.2.0.windows.x86_64.exe ダウンロードするには 64-bitソフトウェアのバージョン。ソフトウェアのインストールについては、次の章で説明します。
以下のステップでは、RexxをWindowsシステムにインストールする方法について詳しく説明します。
Step 1−前のセクションでダウンロードしたインストーラーを起動します。インストーラーが起動したら、[実行]ボタンをクリックします。
Step 2 −次の画面で次のボタンをクリックして、インストールを続行します。
Step 3 −をクリックします I Agree ボタンをクリックして続行します。
Step 4 −受け入れる default components 次に、次のボタンをクリックします。
Step 5 −インストール場所を選択し、[次へ]ボタンをクリックします。
Step 6 −インストールされるデフォルトのプロセスを受け入れて、「次へ」ボタンをクリックします。
Step 7 −デフォルトのファイルの関連付けを選択し、[次へ]ボタンをクリックします。
Step 8 −次のスクリーンショットに示すように、Rexxアイテムを実行可能ファイルに送信するチェックボックスをクリックしてから、[次へ]ボタンをクリックします。
Step 9−次の画面で、Rexxファイルを操作するためのエディターを選択します。デフォルトオプションとしてメモ帳を保持します。また、各Rexxファイルのデフォルトの拡張子を受け入れます。
Step 10 −表示される次の画面でデフォルト設定を受け入れ、[次へ]ボタンをクリックしてインストールを続行します。
Step 11 −最後に、[インストール]ボタンをクリックして、インストールを続行します。
Step 12 −インストールが完了したら、[次へ]ボタンをクリックして先に進む必要があります。
Step 13 − [完了]ボタンをクリックして、インストールを完了します。
この章では、プラグインをにインストールする方法について説明します。 popular IDE’s (Integrated Development Environment)。プログラミング言語としてのRexxは、次のような人気のあるIDEでも利用できます。Eclipse。これらのIDEで必要なプラグインを取得する方法を見てみましょう。これにより、Rexxでの作業の選択肢が増えます。
Eclipseでのインストール
EclipseにRexxを問題なくインストールするには、以下の手順に従う必要があります。
Step 1 − Eclipseを開き、メニュー項目をクリックします。 Help → Eclipse Marketplace 次のスクリーンショットに示すように。
Step 2 −次のダイアログボックスで、検索条件にRexxと入力し、検索ボタンをクリックします。
完了したら、[インストール]ボタンをクリックします。
Step 3 − [確認]ボタンをクリックして、機能のインストールをさらに続行します。
Step 4− Eclipseは、インストールを開始するために必要なファイルをダウンロードします。完了すると、Eclipseは使用許諾契約への同意を求めます。次のスクリーンショットに示すように、使用許諾契約に同意するをクリックしてから、[完了]ボタンをクリックします。
その後、Eclipseはソフトウェアのインストールをバックグラウンドで開始します。
Step 5−おそらくセキュリティ警告が表示されます(次のスクリーンショットを参照)。[OK]ボタンをクリックして続行します。
Step 6−アップデートがインストールされると、Eclipseを再起動するように求められます。[はい]をクリックしてEclipseを再起動します。
Rexxの基本的な構文を理解するために、最初に簡単なHelloWorldプログラムを見てみましょう。
例
/* Main program */
say "Hello World"
helloworldプログラムがいかにシンプルであるかがわかります。これは、HelloWorldプログラムを実行するために使用される単純なスクリプト行です。
上記のプログラムについては、次の点に注意する必要があります。
ザ・ say command コンソールに値を出力するために使用されます。
ザ・ /* */ Rexxのコメントに使用されます。
上記のプログラムの出力は次のようになります-
Hello World
声明の一般的な形式
Rexxで、プログラムの一般的な形式を見てみましょう。次の例を見てください。
/* Main program */
say add(5,6)
exit
add:
parse arg a,b
return a + b
上記のプログラムの出力は次のようになります-
11
上記のプログラムから理解したことを見てみましょう-
Addは、2つの数値を加算するために定義された関数です。
メインプログラムでは、5と6の値がadd関数のパラメーターとして使用されます。
exitキーワードは、メインプログラムを終了するために使用されます。これは、メインプログラムと追加機能を区別するために使用されます。
追加機能は、「:」記号で区別されます。
parseステートメントは、着信引数を解析するために使用されます。
最後に、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キーワードの例は次のとおりです。WHILE in a DO instruction、 そしてその THEN (この場合、節のターミネーターとして機能します) IF or WHEN clause。
これらの場合とは別に、句の最初のトークンであり、その後に「=」または「:」が続かない単純な記号のみが、それらが命令キーワードであるかどうかを確認するためにチェックされます。記号をキーワードと見なすことなく、句の他の場所で自由に使用できます。
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で定義されているデータ型のリストです。
Integer−小数点または指数識別子を含まない数値の文字列。最初の文字はa plus (+) or minus (-) sign。表示される番号は、-2147483648から2147483647までの範囲である必要があります。
Big Integer−小数点または指数識別子を含まない数値の文字列。最初の文字は、プラス(+)またはマイナス(-)記号にすることができます。表示される番号は、-9223372036854775808から2147483648まで、または2147483648から9223372036854775807の間である必要があります。
Decimal −次のいずれかの形式になります−
小数点を含むが指数識別子を含まない数値の文字列。ザ・p 精度を表し、 s文字列が表す10進数のスケールを表します。最初の文字は、プラス(+)またはマイナス(-)記号にすることができます。
数値の文字列 does not contain a decimal pointまたは指数識別子。最初の文字は、プラス(+)またはマイナス(-)記号にすることができます。表示される番号は、-9223372036854775808未満または9223372036854775807より大きいです。
Float−科学的記数法で数値を表す文字列。文字列は、一連の数値とそれに続く指数識別子(Eまたはeとそれに続くオプションのプラス(+)またはマイナス(-)記号と一連の数値)で構成されます。文字列は、プラス(+)またはマイナス(-)記号で始めることができます。
String −通常の文字列。
以下は、各データ型の使用方法の例です。繰り返しますが、各データ型については、以降の章で詳しく説明します。これは、上記のデータ型の簡単な説明を理解するためだけのものです。
整数
数値データ型の使用方法の例を次のプログラムに示します。このプログラムは、2つの整数の加算を示しています。
Example
/* 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つの大きな整数を追加する方法を示しています。
Example
/* 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進数
次のプログラムは、10進数を処理するRexxの機能を示しています。このプログラムは、2つの10進数を追加する方法を示しています。
Example
/* 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
浮く
次の例は、数値がフロートとして機能する方法を示しています。
Example
/* 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 Pこれには3つの用語があります。ザ・tuple_size タプルのサイズを決定するために使用できるRexxで定義された組み込み関数です。
Example
/* Main program */
display("hello")
exit
display:
parse arg a
say a
上記のプログラムの出力は次のようになります-
hello
Rexxでは、すべての変数は「=」ステートメントでバインドされます。変数名は、シンボルと呼ばれることもあります。それらは、文字、数字、および 'などの文字で構成されている場合があります。. ! ? _'。作成する変数名は、数字またはピリオドで始まってはなりません。単純な変数名にはピリオドは含まれません。ピリオドを含む変数名は複合変数と呼ばれ、配列またはテーブルを表します。
以下は、前の章でも説明したRexxの変数の基本的なタイプです。
Integers−これは整数または浮動小数点数を表すために使用されます。この例は10です。
Big integers −これは大きな整数値を表します。
Decimal − 10進値は、小数点を含み、指数IDを含まない数値の文字列です。
Float − float値は、科学的記数法で数値を表す文字列です。
String −一連の文字がRexxの文字列を定義します。
さまざまなタイプの変数関数
このセクションでは、変数が実行できるさまざまな機能について説明します。
変数宣言
変数を定義する一般的な構文は次のとおりです。
var-name = var-value
どこ
var-name −これは変数の名前です。
var-value −これは変数にバインドされた値です。
次のプログラムは、変数宣言の例です。
Example
/* Main program */
X = 40
Y = 50
Result = X + Y
say Result
上記の例では、2つの変数があります。1つは X これは値にバインドされています 40 次は Y の値にバインドされています 50。Resultと呼ばれる別の変数は、X and Y。
上記のプログラムの出力は次のようになります-
90
変数の命名
変数名は、シンボルと呼ばれることもあります。それらは、文字、数字、および 'などの文字で構成されている場合があります。!?_ '。作成する変数名は、数字またはピリオドで始めてはなりません。
変数にまだ値が割り当てられていない場合、その変数は初期化されていないと呼ばれます。初期化されていない変数の値は、大文字の変数自体の名前です。
割り当てられていない変数の例は次のとおりです-
Example
/* Main program */
unassignedvalue
say unassignedvalue
上記のプログラムを実行すると、次の出力が得られます-
UNASSIGNEDVALUE
sh: UNASSIGNEDVALUE: command not found
2 *-* unassignedvalue
>>> "UNASSIGNEDVALUE"
+++ "RC(127)"
変数には、複数回値を割り当てることができます。以下のプログラムは、Xの値に複数回値を割り当てる方法を示しています。
Example
/* Main program */
X = 40
X = 50
say X
上記のプログラムの出力は次のようになります-
50
変数の印刷
変数の値は、を使用して出力されます sayコマンド。以下は、さまざまな数の変数を出力する例です。
Example
/* 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で使用可能な算術演算子です。
例を表示
オペレーター | 説明 | 例 |
---|---|---|
+ | 2つのオペランドの追加 | 1 +2は3を与えます |
− | 最初のオペランドから2番目のオペランドを減算します | 1-2は-1を与えます |
∗ | 両方のオペランドの乗算 | 2 ∗ 2は4を与えます |
/ | 分母による分子の除算 | 2/2は1を与えます |
// | 最初の数値を2番目の数値で割った余り | 3 // 2は1を与えます |
% | divコンポーネントは除算を実行し、整数コンポーネントを返します。 | 3%2は1を与えます |
関係演算子
関係演算子を使用すると、オブジェクトを比較できます。以下は、Rexxで使用可能な関係演算子です。Rexxでは、真の値は1で示され、偽の値は0で示されます。
例を表示
オペレーター | 説明 | 例 |
---|---|---|
== | 2つのオブジェクト間の同等性をテストします | 2 = 2は1を与えます |
< | 左側のオブジェクトが右側のオペランドよりも小さいかどうかを確認します。 | 2 <3は1を与えます |
= < | 左側のオブジェクトが右側のオペランド以下であるかどうかを確認します。 | 2 = <3は1を与えます |
>> | 左側のオブジェクトが右側のオペランドより大きいかどうかを確認します。 | 3> 2は1を与えます |
> = | 左側のオブジェクトが右側のオペランド以上であるかどうかを確認します。 | 3> 2は1を与えます |
論理演算子
論理演算子は、ブール式を評価するために使用されます。以下は、Rexxで使用可能な論理演算子です。
例を表示
オペレーター | 説明 | 例 |
---|---|---|
& | これは論理的な「and」演算子です | 1または1は1を与えます |
| | これは論理的な「または」演算子です | 1または0は1を与えます |
\ | これは論理的な「否定」演算子です | \ 0は1を与えます |
&& | これは論理排他的論理和演算子です | 1 && 0は1を与えます |
ビット演算子
Groovyは4つのビット演算子を提供します。以下は、Groovyで使用可能なビット演算子です。
例を表示
シニア番号 | オペレーターと説明 |
---|---|
1 | bitand これはビット単位の「and」演算子です |
2 | bitor これはビット単位の「or」演算子です |
3 | bitxor これはビット単位の「xor」または排他的論理和演算子です |
オペレーターの優先順位
次の表は、Rexx演算子の演算子の優先順位を、優先順位の高い順に示しています。
演算子 | 優先順位 |
---|---|
プレフィックス演算子 | +-\ |
足し算と引き算 | +- |
比較演算子 | = ==> <> = <= |
論理積 | & |
論理OR | | |
排他的論理和 | && |
任意のプログラミング言語の配列を使用すると、同じタイプの値のリストをグループ化できます。配列を使用すると、類似したタイプの値のリストを作成できます。sortable, searchable そしてすることができます easily manipulated。Rexxでは、配列を定義することもできます。これらの配列は、1次元または多次元にすることができます。
Rexx配列はスパースである可能性があります。つまり、すべての配列位置に値が必要なわけではなく、初期化されている必要もありません。データ要素を含む配列の間に、空の配列位置またはスロットが存在する可能性があります。または、配列が密集している場合があります。この場合、連続する配列スロットにはすべてデータ要素が含まれます。
多くのプログラミング言語では、テーブルの最初のエントリの添え字が何であるかを考慮する必要があります。最初の数字の下付き文字は0または1ですか?Rexxでは、最初の添え字は使用するものです。したがって、必要に応じて、最初の配列要素を位置0または1に入力します。
array_name.0 = ‘first element’
または
array_name.1 = ‘first element’
配列で使用できるさまざまな操作を見てみましょう。
配列の作成
配列は、Rexxの変数に使用されるのと同じ命名規則で作成されます。
配列を作成するための一般的な構文は次のとおりです。
Arrayname.index = value
どこ
Arrayname −これはアレイに提供される名前です。
Index −これは、特定の要素を参照するための配列内のインデックス位置です。
Value −これは配列内のインデックス要素に割り当てられた値です。
配列宣言の例は次のとおりです。
Example
/* 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
配列の値の表示
配列の値は、配列要素のインデックス位置を参照することで表示できます。次の例は、配列のさまざまな要素にアクセスする方法を示しています。
Example
/* 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 −これは、要素のコピー元となるソース配列です。
配列のコピー操作の実行方法の例を次のプログラムに示します。
Example
/* 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で使用可能な反復ステートメントを使用して反復することもできます。これを行う方法の例は次のとおりです-
Example
/* 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 loop 配列要素を反復処理するために使用されます。
変数 number_of_elements 配列内の要素の数を格納するために使用されます。
ザ・ variable j 配列の各要素を反復処理するために使用されます。
上記のプログラムの出力は次のようになります-
10
20
30
二次元配列
また、Rexxで多次元配列を構築できることも言及されました。2次元配列を実装する方法の例を見てみましょう。
Example
/* 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でサポートされているさまざまなループについて説明しましょう。
シニア番号 | ループの種類と説明 |
---|---|
1 | do loop ザ・ do loopは、特定の回数、複数のステートメントを実行するために使用されます。ステートメントを実行する必要がある回数は、doループに渡される値によって決まります。 |
2 | do-whileループ do-whileステートメントは、他のプログラミング言語に存在する単純なwhileループをシミュレートするために使用されます。 |
3 | do-untilループ do-untilループは、dowhileループのわずかなバリエーションです。このループは、評価される条件がfalseの場合に終了するという事実によって異なります。 |
制御された繰り返し
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
意思決定構造では、プログラマーがプログラムによって評価またはテストされる1つ以上の条件を指定する必要があります。
次の図は、ほとんどのプログラミング言語に見られる典型的な意思決定構造の一般的な形式を示しています。
条件が次のように決定された場合に実行される1つまたは複数のステートメントがあります true、およびオプションで、条件が次のように決定された場合に実行される他のステートメント false。
Rexxで利用可能なさまざまな意思決定ステートメントを見てみましょう。
シニア番号 | ステートメントと説明 |
---|---|
1 | Ifステートメント 最初の意思決定ステートメントは ifステートメント。アンif ステートメントは、ブール式とそれに続く1つ以上のステートメントで構成されます。 |
2 | If-elseステートメント 次の意思決定ステートメントはif-elseステートメントです。アンif ステートメントの後にオプションのelseステートメントを続けることができます。これは、ブール式がfalseの場合に実行されます。 |
ネストされたIfステートメント
時々持っている必要があります multiple if statements他のプログラミング言語で可能なように、互いに埋め込まれています。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 clause 評価する必要がある別の条件があり、後続のステートメントが実行されます。
elseステートメントは、前のwhen条件が実行されない場合にデフォルトステートメントを実行するために使用されます evaluate to 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には、数値に関して次のデータ型があります。
Integer−小数点または指数識別子を含まない数値の文字列。最初の文字は、プラス(+)またはマイナス(-)記号にすることができます。表示される番号は、-2147483648から2147483647までの範囲である必要があります。
Big Integer−小数点または指数識別子を含まない数値の文字列。最初の文字は、プラス(+)またはマイナス(-)記号にすることができます。表示される番号は、-9223372036854775808から2147483648まで、または2147483648から9223372036854775807の間である必要があります。
Decimal −次のいずれかの形式−
小数点を含み、指数識別子を含まない数値の文字列。ここで、 p 精度を表し、 s文字列が表す10進数のスケールを表します。最初の文字は、プラス(+)またはマイナス(-)記号にすることができます。
小数点または指数識別子を含まない数値の文字列。最初の文字は、プラス(+)またはマイナス(-)記号にすることができます。表示される番号は、-9223372036854775808未満または9223372036854775807より大きいです。
Float−科学的記数法で数値を表す文字列。文字列は、一連の数値とそれに続く指数識別子(Eまたはeとそれに続くオプションのプラス(+)またはマイナス(-)記号と一連の数値)で構成されます。文字列は、プラス(+)またはマイナス(-)記号で始めることができます。
別のを見てみましょう methods available for numbers。
シニア番号 | Numbersで利用可能なメソッド |
---|---|
1 | ABS このメソッドは、入力された数値の絶対値を返します。 |
2 | MAX このメソッドは、数値のリストから最大値を返します。 |
3 | MIN このメソッドは、数値のリストから最小値を返します。 |
4 | ランダム このメソッドは、ランダムに生成された数値を返します。 |
5 | 符号 数値が0より大きい場合は1を返し、数値が0の場合は0を返し、数値が0より小さい場合は-1を返します。 |
6 | トランク このメソッドは数値を切り捨てます。 |
Rexxの文字列は、一連の文字で示されます。次のプログラムは文字列の例です-
/* Main program */
a = "This is a string"
say a
上記のプログラムの出力は次のとおりです。
This is a string
文字列に対してRexxで使用できるいくつかのメソッドについて説明しましょう。
シニア番号 | Rexx forStringsで使用可能なメソッド |
---|---|
1 | 左 このメソッドは、文字列の左側から特定の文字数を返します。 |
2 | 正しい このメソッドは、文字列の右側から特定の文字数を返します。 |
3 | 長さ このメソッドは、文字列の文字数を返します。 |
4 | 逆行する このメソッドは、文字を逆の形式で返します。 |
5 | 比較する このメソッドは、2つの文字列を比較します。「string1」と「string2」が同一の場合は「0」を返します。それ以外の場合は、一致しない最初の文字の位置を返します。 |
6 | コピー このメソッドは、 string n 何度か。 |
7 | substr このメソッドは、特定の文字列から部分文字列を取得します。 |
8 | pos このメソッドは、ある文字列の別の文字列内の位置を返します。 |
9 | delstr このメソッドは、文字列内から部分文字列を削除します。 |
Rexxのコードは通常、関数とサブルーチンに分けられます。関数を使用すると、コードをより多くの論理ユニットに分離するのに役立ちます。これらの関数を詳しく見ていきましょう。
関数の定義
関数宣言の構文は次のとおりです-
FunctionName:
PARSE ARG arguement1, arguement2… arguementN
Return value
どこ、
FunctionName −これは関数に割り当てられた名前です。
PARSE ARG −これらは、パラメーターが関数に渡されていることを示すために使用されるRexxのキーワードです。
arguement1, arguement2… arguementN −これらは関数に渡される引数です。
Return value −これは関数によって返される値です。
次のプログラムは、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
このメソッドは、関数に定義された引数の数を返すために使用されます。
Syntax −
arg()
Parameters −なし
Return Value −このメソッドは、関数に定義された引数の数を返します。
Example −
/* Main program */
say add(5,6)
exit
add:
PARSE ARG a,b
say arg()
return a + b
Output −上記のプログラムを実行すると、次の結果が得られます。
2
11
arg(インデックス)
このメソッドは、特定の位置にある引数の値を返すために使用されます。
Syntax −
arg(index)
Parameter −
Index −返される引数のインデックス位置。
Return Value −このメソッドは、特定の位置にある引数の値を返します。
Example −
/* Main program */
say add(5,6)
exit
add:
PARSE ARG a,b
say arg(1)
return a + b
Output −上記のプログラムを実行すると、次の結果が得られます。
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の論理的に外部にあるメモリのブロックです。プッシュやキューなどの命令はデータをスタックに配置し、プルや解析プルなどの命令はそこからデータを抽出します。キューに入れられた組み込み関数は、スタック内のアイテムの数を報告します。
スタックの例を見てみましょう。
/* 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は、ファイルに以下の機能を提供するためのより簡単なクラスを提供します。
- ファイルの読み取り
- ファイルへの書き込み
- ファイルがファイルかディレクトリかを確認する
Rexx for File I / Oで使用できる機能は、行入力と文字入力の両方に基づいており、両方で使用できる機能について詳しく見ていきます。
Rexxが提供しなければならないファイル操作のいくつかを調べてみましょう。これらの例の目的のために、というファイルがあると仮定します。NewFile.txt 次のテキスト行が含まれています-
Example1
Example2
Example3
このファイルは、次の例の読み取りおよび書き込み操作に使用されます。ここでは、ファイルの内容をさまざまな方法で読み取る方法について説明します。
ファイルの内容を一度に1行ずつ読み取る
ファイルに対する一般的な操作は、Rexxライブラリ自体で使用可能なメソッドを使用して実行されます。ファイルの読み取りは、Rexxのすべての操作の中で最も簡単です。
これを実現するために使用される関数を見てみましょう。
linein
このメソッドは、テキストファイルから行を返します。テキストファイルは、関数への入力パラメータとして提供されるファイル名です。
Syntax −
linein(filename)
Parameter −
filename −これは、行を読み取る必要があるファイルの名前です。
Return Value −このメソッドは、一度に1行のファイルを返します。
Example −
/* Main program */
line_str = linein(Example.txt)
say line_str
上記のコードは、 Example.txtファイル名はlinein関数に提供されます。次に、この関数は1行のテキストを読み取り、その結果を変数に提供しますline_str。
Output −上記のプログラムを実行すると、次の結果が得られます。
Example1
ファイルの内容を一度に読む
Rexxでは、ファイルのすべての内容を読み取るには、whileステートメントを使用します。whileステートメントは、ファイルの終わりに達するまで、各行を1つずつ読み取ります。
これを実現する方法の例を以下に示します。
/* Main program */
do while lines(Example.txt) > 0
line_str = linein(Example.txt)
say line_str
end
上記のプログラムでは、次の点に注意する必要があります-
行関数は、 Example.txt ファイル。
while関数は、Example.txtファイルにさらに行が存在するかどうかを確認するために使用されます。
ファイルから読み取られた行ごとに、 line_str変数は現在の行の値を保持します。次に、これは出力としてコンソールに送信されます。
Output −上記のプログラムを実行すると、次の結果が得られます。
Example1
Example2
Example3
ファイルへのコンテンツの書き込み
ファイルを読み取るのと同じように、Rexxにはファイルに書き込む機能もあります。これを実現するために使用される関数を見てみましょう。
ラインアウト
このメソッドは、ファイルに行を書き込みます。行を書き込む必要のあるファイルは、lineoutステートメントのパラメーターとして提供されます。
Syntax −
lineout(filename)
Parameter −
filename −これは、行を書き込む必要のあるファイルの名前です。
Return Value−このメソッドは、ラインアウト関数のステータスを返します。行が正常に書き込まれた場合、返される値は0です。それ以外の場合、値1が返されます。
Example −
/* Main program */
out = lineout(Example.txt,"Example4")
Output −上記のコードを実行するたびに、「Example4」という行がファイルに書き込まれます。 Example.txt。
この章では、ファイルで使用できる他のいくつかの関数について説明します。
シニア番号 | ファイルの関数 |
---|---|
1 | 線 この関数は、値1または入力ストリームで読み取るために残っている行数のいずれかを返します。ファイル名は、関数への入力として指定されます。 |
2 | ストリーム この関数は、ファイルのステータスを確認するために使用されます。ファイルを使用する前に、ファイルのステータスを確認する必要がある場合があります。ファイルが破損しているか利用できない場合、そのファイルに対してそれ以上の操作を実行することはできません。したがって、最初にファイルのステータスを確認する方が理にかなっています。 |
3 | チャリン この関数は、ファイルから一度に1文字を読み取るために使用されます。プログラムがファイルを文字単位で読み取る必要がある場合があるため、この関数をこの目的に使用できます。 |
4 | イワナ この関数は、1またはファイル自体で読み取るために残っている文字数のいずれかを返します。ファイル名は、関数のパラメーターとして言及されています。 |
5 | チャーアウト この関数は、一度に1文字ずつファイルに書き込むために使用されます。ファイル名は、関数のパラメーターとして入力されます。 |
どのプログラミング言語でも、プログラム全体が論理モジュールに分割されます。これにより、保守が容易なコードを簡単に記述できます。これは、あらゆるプログラミング言語の基本的な要件です。
Rexxでは、モジュールはサブルーチンと関数を使用して作成できます。サブルーチンを詳しく見てみましょう。
サブルーチンの定義
関数宣言の構文は次のとおりです-
FunctionName:
Statement#1
Statement#2
….
Statement#N
どこ、
FunctionName −これはサブルーチンに割り当てられた名前です。
Statement#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
このメソッドは、サブルーチンに定義された引数の数を返すために使用されます。
Syntax −
arg()
Parameters −なし
Return Value −このメソッドは、サブルーチンに定義された引数の数を返します。
Example −
/* Main program */
call add 1,2
exit
add:
PARSE ARG a,b
say arg()
c = a + b
say c
上記のプログラムを実行すると、次の結果が得られます。
2
3
arg(インデックス)
このメソッドは、特定の位置にある引数の値を返すために使用されます。
Syntax −
arg(index)
Parameters
Index −返される引数のインデックス位置。
Return Value −このメソッドは、特定の位置にある引数の値を返します。
Example −
/* 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で利用可能な機能 |
---|---|
1 | 住所 このメソッドは、Rexxコマンドが現在実行されている環境の名前を返します。 |
2 | ビープ この方法は、特定の周波数と持続時間でシステム内に音を生成します。 |
3 | データ・タイプ このメソッドは、入力が有効な数値の場合は「NUM」の値を返し、そうでない場合は「CHAR」の値を返します。入力値をNUM値またはCHAR値と比較するかどうかを指定することもできます。いずれの場合も、返される値は、結果に応じて1または0になります。 |
4 | 日付 このメソッドは、ローカル日付を次の形式で返します。 |
5 | 数字 このメソッドは、現在のシステムで定義されているNUMERICDIGITSの現在の設定を返します。 |
6 | エラーテキスト このメソッドは、エラー番号「errorno」に関連付けられたRexxエラーメッセージを返します。エラー番号は0から99までの値である必要があることに注意してください。これは、プログラムがエラーコードを返し、エラーコードの意味を知りたい場合に役立ちます。 |
7 | 形 このメソッドは、システムで数学計算を行うために使用される「NUMERICFORM」の現在の設定を返します。 |
8 | 時間 このメソッドは、次のプログラムに示すように、現地時間を24時間形式で返します。 |
9 | ユーザーID このメソッドは、システムにログインしている現在のユーザーIDを返します。 |
10 | XRANGE このメソッドは、開始文字と終了文字で指定された範囲の文字を返します。 |
11 | X2D このメソッドは、の10進変換を返します。 hexstring value。 |
12 | X2C このメソッドは、16進文字列値の文字変換を返します。 |
Rexxの最大の利点の1つは、再利用可能なスクリプトを作成できることです。最近の組織では、再利用可能なスクリプトを使用することで、一般的な反復タスクを実行する時間を節約できるという大きな付加価値が得られることがよくあります。
たとえば、IT組織のテクノロジチームは、日常の一般的なタスクを実行するスクリプトを用意する必要がある場合があります。これらのタスクには、オペレーティングシステムとの対話が含まれる場合があります。これらのスクリプトは、不正なリターンコードまたはエラーを処理するようにプログラムできます。
Rexxは、このような反復タスクを実行するために使用できる多くのシステムコマンドを提供します。Rexxで利用可能なシステムコマンドのいくつかを見てみましょう。
dir
これは、Windowsで使用される通常のディレクトリリストコマンドです。
構文
dir
パラメーター
なし
戻り値
このメソッドは、システム上の現在のディレクトリリストを返します。
例
/* 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 command次のプログラムに表示されます。今回だけ利用していますspecial rc variable。この変数は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
XMLは、オペレーティングシステムや開発言語に関係なく、プログラマーが他のアプリケーションで読み取ることができるアプリケーションを開発できるようにする、移植可能なオープンソース言語です。これは、アプリケーション間でデータを交換するために使用される最も一般的な言語の1つです。
XMLとは何ですか?
Extensible Markup Language 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 − www.interlog.com/~ptjm/
Libxml2 − www.ctindustries.net/libxml/
iconv-1.9.2.win32 − www.xmlsoft.org/sources/win32/oldreleases/
libxslt-1.1.26.win32 − www.xmlsoft.org/sources/win32/oldreleases/
すべてのファイルを抽出し、それらがシステムパスに含まれていることを確認します。
XML関数のロード
上記のセクションのすべてのファイルがダウンロードされ、正常に登録されたら、次のステップは、RexxXML関数をロードするコードを記述することです。これは、次のコードで実行されます。
rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs')
if rcc then do
say rxfuncerrmsg()
exit 1
end
call xmlloadfuncs
上記のプログラムについて、次の点に注意してください。
関数 rxfuncadd外部ライブラリをロードするために使用されます。ザ・xmlloadfuncs 関数は、内のすべてのライブラリをロードするために使用されます rexxxml ファイルをメモリに入れます。
rcc <> 0の値の場合、エラーが発生します。このために、私たちはrxfuncerrmsg エラーメッセージの詳細をお知らせします。
ついに電話をかけます xmlloadfuncs、これにより、すべてのxml関連機能をRexxプログラムで有効にできるようになります。
いろいろ見てみましょう methods available for XML in Rexx。
xmlVersion
このメソッドは、システムで使用されているXMLおよびXSLTライブラリのバージョンを返します。
構文
xmlVersion()
パラメーター
なし
戻り値
このメソッドは、システムで使用されている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)
パラメーター
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 expressionそれに渡されます。これは、ドキュメントツリーを解析して結果を出すために使用されます。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
Reginaは、Rexxプログラムのコンパイルと実行に使用できるもう1つのRexxインタープリターです。レジーナの公式サイトは-www.regina-rexx.sourceforge.net/
レジーナを使用する利点のいくつかは次のとおりです-
Reginaは、Windows、Linux、MacOSのいずれのプラットフォームでも実行できます。
レジーナは、利用可能なすべての基準に従って機能します。
レジーナには大きなコミュニティがあります。そのため、レジーナで利用できるフォーラムや学習資料はたくさんあります。
Reginaには、Rexxプログラムの作成とテストに使用できるツールがたくさんあります。
Reginaでは、デフォルトのRexxインタープリターでは実行できないコマンドを実行できます。たとえば、特定の構成設定を含めると、実際には基本的なシステム・レベルのコマンドを実行できますが、これはRexxでは実行できません。
に記載されているインストールを介してRexxをインストールする場合 Chapter 2 – Rexx Environment、Reginaインタープリターが一緒にインストールされます。
それでは、Reginaを使用するときに利用できる一般的な方法のいくつかを見てみましょう。これらの機能は、通常の使用では利用できない拡張機能です。
拡張機能を利用するには、次のコード行を含める必要があります。これにより、Regina拡張機能を使用できるようになります。
options arexx_bifs
次に、すべてのRexxプログラムを実行しているときに、次のコマンドを使用します。
regina main.rexx
Where,
regina −これはRexxプログラムに使用されるインタプリタです。
main.rexx −Rexxプログラム。
ここで、さまざまな詳細について説明します functions of Regina Rexx Interpreter。
シニア番号 | ReginaRexxインタープリターの機能 |
---|---|
1 | b2c このメソッドは、バイナリ値を文字列値に変換するために使用されます。 |
2 | bitcomp このメソッドは、2ビットの文字列をビットごとに比較するために使用されます。 |
3 | bittst このメソッドは、ビット文字列内の指定されたビットの状態を示すために使用されます。 |
4 | 見つける このメソッドは、別の文字列で最初に出現する文字列を検索するために使用されます。 |
5 | getenv このメソッドは、システム上の環境変数の値を返します。 |
6 | getpid このメソッドは、現在実行中のプロセスIDの値を取得するために使用されます。 |
7 | ハッシュ このメソッドは、文字列のハッシュ属性を10進数として返します。また、文字列の内部ハッシュ値も更新します。 |
8 | 正当化する このメソッドは、長さの値に基づいて文字列の値を正当化またはトリミングするために使用されます。 |
9 | putenv このメソッドは、環境変数の値を設定するために使用されます。 |
10 | ディレクトリ このメソッドは、システム上の現在のディレクトリの値を取得します。 |
11 | chdir このメソッドは、システム上の現在の作業ディレクトリの値を変更します。 |
12 | ランドゥ このメソッドは、0から1までの疑似乱数を返します。 |
Rexxの最も強力な機能の1つは、テキスト値を解析する機能です。これは、他のプログラミング言語ではおそらく見られないでしょう。
解析ステートメントの一般的な形式は次のとおりです。
構文
PARSE {UPPER|LOWER|CASELESS} source {template}
Where,
UPPER −ソースは解析前に大文字に変換されます。
LOWER −ソースは解析前に小文字に変換されます。
CASELESS −このパラメーターが渡されると、ケーシングは無視されます。
source−これは解析する必要のあるソースです。これには多くのオプションがあり、次のいずれかになります。
ARG −プログラムまたはプロシージャの引数をソースとして使用できます。
LINEIN −次のライン入力をソースとして使用できます。
SOURCE −プログラムのソース情報をソースとして使用できます。
VAR name −変数名の値をソースとして使用できます。
template−このパラメーターは、ソースの解析方法を指定します。これには多くのオプションがあります。それらのいくつかを以下に示します。
variable name −これは変数に割り当てられた値です。
literal string −紐を分割するためのパターンとして使用できるリテラル文字列。
#−ソース自体内の絶対文字位置。したがって、値5を指定すると、5番目の文字が使用されます。
+#−ソース自体内の相対的な文字位置。したがって、値5を指定すると、5番目の文字が相対的に使用されます。
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
使用することもできます relative positional parsing この場合。
例
/* 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では、シグナル命令は一般に2つの目的で使用されます。
1つは、プログラムの別の部分に制御を移すことです。これは通常、他のプログラミング言語で使用されている頼りになるラベルのようなものです。
もう1つは、特定のトラップラベルに移動することです。
以下の命令コマンドのいずれかでsignalコマンドを使用すると、保留中の制御構造が自動的に非アクティブ化されます。
if ... then ... else..。
する...終了
do i = 1からn ... end [および同様のdoループ]
いつ...次に......などを選択します。そうでなければ...終わり
シグナルステートメントの一般的な構文は次のとおりです。
構文
signal labelName
signal [ VALUE ] labelExpression
signalステートメントの使用方法の例を見てみましょう。
例
/* 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では、トレース・ユーティリティーがデバッグに使用されます。トレース命令は2つの方法で実装できます。1つはバッチモードで、もう1つはインタラクティブモードです。両方のオプションを実装する方法を見てみましょう。
バッチモードでのトレース
traceコマンドは、実行される各Rexxコマンドの詳細レベルを提供するために使用されます。
traceステートメントの一般的な構文は次のとおりです。
構文
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()
上記の関数は、現在のトレースレベルを返します。
パラメーター
なし
戻り値
上記の関数は、現在のトレースレベルを示します。
例
/* 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で見られるさまざまなエラー状態の一部です。
ERROR −これは、オペレーティングシステムに送信されたコマンドがエラーになるたびに発生します。
FAILURE −これは、オペレーティングシステムに送信されたコマンドが失敗するたびに発生します。
HALT−これは通常、操作が別の操作に依存している場合に発生します。例としては、何らかの理由でI / O操作が停止されている場合があります。
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 sigl
上記のプログラムの出力は以下のようになります。
An error has occured
40
6
環境の章に従って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では、attributeキーワードを使用してプロパティを宣言すると、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 operator。クラスのメソッドは、次の方法で呼び出すことができます。
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
継承
継承は、あるクラスが別のクラスのプロパティ(メソッドとフィールド)を取得するプロセスとして定義できます。継承を使用すると、情報が階層順に管理できるようになります。
他のプロパティを継承するクラスは、 subclass (派生クラス、子クラス)およびプロパティが継承されるクラスは次のように知られています。 superclass (基本クラス、親クラス)。
Rexxでの継承の例を見てみましょう。次の例では、というクラスを作成しています。Person。そこから、サブクラスキーワードを使用してStudent class として sub-class of 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は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は、さまざまな機能を提供する多数の拡張機能を提供します。それらのほとんどは、オペレーティングシステムとの対話を可能にします。以下に説明するように、それらのいくつかを詳細に見てみましょう。
シニア番号 | 拡張機能 |
---|---|
1 | b2c この関数は、バイナリ値を文字列値に変換します。 |
2 | bitclr この関数は、バイナリ文字列の指定されたビットを0に切り替えるために使用されます。 |
3 | bitcomp この関数は、ビット0で始まる2つのバイナリ文字列を比較するために使用されます。 |
4 | buftype この関数は、通常デバッグ目的で使用されるスタックの内容を表示するために使用されます。 |
5 | クリプト この関数は、文字列を暗号化するために使用されます。 |
6 | フォーク この関数は、システム上に新しい子プロセスを生成するために使用されます。 |
7 | getpid この関数は、現在実行中のプロセスのIDを取得します。 |
8 | ハッシュ この関数は、文字列のハッシュ値を返します。 |
Rexxは、さまざまな機能を提供する多くの命令を提供します。それらのほとんどは、オペレーティングシステムとの対話を可能にします。それらのいくつかを詳しく見てみましょう。
シニア番号 | Rexxの説明 |
---|---|
1 | 住所 この機能は、現在のコマンド環境を表示するために使用されます。 |
2 | 落とす この関数は、変数の割り当てを解除するために使用されます。 |
3 | 解釈する 定義された命令を解釈または実行します。 |
4 | nop この機能は、操作を実行しないことを意味します。このコマンドは通常、if statements。 |
5 | 引く これは、スタックまたはデフォルトのストリームから入力をプルするために使用されます。 |
6 | 押す これは、値をRexxスタックにプッシュするために使用されます。 |
Rexx言語には、前の章ですでに見たように、さまざまな実装がたくさんあります。各実装には独自の機能があります。Rexxで利用可能なさまざまな実装を見てみましょう。
OoRexx
これは、Rexxのオブジェクト指向バージョンです。デフォルトでは、Rexxの基本的な実装はすべて手順に基づいています。しかし、ooRexxを使用すると、Rexxへのオブジェクト指向アプローチを使用することで柔軟性を高めることができます。ooRexxを使用すると、再利用可能なクラスとオブジェクトを作成して、より適切に再利用できます。
次のプログラムは、ooRexx実装者で実行できる単純なRexxプログラムの例です。
例
/* Main program */
say ‘hello’
このプログラムを実行するには、次のコマンドを実行します。
rexx main.rexx
上記のコマンドを実行すると、次の出力が得られます。
hello
Netrexx
これは、Rexx言語のJavaベースの代替手段を提供するため、すべてのJavaベースの開発者向けです。したがって、すべてのオブジェクトはJavaオブジェクトモデルに基づいています。このフレームワークの利点は、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
Brexx
これはRexxの軽量実装です。これは、標準のRexx実装者よりも軽いパッケージです。しかし、それでもRexxの全機能を備えています。
次のコードは、BRexxプログラムの例です。
/* Main program */
say ‘hello’
プログラムを実行するには、次のコマンドを実行します。
rexx32 main.rexx
上記のコマンドを実行すると、次の出力が得られます。
hello
NetRexxは、RexxのJava実装です。NetRexxでは、実装者を使用してRexxプログラムをJavaプログラムに変換し、Javaプログラムを任意のJava仮想マシンで実行できるようにします。
NetRexxの設定
NetRexxの最初のステップは、ローカルマシンにセットアップすることです。これを行うには、次の手順を実行する必要があります-
Step 1 − NetRexxダウンロードサイトにアクセスします− http://www.netrexx.org/downloads.nsp
NetRexx.3.04.GAファイルをダウンロードします。
Step 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)
Step 3−Netrexxzipファイルの内容を解凍します。NetRexx3.04GA \ libフォルダーからjavainstallation / lib / etcフォルダーにファイルをコピーします。
Step 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
ここで、いくつかについて説明しましょう。 special aspects of the Netrexx library。
インデックス付き文字列
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
シニア番号 | コマンドと説明 |
---|---|
1 | コマンドに尋ねる このコマンドは、デフォルトの入力ストリームから行を読み取るために使用されます。 |
2 | 数字コマンド このコマンドは、桁の値の現在の値を表示するために使用されます。 |
3 | フォームコマンド このコマンドは、フォーム値の現在の値を表示するために使用されます。 |
4 | 長さコマンド このコマンドは、文字列値の長さを表示するために使用されます。 |
5 | versionコマンド このコマンドは、使用されているNetRexxの現在のバージョンを返すために使用されます。 |
6 | traceコマンド このコマンドは、NetRexxで使用されている現在のトレース設定を返すために使用されます。 |
BRexxは、Rexxの軽量実装です。Rexx実装の一部として提供する機能はまだたくさんあります。
BRexxの設定
BRexxの最初のステップは、ローカルマシンにセットアップすることです。これを行うには、次の手順を実行する必要があります-
Step 1 − BRexxダウンロードサイトにアクセスします− https://ftp.gwdg.de/pub/languages/rexx/brexx/html/rx.html
ダウンロードセクションに移動して、製品をダウンロードします。
Step 2 −Brexxのzipファイルの内容を解凍します。
Step 3 − BRexx \ binパスをシステムのパス変数に追加します。
Step 4 − RXLIBという新しい変数を作成し、Brexxフォルダー内のlibフォルダーをポイントします。
最初のBRexxプログラムの実行
というファイルを作成します main.rexx 次のコードをファイルに配置します。
/* Main program */
say ‘hello’
プログラムを実行するには、次のコマンドを実行します。
rexx32 main.rexx
上記のコマンドを実行すると、次の出力が得られます。
hello
ここで、BRexxライブラリで使用できる最も一般的に使用される関数のいくつかについて説明します。
シニア番号 | BRexxライブラリで利用可能な関数 |
---|---|
1 | acosコマンド このコマンドは、数値のアークコサイン変換を取得するために使用されます。 |
2 | cosコマンド このコマンドは、数値のコサイン変換を取得するために使用されます。 |
3 | sinコマンド このコマンドは、数値の正弦変換を取得するために使用されます。 |
4 | asinコマンド このコマンドは、数値のアークサイン変換を取得するために使用されます。 |
5 | tanコマンド このコマンドは、数値のタンジェント変換を取得するために使用されます。 |
6 | atanコマンド このコマンドは、数値のアークタンジェント変換を取得するために使用されます。 |
7 | mkdirコマンド このコマンドは、現在の作業ディレクトリにディレクトリを作成するために使用されます。 |
8 | rmdirコマンド このコマンドは、現在の作業ディレクトリ内のディレクトリを削除するために使用されます。 |
9 | dirコマンド このコマンドは、ディレクトリリスト全体を返すために使用されます。 |
Rexxには、以下にリストされているさまざまなデータベースを操作する機能があります。
- HSQLDB
- Oracle
- SQLサーバー
- MySQL
- MongoDB
次のリンクをクリックすると、Rexxデータベースのすべての情報が表示されます- https://rexxsql.sourceforge.net/
この例では、MySQLDBをサンプルとして使用します。したがって、最初のステップは、必要なドライバーをRexx SQLサイトからダウンロードして、Rexxプログラムがそれに応じてSQLと連携できるようにすることです。したがって、後続のステップに従って、RexxプログラムがMySQLデータベースで動作できることを確認してください。
Step 1 − Rexxサイトから次のドライバーダウンロードページに移動します− https://sourceforge.net/projects/rexxsql/files/rexxsql/2.6/
Step 2 −MYSQLドライバーをダウンロードします-rxsql26B3_my_w32_ooRexx
Step 3 −コンテンツをローカルマシンに解凍します。
Step 4 −解凍したフォルダのパスをマシンのパス変数に追加します。
以降のすべての例では、次のポインタが配置されていることを確認してください-
データベースTESTDBを作成しました。
TESTDBにテーブルEMPLOYEEを作成しました。
このテーブルには、フィールドFIRST_NAME、LAST_NAME、AGE、SEX、およびINCOMEがあります。
TESTDBにアクセスするためのユーザーID「testuser」とパスワード「test123」が設定されています。
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 −これは実行するステートメントに付ける名前です。
statement −これはデータベースに対して実行する必要のあるステートメントです。
戻り値
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
データベーステーブルの操作
次のタイプの操作は、データベーステーブルで最も一般的に実行されます。
シニア番号 | 操作と説明 |
---|---|
1 | 挿入操作 レコードをデータベーステーブルに作成する場合に必要です。 |
2 | 読み取り操作 任意のデータベースに対するREAD操作は、データベースからいくつかの有用な情報をフェッチすることを意味します。 |
3 | 更新操作 任意のデータベースに対するUPDATE操作は、データベースですでに使用可能な1つ以上のレコードを更新することを意味します。 |
4 | 削除操作 データベースから一部のレコードを削除する場合は、DELETE操作が必要です。 |
5 | 接続を閉じる 次のコマンドを使用して、データベースへの接続を閉じることができます。 |
トランザクションの実行
トランザクションは、データの整合性を保証するメカニズムです。トランザクションには次の4つのプロパティがあります-
Atomicity −トランザクションが完了するか、まったく何も起こりません。
Consistency −トランザクションは一貫性のある状態で開始し、システムを一貫性のある状態のままにする必要があります。
Isolation −トランザクションの中間結果は、現在のトランザクションの外部には表示されません。
Durability −トランザクションがコミットされると、システム障害が発生した後でも、影響は持続します。
これは、トランザクションを実装する方法の簡単な例です。
例
/* 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は、Pocket PC、Palmデバイス、PDA、およびその他のスマートフォンデバイスをサポートしています。これらのプラットフォームで動作するRexxの利点は、Rexxが実際には数キロバイトのスパンで実行される軽量のプログラミングシステムであるということです。したがって、これらのデバイスでRexxプログラムを実行するのが簡単になります。
ハンドヘルドデバイスのRexxは、次のモードで実行できます-
最初のモードは、オペレーティングシステム自体で直接実行されるネイティブノードです。このモードで実行する利点は、オペレーティングシステムから直接実行されるため、高速になることです。
次のモードは、ハンドヘルドデバイスの上にあるDOSまたはエミュレータプログラムの上にあります。このモードの利点は、エミュレータがそのオペレーティングシステムで実行されている限り、任意のタイプのオペレーティングシステムで実行できることです。
さまざまなハンドヘルドデバイスカテゴリのRexxインタープリターを以下に示します。
- Windows CE − Brexx
- Palm OS-PalmOSのRexx
- Symbian OS −レジーナ
DOSエミュレータの場合、次の手順を実行する必要があります-
Step 1−まず、人気のDOSエミュレータであるPocketDOSをダウンロードします。多くのオペレーティングシステムで動作するように設計されており、一般的なVGA画面とシリアルポートおよびパラレルポートをサポートしています。
Step 2 −次のステップは、16ビットDOS用のBRexxファイルをWindowsPCにダウンロードすることです。
Step 3 −最後のステップは、ActiveSyncを使用してRexxプログラムをハンドヘルドデバイスに同期することです。
利用可能な他のいくつかの商用DOSベースの製品があります。XTMは、このカテゴリに分類される製品です。この製品の特徴は次のとおりです-
80186CPUと命令セットのサポート。
パフォーマンスを向上させるために、BIOSコードから機能します。
数学コプロセッサー、バージョン8087MPUのエミュレーションを提供できます
シリアルポートへのアクセスを提供します。
英語、フランス語、ドイツ語などのさまざまな言語をサポートしています。
プログラミング言語の重要な側面の1つは、アプリケーションのパフォーマンスです。アプリケーションのパフォーマンスが妨げられないように、特別な慣行に注意する必要があります。理解を深めるために、手順で説明されている考慮事項のいくつかを見てみましょう。
Step 1−命令の数を減らすようにしてください– Rexxでは、各命令にオーバーヘッドがあります。したがって、プログラム内の命令の数を減らすようにしてください。再設計できる手順の例を以下に示します。
複数のifelseステートメントを使用する代わりに、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"'"
Step 2−複数のステートメントを1つのステートメントに結合してみてください。以下に例を示します。
–の割り当てを行った次のコードがあるとします。 a and 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
Step 3 −交換してみてください do..to loop とともに do..for loop可能な限り。これは通常、制御変数がループを介して繰り返される場合に推奨されます。
/* Main program */
do i = 1 to 10
say i
end
上記のプログラムは、次のプログラムに置き換える必要があります。
/* Main program */
do i = 1 for 10
say i
end
Step 4−可能であれば、次のプログラムに示すように、doループからfor条件を削除します。制御変数が不要な場合は、以下に示すように、終了値をdoループに入れるだけです。
/* Main program */
do 10
say hello
end
Step 5 −で select clause、評価される最良の条件であると感じるものは何でも、最初に置く必要があります when clause。したがって、次の例では、1が最も頻繁なオプションであることがわかっている場合、when 1 clause selectステートメントの最初の句として。
/* Main program */
select
when 1 then say'1'
when 2 then say'2'
otherwise say '3'
end
すべてのプログラマーは、品質と効率に関して、自分たちのプログラムが最高であることを望んでいます。以下は、これらの目標を達成するのに役立つ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で利用可能なグラフィックユーザーインターフェイスを使用するには、2つのパッケージを使用する必要があります。1つは ActiveTcl もう1つは Rexxtkパッケージ。これらの2つのパッケージに加えて、フォームにボタンやその他のコントロールを持つことができる通常のフォームを設計できます。
環境設定
最初に行うことは、環境のセットアップです。次の手順を実行して、環境を整えましょう。
Step 1 −次のWebサイトからActivetclパッケージをダウンロードします− https://www.activestate.com/activetcl
Step 2−次のステップは、ActiveTClのインストールを開始することです。画面の[次へ]ボタンをクリックして続行します。
Step 3 −使用許諾契約に同意し、[次へ]ボタンをクリックします。
Step 4 −インストールする場所を選択し、次のボタンをクリックします。
Step 5 −デモのインストール場所を選択し、[次へ]ボタンをクリックします。
Step 6 − [次へ]ボタンをクリックして、インストールを続行します。
Step 7 − [完了]ボタンをクリックして、インストールを完了します。
Step 8 −次のステップは、次のリンクからRexxtkソフトウェアをダウンロードすることです− https://sourceforge.net/projects/rexxtk/
Step 9−前の手順のリンクからインストーラーファイルをダブルクリックして、インストールを開始します。次のボタンをクリックして続行します。
Step 10 −次の画面で、[はい]ボタンをクリックして、使用許諾契約に同意します。
Step 11 −次の画面で、インストールする場所を選択し、[次へ]ボタンをクリックします。
Step 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 −チェックボックスまたはラジオボタンがメニューオプションとして使用されている場合、このオプションは、メニューオプションが選択されたときに選択する色を指定します。
tearoff −このオプションは、メインメニューにサブメニューを追加するために使用されます。
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関数を使用して作成されます。'tearoff'パラメータは、メインメニューにアタッチされるサブメニューを作成する必要があることを意味します。
次に、TkAdd関数を使用して、ファイルと開くという2つのメニューオプションを追加します。
上記のプログラムを実行すると、次のような出力が得られます。
Reginaldは、Jeff Glanttによって開発された別のRexxインタープリターであり、Rexxプログラムの実行方法にいくつかのカスタマイズがあります。このセクションでは、Reginaldをセットアップし、その中でいくつかのRexxプログラムを実行する方法を説明します。
環境設定
最初のステップは、Reginaldファイルをダウンロードする環境のセットアップです。これは、次のWebサイトのリンクから実行できます-http://www.manmrk.net/tutorials/rexx/Reginald/win32/rxusrw32.htm
ダウンロードが完了してインストーラーを起動すると、次の画面でインストール場所を選択できます。
[インストール]ボタンをクリックして続行します。
完了したら、Reginaldインタープリターで1つのサンプルプログラムの実行を開始できます。以下に示すような簡単なプログラムを作成します。
/* Main program */
say 'Hello'
次に、次のコマンドを実行します-
RxLaunch.exe main.rexx
次に、次の出力が得られます。このプログラムは、Reginaldインタープリターで実行されます。
利用可能な他の機能
通常のRexxコマンドとは別に、Reginaldには、Windowsオペレーティングシステム用にカスタマイズされた特定のコマンドがいくつかありました。DriveMapはそのようなコマンドの1つです-
DriveMap
この関数は、ドライブに関する情報を提供します。
Syntax −
Drivemap(,options)
Parameters −
Options −これらは、ローカルコンピュータのドライブに関するさまざまな情報を取得するために使用できるキーワードのリストです。
Return Value
ドライブに関する情報を含む文字列値。
Example −
/* Main program */
say 'Drives on system : ' DriveMap(,'FIXED')
上記のプログラムを実行すると、次の出力が得られます。この出力は、システムによって異なります。
List of disk drives : C:\ D:\
Rexxには、Webサーバーと連携する機能もあります。最も一般的なのはApacheWebサーバーです。Apache WebサーバーでRexxwを使用するには、最初に次のリンクからRexxモジュールをダウンロードする必要があります-https://sourceforge.net/projects/modrexx/?source=typ_redirect
完了したら、必ずmodRexxモジュールをクラスパスに追加してください。
次の行をApache構成ファイルに追加および変更する必要があります。
次の行を適切な-の最後に追加する必要があります
- httpd.confLoadModuleリスト。
- 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サーバー・ページのサポートのためにこれらを追加してください
RexxRspCompiler「c:/ProgramFiles/ApacheGroup/Apache2/bin/rspcomp.rex」
上記の変更が行われたら、ApacheWebサーバーをシャットダウンして再起動する必要があります。
上記の行では、Javaサーバーページと同じようにRexxベースのサーバーページを作成することもできます。Rexxコードをhtmlページに直接追加できます。
例を以下に示します-
<p>The current date and time is
<?rexx
/* Inserting the rexx statement */
say date() time()
?>
</p>
Rexxベースのサーバーページが実行されると、次のことが実行されます。
最初に一時ファイルが作成されます。
次に、RexxサーバーコンパイラーはファイルをRexxプログラムにコンパイルし、一時ファイルに配置します。
次のステップは、実際にRexxプログラムを実行することです。
最後に、一時ファイルが削除されます。