2011/12/12 月曜日

SELECT

Filed under: CL — takahashi @ 0:48:16

CLでのSELECT処理

RPG:
  1. SELECT                                                   
  2. WHEN       COND(&PGNAME *EQ 'xxxxxx')  THEN(DO)       
  3. 処理
  4. ENDDO                 
  5. WHEN       COND(&PGNAME *EQ 'xxxxxx')  THEN(DO)       
  6. 処理
  7. ENDDO                 
  8. ENDSELECT

2009/12/1 火曜日

CL サブルーチン

Filed under: CL — takahashi @ 17:54:22

CL内でもRPGのBEGSRで定義するようなサブルーチンが定義できると、同一処理等が発生する場合は
便利ですよね。
V5R4から、CALLSUBRとSUBRコマンドが新しく増えて、CL内でもサブルーチンが定義できるようになりました

RPGに例えるならば
CALLSUBRコマンドがEXSR
SUBRコマンドがBEGSRに該当するイメージです。

以下に例を書いてみました。
SHOW_TIMEサブルーチンを定義してみました。
サブルーチンでは、タイムスタンムプを取得して、表示しています

RPG:
  1. 0012.00              PGM                                                                     
  2. 0013.00                                                                                     
  3. 0014.00              DCL        VAR(&DATETIME) TYPE(*CHAR) LEN(20)                           
  4. 0015.00              DCL        VAR(&DATETIME14) TYPE(*CHAR) LEN(14)                         
  5. 0016.00                                                                                     
  6. 0017.00              CALLSUBR   SUBR(SHOW_TIME)                                             
  7. 0018.00                                                                                     
  8. 0019.00              CALLSUBR   SUBR(SHOW_TIME)                                             
  9. 0020.00                                                                                     
  10. 0021.00  /*-----------------------------------------------------------------------*/         
  11. 0022.00  /*    タイムスタンプ取得                                                 */         
  12. 0023.00  /*-----------------------------------------------------------------------*/         
  13. 0024.00              SUBR       SUBR(SHOW_TIME)                                             
  14. 0025.00                                                                                     
  15. 0026.00                  RTVSYSVAL  SYSVAL(QDATETIME) RTNVAR(&DATETIME)                     
  16. 0027.00                  SNDPGMMSG  MSG(&DATETIME)                                           
  17. 0028.00                                                                                     
  18. 0029.00              ENDSUBR                                                                 
  19. 0030.00                                                                                     
  20. 0031.00              ENDPGM                                                                 
  21. 0032.00              RETURN

2009/9/16 水曜日

DCLの長さの制限

Filed under: CL — takahashi @ 18:12:29

CLで変数を定義する時の文字タイプの長さは何バイトまで指定できすか?
という質問があったので、マニュアルを調べてみました。
以下、マニュアルより抜粋です

5つのタイプのそれぞれの最大長は次の通りです。

* 10進数-- 15桁(小数点以下の桁数は9桁)
* 文字-- 32767バイト

注: CL変数の初期値(VALUEパラメーターに指定)は,5000桁より大きくすることはできません。
* 論理-- 1バイト
* 整数-- 4バイト
* 符号なし整数-- 4バイト

5つのタイプのそれぞれの省略時の長さは次の通りです。

* 10進数 -- 15桁で,小数点以下の桁数は5
* 文字-- 32バイト
* 論理-- 1バイト
* 整数-- 4バイト
* 符号なし整数-- 4バイト

注: 10進数および文字タイプでは,VALUEパラメーターに1が指定された場合には,省略時の長さは初期値の長さと同じです。

文字タイプでは32767バイトまで指定できるようです。
因みに、32767を超える値を入力すると、SEU上でエラーとなります

#V5R4

2009/8/12 水曜日

CL 条件式

Filed under: CL — takahashi @ 11:21:38

CLでの条件式について

RPG:
  1. IF COND(&AA *EQ 5 ) THEN(DO)
  2. ENDDO
  3.  
  4. IF  COND(&OP *EQ '5' *OR  &OP *EQ '2') THEN(DO)   
  5. ENDDO
  6.  
  7. IF  COND(&OP *EQ '5' *AND  &OP *EQ '2') THEN(DO)   
  8. ENDDO
  9.  
  10. IF COND(&AA *EQ 5 ) THEN(GOTO END)
  11.  
  12. IF COND(&AA *EQ 5 ) THEN(DO)
  13.    処理
  14. ENDDO
  15. ELSE DO
  16.    処理
  17. ENDDO
  18.  
  19. IF (&PM1 *EQ IGNR) CHGVAR &ANS '1'     
  20. ELSE IF (&PM1 *EQ NONE) CHGVAR &ANS '2'
  21. ELSE IF (&PM1 *EQ NORM) CHGVAR &ANS '3'
  22. ELSE IF (&PM1 *EQ ABCD) CHGVAR &ANS '4'

2009/7/31 金曜日

CL 四則演算

Filed under: CL — takahashi @ 16:35:51

CL内での四則演算について

CHGVARコマンドを使用します。VALUEパラメータ内に演算式を記入します。

以下の例は変数IIにそれぞれ1を加算・減算・乗算・除算する場合になります。

RPG:
  1. CHGVAR     VAR(&II) VALUE(&II + 1)  /*加算*/
  2. CHGVAR     VAR(&II) VALUE(&II - 1)  /* 減算*/
  3. CHGVAR     VAR(&II) VALUE(&II * 1)  /* 乗算*/
  4. CHGVAR     VAR(&II) VALUE(&II / 1)   /* 除算*/

2009/7/6 月曜日

CL 文字列の分割

Filed under: CL — takahashi @ 17:17:28

CLでの文字列の分割方法です。

(1)変数WKの5バイト目から3バイト目にABCをセット代入する

RPG:
  1. CHGVAR   VAR(%SST(&WK 05 3)) VALUE('ABC')

(2)変数FILEに変数OBJの1バイト目から10バイトを代入する
%SSTは%SUBSTRINGでも可

RPG:
  1. CHGVAR   &FILE %SST(&OBJ  1 10)
  2. CHGVAR   &FILE %SUBSTRING(&OBJ 1  10))

2008/1/21 月曜日

CLでのジョブ日付の取得

Filed under: CL — takahashi @ 13:57:28

CLで8桁のジョブ日付を取得する方法をお伝えします。

RPG上では UDATEで6桁、*DATEで8桁のジョブ日付を取得する事ができます。

CL上ではRTVJOBA で6桁のジョブ日付を取得し、CVTDATで8桁へ変換します。

RPG:
  1. DCL     VAR(&DATE6)   TYPE(*CHAR) LEN(06)    /* 日付6桁 */
  2. DCL     VAR(&DATE8)   TYPE(*CHAR) LEN(08)    /* 日付8桁 */
  3.  
  4. RTVJOBA    DATE(&DATE6)
  5. CVTDAT     DATE(&DATE6) TOVAR(&DATE8) TOFMT(*YYMD)
  6. TOSEP(*NONE)

HTML convert time: 0.609 sec. Powered by WordPress ME