新規投稿 記事一覧 ホーム
●ご利用方法,ご利用に際しての規約はこちらをお読みください。
こちらからの投稿は、先頭に表示されているコメントへの返信になります。
2バイト文字列の比較方法 kayo さん [ 9月3日(月) 16時39分 ]

    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のスペースが半角になってしまいました

    RE:2バイト文字列の比較方法 IKD さん [ 9月4日(火) 17時24分 ]

      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

      のようにして比較すればスマートな記述で正しく動作しますので
      お試しください。

      RE:2バイト文字列の比較方法 kayo さん [ 9月5日(水) 9時44分 ]

        > 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)でも試してみましたが、ダメでした。

        RE:2バイト文字列の比較方法 IKD さん [ 9月5日(水) 11時3分 ]

          それはダメだと思います。

          IF C#TEXT = %SUBST( ...) の C#TEXT には港区0/Fの0/F も比較の文字として
          含まれています。つまり 12 バイトです。
          従って この比較はつねに FALSE の結果となります。
          面倒でも IF %SST(C#TEXT:1:11) = %SUBST( ... ) として
          11 バイトとして 0/0f を比較からはずした IF文で比較してください。

お名前
パスワード
e-mailアドレス
タイトル
ホームページ
アドレス