PR

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

初めて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をコピーしました