PR

【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から学習したい方は

初めてABAPを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。

ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
ABAPSAP
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました