V7R5 TR3で提供された %LEFT
を使ってみた。%RIGHT
も同時にリリースされているが、右になるだけなので 検証は %LEFT
のみ。
コードサンプル抜粋
// D*-********************************************************************
// D*-* 変数定義 **
// D*-********************************************************************
DCL-S WTIMESTAMP TIMESTAMP ; //タイムスタンプ
DCL-S WDATE8 ZONED(8:0) ; //日付
DCL-S WTIME6 ZONED(6:0) ; //時刻
DCL-S W#STR11 CHAR(32) ; //文字列(固定長
DCL-S W#STR12 VARCHAR(32) ; //文字列(可変長
DCL-S W#STR21 VARCHAR(32) CCSID(*UTF8) ; //文字列(UTF-8可変長
DCL-S W#STR22 VARCHAR(32) CCSID(*UTF8) ; //文字列(UTF-8可変長
// C*-********************************************************************
// C*-* メインルーチン **
// C*-********************************************************************
//初期処理
EXSR @INZ ;
//左より取得
W#STR11 = 'ABCDEFGHIJKL' ;
W#STR12 = %LEFT(W#STR11 : 08 ) ;
DSPLY W#STR12 ;
W#STR11 = '牛田 吉樹' ;
W#STR12 = %LEFT(W#STR11 : 08 ) ;
DSPLY W#STR12 ;
W#STR21 = '牛田 吉樹' ;
W#STR22 = %LEFT(W#STR21 : 08 ) ;
DSPLY W#STR22 ;
結果、感想
留意点は、バイト数指定のため、UTF-8 の文字列は取得箇所が異なる点。
あとこの手の文字列操作系関数は、SBCS圏内の方々には重宝するのだろうが、DBCS圏内の我々は、結局 x0e,x0f
の調整が必要となり、皆さん自作サブルーチンを作る状況は変わらないと思われます。サンプルコードでも想定どおり千切れています。
SBCSと判っているケースでは、コードの見通しが良いかも知れません。文字列に関しては、DBCS圏内の永遠のテーマに思えてしまいますね。