2010/6/18 金曜日

CD-ROMからのコピー

Filed under: 未分類 — takahashi @ 9:56:24

IBMi(Systemi)に搭載されているCD-ROMドライブから、データをi5/os側に取り込む方法です。

一番簡単なのは、CD-ROMからIFS領域に一旦コピーする方法と思いますが
今回は直接、CD-ROMからコピーする方法です。

CD-ROMにはWindows形式のTXTファイルがあり
その内容をAS400のDBに落とすとした場合の処理を記述します

以下のコマンドはCD-ROMの中のREADMEフォルダーにあるAPAR.TXT
をQTEMP上のAAAファイルにCPYする場合です。
※AAAは CRTPF FILE(QTEMP/AAA) RCDLEN(1024) IGCDTA(*YES) で作成

CPYFRMSTMF FROMSTMF(‘/QOPT/C7523390_01/README/APAR.TXT’) TOMBR(‘/QSYS.LIB
/QTEMP.LIB/AAA.FILE/AAA.MBR’) MBROPT(*ADD) ENDLINFMT(*CRLF)

※C7523390_01はCD-ROMのボリュームラベルになります。
※CSVファイルであれば、CPYFRMIMPFでDDS記述ファイルに
落とせます。

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/10/19 月曜日

ポートの使用状況調査

Filed under: その他 — takahashi @ 10:25:26

新規でWEBサーバーを起動する場合など、使用中のポートの
確認を行いたい場合があります。
使用ポートの確認は
コマンド WRKSRVTBLE で行えます

wrksrvtble.GIF

小文字で表示されますので、環境によっては
Ctrl+F3で表示を切り替えて下さい

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/21 火曜日

CL 文字列の結合

Filed under: 未分類 — takahashi @ 17:55:27

CLでの文字列の結合方法です。

*TCAT 先行文字列の後ろスペースが削除され、後続文字列を連結する
*BCAT 先行文字列の後ろスペースが削除され、スペースを1バイト挿入し、後続文字列を連結する
*CAT スペースを考慮せずに、単純結合を行う。
例)
変数A "ABCDEF△△"
変数B "XYZ"

< 結合処理> < 結果>
&A *TCAT &B "ABCDEFXYZ"
&A *BCAT &B "ABCDEF△XYZ"
&A *CAT &B "ABCDEF△△XYZ"

覚えにくいので
TCATはトリム
BCATはブランク
と覚えるといいかもですね。

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))

2009/2/14 土曜日

物理ファイルのバイト数の制限

Filed under: その他 — takahashi @ 1:56:37

先日、社内でり物理ファイルのバイト数の制限は?との質問を受け
マニュアルを開いて調べてみました。

結果、通常の物理ファイルであれば
フィールドで8000個、バイト数は32766バイトまでとなっているようです。

以下はマニュアルからの抜粋です。

指定できるフィールドの数は、
1 つのレコード様式について最高 8000 個です。
レコード様式内のフィールドのいずれかが、日付、時刻、時刻スタンプ、可変長であるか、またはヌル値を許容するときに、フィールドの実際の最大数は 8000 より少なくなる場合もあります。
フィールドの最大数はレコード様式内にあるフィールドの数およびフィールドの組み合わせによって異なります。
レコード様式内の最大バイト数は可変長フィールドが含まれていなければ32766です。
可変長フィールドが含まれれば 32740 です

2008/12/17 水曜日

10進数データ・エラーの無視

Filed under: RPG — takahashi @ 23:23:23

RPGのコンパイルオプションに10進数データ・エラーの無視(IGNDECERR)がありますが
コンパイルされたあとでは、プログラムが10進数無視を*YES or *NOのどちらを指定しているのか
知りたいときがありますよね
コンパイルリストがある場合はコンパイルリストにQRG1019とあれば*YESでコンパイルされていると
わかるのですが、通常はコンパイルリストも残ってないとおもいます。

そこで、今回は 10進数データ・エラーの無視のコンパイル状況を調べる方法をお伝えします。
方法は該当PGをデバッグします。
ブレイクポイントはどこでも構いませんので、指定します。
ブレイクしたら、DSPPGMVAR で ZIGNDECDを調べます。

ZIGNDECDの内容が
0なら、*NO
1なら、*YES
となります。

« 前ページへ次ページへ »

HTML convert time: 0.656 sec. Powered by WordPress ME