このトピックでは、テキスト・メッセージ中の改行 (NL) 文字を、 復帰 (CR) および改行 (LF) 文字の対に変更するタスクの例について説明します。
この変換は、EBCDIC プラットフォーム (たとえば CCSID 1047 を使用するもの) からのメッセージを、 ASCII プラットフォーム (たとえば CCSID 437 を使用するもの) に送信する場合に役立ちます。 問題が生じることがあるのは、 EBCDIC NL 文字 16 進 '15' が、未定義 ASCII 文字 16 進 '7F' に変換されるためです。 ASCII コード・ページの NL 文字に対応するコード・ポイントはありません。
この例では、入力メッセージを BLOB ドメインのメッセージとして解釈するメッセージ・フローが作成されます。 これは ResetContentDescriptor ノードに渡され、データを MRM ドメイン内のメッセージにリセットします。 メッセージは msg_nl (EBCDIC の NL 文字で区切られた反復ストリング・エレメントのセット) と呼ばれます。 Compute ノードが使用されて、"msg_crlf" という MRM ドメインの別のメッセージに基づいて出力を作成します (CR LF 対によって区切られた反復ストリング・エレメントのセット)。 その後メッセージ・ドメインは、別の ResetContentDescriptor ノードで変更され、BLOB に戻されます。 このメッセージ・フローは、以下で例示されています。
以下に、メッセージが作成され、メッセージ・フローが構成される方法を説明します。
-- Declare local working variables DECLARE I INTEGER 1; DECLARE J INTEGER CARDINALITY(InputRoot.*[]); -- Loop to copy all message headers from input to output message WHILE I < J DO SET OutputRoot.*[I] = InputRoot.*[I]; SET I=I+1; END WHILE; -- Set new output message type which uses CRLF delimiter SET OutputRoot.Properties.MessageType = 't_msg_crlf'; -- Loop to copy each instance of string1 child within message body SET I = 1; SET J = CARDINALITY("InputBody"."string1"[]); WHILE I <= J DO SET "OutputRoot"."MRM"."string1"[I] = "InputBody"."string1"[I]; SET I=I+1; END WHILE;
メッセージの既存ヘッダーの基数値に初期設定されている、変数 J の使用に注意してください。これは、以下の WHILE 文をコーディングする場合に起こる、ループのそれぞれの反復上での基数の計算より効率的です。
WHILE I < CARDINALITY(InputRoot.*[]) DO
関連概念
メッセージ・フロー
ESQL
メッセージのモデル化
関連タスク
メッセージ・フローの設計
メッセージ・フローの内容の定義
ESQL ファイルの管理
関連資料
各国語サポート
Compute ノード
MQInput ノード
MQOutput ノード
ResetContentDescriptor ノード
ESQL
DECLARE ステートメント
SET ステートメント
WHILE ステートメント
TDS ニーモニック
注意 |
商標 |
ダウンロード |
ライブラリー |
技術サポート |
フィードバック
![]() ![]() |
ac11630_ |