注目キーワード

RPGⅣで翌日かどうかを判定する処理

対象の日付が、今日の日付を基軸として翌日か翌日以外かを表示する処理になります。

自由形式 (Free-Form)

自由形式のプログラムは、より現代的なRPG IVの構文を使用しており、読みやすく、理解しやすいです。プログラムは以下のステップで構成されています:

  1. 日付の宣言と初期化: 現在日付(WK_NOW)と対象日付(WK_TARGET)を数値型で宣言し、対象日付は初期値を持ちます。
  2. 現在日付の計算: 現在のシステム日付から年、月、日を取得し、YYMMDD形式でWK_NOWに設定します。
  3. 日付の比較: %DIFFビルトイン関数を使用して、WK_TARGETWK_NOWの日付差を計算します。
  4. 条件判定: 日付差が1日ならば「翌日です」、それ以外は「翌日ではない」と表示します。

このプログラムは、RPG IVの関数と日付処理機能を効果的に利用しています。

フリーフォーム

// プロシージャを宣言します
DCL-PROC DSP_TOMORROW;

  // 変数を宣言し初期化
  DCL-S Today ZONED(8:0) INZ(%DEC(%CHAR(%DATE():*ISO0):8:0));
  DCL-S TargetDate ZONED(8:0) INZ(20240401);
  DCL-S DaysDiff ZONED(3:0);

  // 対象日付と今日の日付の差を計算
  DaysDiff = %DIFF(%DATE(TargetDate): %DATE(Today): *DAYS);

  // 日付を比較して翌日かどうかを判定
  IF DaysDiff = 1;
    DSPLY '翌日です';
  ELSE;
    DSPLY '翌日ではない';
  ENDIF;

  // プロシージャを終了
  RETURN;

END-PROC;

固定長形式 (Fixed-Form)

固定長形式のプログラムは、RPG IVの古いスタイルを反映しており、以下のように構成されています:

  1. 変数の宣言: WK_DIFF変数を宣言し、比較結果を保持します。
  2. 日付の設定: 日付を直接数値として設定し、DATE_S(現在日付)とDATE_N(比較日付)に移動します。
  3. 日付の比較: %DIFF関数を用いて日付間の差を計算し、WK_DIFFに格納します。
  4. 表示: 計算された日数差をディスプレイに表示します。

このスタイルでは、C言語スタイルの操作子(C行)と古いRPGの操作コード(例:MOVEL, Z-ADD)を使用しています。日付は手動で設定する必要があり、動的には計算されません。

固定長

RPGLEの固定長での記述方法も記載しておきます。

日付の比較をして、比較日数を表示する処理になります。

     H            Y                                     1 
     D WK_DIFF         S              2S 0
      *******************************************************
     C                   Z-ADD      20240410        WKNOW
     C                   MOVEL     WKNOW          DATE_S
     C                   Z-ADD      20240501        WKHIKAKU          8 0
     C                   MOVEL     WKHIKAKU      DATE_N
     C                   EVAL        WK_DIFF = %DIFF(DATE_N:DATE_S:*DAYS)
     C                   DSPLY      WK_DIFF

総合的なフィードバック

  • 自由形式のコードは、現代的なRPG IV開発に適しており、保守性が高く、拡張しやすいです。
  • 固定長形式のコードは、レガシーシステムで見られるスタイルであり、新しい開発では推奨されませんが、既存のシステムを理解するためには役立ちます。

どちらの形式も有効ですが、新しいプロジェクトや保守の容易さを考えると、自由形式を推奨します。日付の動的な計算と現代的なプログラミング慣行が組み込まれているためです。

最新情報をチェックしよう!