【ABAP】3分で解説―OPEN DATASET命令

ABAP

ABAPでファイル関連の処理を行う「OPEN DATASET命令」について解説します。

OPEN DATASET命令を利用することで、アプリケーションサーバ上のファイルを開いてファイルの中身を書き換えたり削除したいすることが可能になります。

このページでは、OPEN DATASET命令の基本的な使い方と処理の内容、各種オプションについて整理して解説していきます。

このページで学べる内容
  • OPEN DATASET命令の使い方
  • オプション①―アクセスタイプの指定方法
  • オプション②―ファイルの開き方(格納タイプ)の指定方法
  • メッセージの受け取り「MESSAGEオプション」

SAPエンジニア・ABAPerを目指す方であれば理解必須の基本知識です。特に、インターフェース関連のチームに配属された場合にはOPEN DATASETの理解なしではコーディングが進みません。

是非最後までご覧ください。

スポンサーリンク

OPEN DATASET命令とは

OPEN DATASET命令は、アプリケーションサーバ上のファイルを開く命令です。

ファイルの中身を書き換えたり削除したりする場合には、まずこのOPEN DATASET命令を利用してファイルを開く必要があります。

他システムからインターフェースされてきたファイルを取り込む際によく使われる命令です。

OPEN DATASET命令:構文ルール

OPEN DATASET (ファイル) FOR (アクセスタイプ) IN (格納タイプ).


OPEN DATASET (ファイル) FOR (アクセスタイプ) IN (格納タイプ).

指定したアクセスタイプ格納タイプをもとに指定したファイルを開きます。

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

ここから、上記構文ルールを理解するために必要な知識を1個1個解説していきます。

ファイル(パス+ファイル名)

OPEN DATASETの直後には「ファイル」を指定する必要があります。

「ファイル」は、「ディレクトリのパス」+「ファイル名」で構成されます。(パスを含めない場合、SAP本体が存在するパスが指定されるようです。(未検証情報))

インターフェースで送られてきたファイルは大体決まった場所に配置されるため、通常はその配置されているパスと、取り込みたいファイル名をあらかじめ結合しておきます。OPEN DATASET命令の前でCONCATENATE命令で「パス+ファイル名」の値を変数に格納する場合を多く見かけます。

合わせて覚えておきたい知識

アクセスタイプ(FOR~)

アクセスタイプとは、どのようなモード(上書き?読み取り専用?・・・etc)でファイルを開くかを指定する項目です。

FOR INPUT(読み取り専用)

OPEN DATASET <dataset> FOR INPUT.

OPEN DATASET FILE_PATH
  FOR INPUT
  IN TEXT MODE .

INPUTは読み込みモードです。単純にファイルの内容を取り込みたい場合に使用します。

INPUTモードを指定した場合は、ファイルが存在しない場合エラーとなります。SY-SUBRCには、8がセットされます。

この性質を利用し、例えばファイルが存在するかどうか?を検証するために、OPEN DATASET命令を用いることも可能です。

FOR OUTPUT(書き込み専用)

OPEN DATASET <dataset> FOR OUTPUT.

OPEN DATASET FILE_PATH
  FOR OUTPUT
  IN TEXT MODE.

OUTPUTを指定すると、書き込みモードでファイルを開きます。後続の処理でファイルの内容を書き換えたい場合は、このOUTPUTモードを指定する必要があります。後述するAPPENDINGモードと異なり、ファイルの内容はすべて上書きで更新されます。

またOUTPUTモードを指定した場合に、対象のファイルが存在しない場合は、ファイルが自動的に新規作成されることになります。つまり、インターフェース用のファイルを作成したい場合などには、このOUTPUTモードを利用します。

FOR APPENDING(追加)

OPEN DATASET <dataset> FOR APPENDING.

OPEN DATASET FILE_PATH
  FOR APPENDING
  IN TEXT MODE.

APPENDINGモードでは、OUTPUTモードとは異なりファイルの内容を上書きするのではなく、ファイル中のデータの最終行にデータを追加する場合に利用します。

対象のファイルが存在しない場合には、OUTPUTモードと同様ファイルが新規作成されます。

このオプションは、例えばログファイルにデータを書き込むような場合に適しています。

格納タイプ(IN~)

最後に格納タイプについての解説です。

格納タイプというと言葉が難しくなるのですが、ここでは対象のファイルを「バイナリファイル」として開くのか、「テキストファイル」として開くのかを指定するだけです。

IN TEXT MODE(テキストモード)

IN TEXT MODE ENCODING DEFAULT/UTF-8/NON-UNICODE~

OPEN DATASET FILE_PATH 
  FOR INPUT
  IN TEXT MODE ENCODING DEFAULT.

テキストモードで開く場合に「IN TEXT MODE」を使用します。こちらのほうが圧倒的に利用頻度が高いです。テキストモードでないと「行構造」を持ったファイルとして扱うことができません。

テキストモードで開く場合には、ENCODINGオプションを指定します。

なくても命令自体は成立しますが、ENCODINGオプションを利用しない場合、暗黙的に「NON-UNICODE」オプションが採用されるため、文字化けの原因となることが多いです。

ENCODINGオプション
  • DEFAULT
    ⇒Unicodeシステムの場合は、UTF-8オプションを指定した場合と同じ。
    ⇒Unicodeシステムでない場合は、NON-UNICODEオプションを指定した場合と同じ。
  • UTF-8
  • NON-UNICODE

IN BINARY MODE(バイナリモード)

IN BINARY MODE~

OPEN DATASET FILE_PATH 
  FOR INPUT
  IN BINARY MODE.

その名の通り、バイナリデータとしてファイルを開くモードです。

ただし、バイナリデータとしてファイルを開く必要があるタイミングはそれほど多くないため、あくまでも知識の一つとして覚えておけばOKです。

メッセージの受け取り:MESSAGEオプション

MESSAGE~

DATA MESS_TEST TYPE STRING.

OPEN DATASET FILE_PATH 
  FOR INPUT
  IN BINARY MODE
  MESSAGE MESS_TEST.

* 受け取ったメッセージの出力
IF SY-SUBRC <> 0.
  MESSAGE MESS_TEST TYPE 'E'.
ENDIF.

MESSAGEオプションを利用すると、OPEN DATASET命令の結果(ファイルを開くときに何かしらのメッセージがOSから返された場合)を指定した変数に格納することが可能です。

このオプションはMESSAGE命令と併用する場面が多いため、合わせてMESSAGE命令についても理解を深めておきましょう。

MESSAGE命令
*メッセージを出力する
MESSAGE E001(ZCM01)      "テーブル &1 に &2 が存在しません
WITH     
  TVKO     "&1
  P_VKORG.  "&2

画面上にメッセージを出力する命令です。

ユーザにエラーの内容や次のアクションを示すために用いられます。詳しくは以下の記事で解説しております。

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

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

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

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

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

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