ABAPでファイル関連の処理を行う「OPEN DATASET命令」について解説します。
OPEN DATASET命令を利用することで、アプリケーションサーバ上のファイルを開いてファイルの中身を書き換えたり削除したいすることが可能になります。
このページでは、OPEN DATASET命令の基本的な使い方と処理の内容、各種オプションについて整理して解説していきます。
- OPEN DATASET命令の使い方
- オプション①―アクセスタイプの指定方法
- オプション②―ファイルの開き方(格納タイプ)の指定方法
帳票関連のプログラムを開発する機会のある方であれば理解必須の内容ですので最後までご覧ください。
OPEN DATASET命令とは
OPEN DATASET命令は、アプリケーションサーバ上のファイルを開く命令です。
ファイルの中身を書き換えたり削除したりする場合には、まずこのOPEN DATASET命令を利用してファイルを開く必要があります。
他システムからインターフェースされてきたファイルを取り込む際によく使われる命令です。
OPEN DATASET命令:構文ルール
OPEN DATASET (ファイル) FOR (アクセスタイプ) IN (格納タイプ).
指定したアクセスタイプと格納タイプをもとに指定したファイルを開きます。
ここでは、上記構文ルールを理解するために必要な前提知識を解説していきます。
ファイル(パス+ファイル名)
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がセットされます。
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
- UTF-8
- NON-UNICODE
IN BINARY MODE(バイナリモード)
~IN BINARY MODE~
OPEN DATASET FILE_PATH FOR INPUT IN BINARY MODE.
その名の通り、バイナリデータとしてファイルを開くモードです。
バイナリデータは、ファイルの内容が行として構成されてはいません。
ABAPを1から学習したい方は
ABAPを1から学習したい方は、以下の記事をご覧ください。
こちらの記事では、ABAPを用いて簡単な機能を実装できるようにするための必須知識を解説しております。今、本サイトで一番人気の記事ですので是非合わせてご覧ください。