ABAPでファイル関連の処理を行う「OPEN DATASET命令」について解説します。
OPEN DATASET命令を利用することで、アプリケーションサーバ上のファイルを開いてファイルの中身を書き換えたり削除したいすることが可能になります。
このページでは、OPEN DATASET命令の基本的な使い方と処理の内容、各種オプションについて整理して解説していきます。
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 .
ここから、上記構文ルールを理解するために必要な知識を1個1個解説していきます。
ファイル(パス+ファイル名)
OPEN DATASETの直後には「ファイル」を指定する必要があります。
「ファイル」は、「ディレクトリのパス」+「ファイル名」で構成されます。(パスを含めない場合、SAP本体が存在するパスが指定されるようです。(未検証情報))
インターフェースで送られてきたファイルは大体決まった場所に配置されるため、通常はその配置されているパスと、取り込みたいファイル名をあらかじめ結合しておきます。OPEN DATASET命令の前でCONCATENATE命令で「パス+ファイル名」の値を変数に格納する場合を多く見かけます。
OPEN DATASET命令と合わせて覚えておきたいのが、論理パス/論理ファイルの仕組みです。
以下の記事で詳細を解説しておりますので、是非ご覧ください。
アクセスタイプ(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」オプションが採用されるため、文字化けの原因となることが多いです。
- 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 E001(ZCM01) "テーブル &1 に &2 が存在しません WITH TVKO "&1 P_VKORG. "&2
画面上にメッセージを出力する命令です。
ユーザにエラーの内容や次のアクションを示すために用いられます。詳しくは以下の記事で解説しております。
SAP / ABAPを1から学習したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!