2バイトの文字列の比較方法を教えて下さい。DBに登録されている値(Jタイプ32バイト)の文字列がとある固定値(2バイト文字で5文字 例:あああああ)と一致するかどうかをIF判定をしたいのですが、以下の方法以外にもう少し良い方法がありましたら、教えて頂けませんでしょうか。<とりあえず望む結果が得られた方法>・'あああああ '(全角スペース)を入れたワーク2(DEFINEで定義)とDBの値を比較<試してダメだったこと>・DBの値をSUBSTで5文字に切り出してワーク1(12バイト)に入れて、'あああああ'と比較・DBの値をSUBSTで5文字に切り出してワーク1(12バイト)に入れて、'あああああ'を入れたワーク2(12バイト)と比較・DBの値を、'あああああ'を入れたワーク2(DEFINEで定義)と比較 ⇒これは、ワーク2のスペースが半角になってしまいました
ILE-RPG で先頭文字より比較したのであれば%SUBST を使ってD STR_1 C CONST(' 東京都港区 ')D STR_2 C CONST(' 東京都 ') IF %SUBST(STR_1:1:7) = %SUBST(STR_2:1:7) : ENDのようにして比較すればスマートな記述で正しく動作しますのでお試しください。
> ILE-RPG で先頭文字より比較したのであれば> > %SUBST を使って> D STR_1 C CONST(' 東京都港区 ')> D STR_2 C CONST(' 東京都 ')> > IF %SUBST(STR_1:1:7) = %SUBST(STR_2:1:7)> :> END> > のようにして比較すればスマートな記述で正しく動作しますので> お試しください。> IKDさん、ご回答ありがとうございます。D C#TEXT C CONST(' 東京都港区 ')C IF C#TEXT = %SUBST(DBの項目ID:1:11)で試してみましたが、IF判定はFALSEになりました。%SUBST(DBの項目ID:1:12)でも試してみましたが、ダメでした。
それはダメだと思います。IF C#TEXT = %SUBST( ...) の C#TEXT には港区0/Fの0/F も比較の文字として含まれています。つまり 12 バイトです。従って この比較はつねに FALSE の結果となります。面倒でも IF %SST(C#TEXT:1:11) = %SUBST( ... ) として11 バイトとして 0/0f を比較からはずした IF文で比較してください。