【ABAP】READ DATASET命令(ファイル読み込み)を3分で解説

ABAP

サーバー上のファイルを読み込む命令―READ DATASET命令について解説します。

READ DATASET命令は、OPEN DATASET命令で開いたファイルの中身を1行1行読み込み指定した変数に格納する処理です。

このページでは、READ DATASET命令の使い方や注意点をサンプルコード付きでご説明します。

このページで学べる内容
  • 前提:OPEN DATASET命令
  • READ DATASET命令の使い方
    • MAXIMUM LENGTHオプション
    • (ACUTUAL) LENGTHオプション

ABAPerであれば知らないと恥ずかしい基本知識です。是非最後までご覧ください。

スポンサーリンク

前提:OPEN DATASET命令

OPEN DATASET命令を理解している方は本章は読み飛ばしていただいてOKです。

前提となる内容ですが、サーバー上に存在するファイルを読み込んだり書き込んだりするためには、あらかじめOPEN DATASET命令を用いてファイルを開いておく必要があります。

OPEN DATASET命令とは?

OPEN DATASET命令は、サーバー上のファイル操作を行う命令です。

OPEN DATASET (ファイル) FOR (アクセスタイプ) IN (格納タイプ).
OPEN DATASET命令の基本
  • 開くファイルを指定
  • アクセスタイプの指定(読み取りモード?上書きモード?)
  • 格納タイプの指定(バイナリで開く?テキストで開く?)
OPEN DATASET FILE_PATH
  FOR INPUT
  IN TEXT MODE .

詳しい構文ルールや使い方は下記のページで解説しております。

今回解説するREAD DATASET命令は、OPEN DATASET命令でオープンしたファイルに対してレコードを書き込む処理を行います。したがって、基本的にはOPEN DATASET命令とセットで用いる必要があるという点に注意しましょう。

READ DATASET命令

READ DATASET (ファイル名) INTO (変数).

READ DATASET命令は、(ファイル名)に指定したファイルからレコードを1行読み込み、(変数)にその内容を代入します。

(変数)に代入された値は、構造化されたデータではない(フラット)なので、タブやスペースなどを目印に文字分割等を行う必要があります。

READ DATASET命令を1度実行しただけでは、ファイルの1行しか読み込まれませんので、ファイルの内容をすべて読み込みたいような場合は以下のようにコーディングします。

* ファイルの内容を内部テーブルに格納
WHILE SY-SUBRC = 0.
  READ DATASET file INTO LS_file.
  IF SY-SUBRC = 0.
    APPEND LS_FILE TO LT_FILE.
    CLEAR LS_FILE.
  ELSE.
    EXIT.
  ENDIF.
ENDDO.

READ DATASET命令を実行すると、システム項目「SY-SUBRC」は以下のように設定されます。

SY-SUBRCの値
  • 0・・・データ読み込み成功 / 最終行までは読み込んでいない
  • 4・・・データ読み込み成功 / 最終行を読み込んだ状態

上記サンプルコードでは、SY-SUBRCをうまく利用しています。理解が進むよう追加でサンプルコードを載せておきます。

DO.
  READ DATASET file INTO LS_file.
  " 最終行まで読み込んだら処理を抜ける
  CASE SY-SUBRC.
    WHEN 0.
      APPEND LS_file TO LT_file.
    WHEN 4.
      EXIT.
  ENDCASE.
ENDDO.

「MAXIMUM LENGTH」オプション

READ DATASET (ファイル名) INTO (変数) MAXIMUM LENGTH (項目長).

MAXIMUM LENGTH を指定することでファイルから読み込む最大桁長を定義することができます。

ただし、読み込むレコードの最大桁超を定義しなくてはならない場合。

かなり複雑な処理となってしまうため、個人的にはあまりおすすめしないオプションの1つです。

(ACTUAL)LENGTHオプション

READ DATASET (ファイル名) INTO (変数) ACTUAL LENGTH (変数i).

LENGTHオプションを利用することで、(変数i)に読み込んだ文字数を代入することができます。

例えば、読み込み対象のファイルに思わぬ空白行がある場合にエラーハンドリングをかけたいような場合で利用することができます。

DATA LEN TYPE i.

* ファイルの内容を内部テーブルに格納
WHILE SY-SUBRC = 0.
  READ DATASET file INTO LS_file LENGTH LEN.
  " 読み込んだレコードが0件の場合は処理を抜ける
  IF LEN = 0.
    EXIT.
  ENDIF.
  IF SY-SUBRC = 0.
    APPEND LS_FILE TO LT_FILE.
    CLEAR LS_FILE.
  ELSE.
    EXIT.
  ENDIF.
ENDDO.

これでREAD DATASET命令の理解はOK!

SAP / ABAPを1から学習したい方は

SAP / ABAPを1から学習したい初心者の方向けに、できるだけ網羅的にABAPが理解できるよう以下ページに知識体系を整理しています。

特に初心者のうちは、どこから学べばよいか?どう勉強すれば良いか?すらわからない状態になりがち。

ある程度の知識を持ったうえで、はじめて実践的な理解へとつながります。

是非、一度ご覧になってみてください。

タイトルとURLをコピーしました