先に示したようにRPGソースは IFS にストリーム・ファィルとして保存することができる。
ところで先の例では
CPYTOIMPF FROMFILE(MYSRCLIB/QRPGLESRC TESTRPG3) TOSTMF('/TEST/TESTRPG3.RPG') MBROPT(*REPLACE) STMFCCSID(5035) RCDDLM(*CR)
のように出力先のストリーム・ファイルの CCSID は 5035 を指定した。
この CCSID は 5026 または 1399 であっても正常にコピーできて
そのあとのコンパイルも正常に行うことができる。
それではストリーム・ファイルが CCSID 819 (=Shift_JIS) であれば、どうだろうか ?
CCSID 819 としてコピーした結果は次のとおりである。
大量の @ という文字が目立つが EBCDIC のブランクの文字は、ご存知 0x40 である。
これは ASCII の @ という文字に相等する。
つまり、これは CPYTOIMPF
によって EBDDIC/ASCII に文字コードの変換は一切、
行われていないことを意味する。
コンパイラーは、この文字を CCSID 819 の @ として読み取ってしまうので
当然、コンパイルはエラーとなってしまう。
( IFSストリーム・ファイルは CCSID も属性として保管されている。)
CCSID 819 のテストが重要であるのは、ストリーム・ファイルを SEU の代わりに
メモ帳のような簡単なエディターで RPG を直接、編集できる可能性を検討するためである。
そこで EDTF
で慎重にもう一度、編集してみた。
これでコンパイルしてみると、なんとか正常にコンパイルすることができた。
つまり ASCII ストリーム・ファイルであってもコンパイラーは正常にコンパイルしてくれる
ことがわかった。
さらに ユニコード、つまり 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 が、その利点を強調している記事があるので
下記のリンクを参照して頂きたい。