RPG

215. RPGソースをIFSテキスト・ファイルでコンパイル (2)

先に示したようにRPGソースは IFS にストリーム・ファィルとして保存することができる。
ところで先の例では

  CPYTOIMPF FROMFILE(MYSRCLIB/QRPGLESRC TESTRPG3) TOSTMF('/TEST/TESTRPG3.RPG')    	
    MBROPT(*REPLACE) STMFCCSID(5035) RCDDLM(*CR)

のように出力先のストリーム・ファイルの CCSID は 5035 を指定した。
この CCSID は 5026 または 1399 であっても正常にコピーできて
そのあとのコンパイルも正常に行うことができる。

■ ASCII ストリームをコンパイル

それではストリーム・ファイルが CCSID 819 (=Shift_JIS) であれば、どうだろうか ?

CCSID 819 としてコピーした結果は次のとおりである。

大量の @ という文字が目立つが EBCDIC のブランクの文字は、ご存知 0x40 である。
これは ASCII の @ という文字に相等する。

つまり、これは CPYTOIMPF によって EBDDIC/ASCII に文字コードの変換は一切、
行われていないことを意味する。

コンパイラーは、この文字を CCSID 819 の @ として読み取ってしまうので
当然、コンパイルはエラーとなってしまう。
( IFSストリーム・ファイルは CCSID も属性として保管されている。)

CCSID 819 のテストが重要であるのは、ストリーム・ファイルを SEU の代わりに
メモ帳のような簡単なエディターで RPG を直接、編集できる可能性を検討するためである。
そこで EDTF で慎重にもう一度、編集してみた。

これでコンパイルしてみると、なんとか正常にコンパイルすることができた。
つまり ASCII ストリーム・ファイルであってもコンパイラーは正常にコンパイルしてくれる
ことがわかった。

■ UTF-8 ストリームをコンパイル

さらに ユニコード、つまり UTF-8 (CCSID 1208) のストリーム・ファイルも
コンパイルできるのか、どうか調べてみよう。

  CPYTOIMPF FROMFILE(MYSRCLIB/QRPGLESRC TESTRPG3) TOSTMF('/TEST/TESTRPG3.RPG')
    MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CR)

を実行してみると下記のように WRKLNK で表示される。

( 不要な " は、WRKLNK または EDTF で削除済みである。)

そこで、このUTF-8 のストリーム・ファイルを使ってコンパイルしてみると
次のようなエラーとなる。

つまり、コンパイラーはユニコードからのコンパイルは認めていないのである。

■ ストリーム・ファイルのコンパイルの効用

ストリーム・ファイルからのコンパイルが可能となると、
ユーザー(RPG開発者) にとって、どのように利点が得られるのだろうか ?

これには IBM が、その利点を強調している記事があるので
下記のリンクを参照して頂きたい。

http://www-06.ibm.com/systems/jp/power/software/i/seminar/ifs/