ABAP アプリケーションサーバーのファイルをアップロード、ダウンロードする方法

  ファイル入出力

概要

アプリケーションサーバーからファイルを読み込んだり、書き込んだりする方法はOPEN DATASET命令を使用する事で可能です。
ローカルとのやりとりのように内部テーブルを使用する事はできず、一行ずつ書き込む、又は読み込む必要があります。
また、外部システムと連携する場合は固定長のか、可変長なのか、また、可変長の場合はタブ区切り・カンマ区切りなのかをきちんと確認しておく必要があるだろう。

サンプルコード:読み込み

TYPES:
  BEGIN OF t_file,
    data(1000) TYPE c,
  END OF t_file.

TYPES:
  BEGIN OF t_data,
    col1(10) TYPE c,
    col2(10) TYPE c,
    col3(10) TYPE c,
  END OF t_data.

DATA:
  v_file  TYPE string,
  v_cnt   TYPE i,
  wa_file TYPE t_file,
  it_file TYPE TABLE OF t_file,
  wa_data type t_data,
  it_data type table of t_Data.

CONSTANTS:
  c_tab type c
        value cl_abap_char_utilities=>horizontal_tab.

v_file = '/usr/sap/trans/test.txt'.

OPEN DATASET v_file
  FOR INPUT IN TEXT MODE ENCODING DEFAULT WITH WINDOWS LINEFEED.
IF sy-subrc <> 0.
*    MESSAGE XXX WITH v_file.
ENDIF.

DO.
  READ DATASET v_file INTO wa_file.
  CASE sy-subrc.
    WHEN 0.
      APPEND wa_file TO it_file.
    WHEN 4.
      EXIT.
  ENDCASE.
ENDDO.

CLOSE DATASET v_file.

LOOP AT it_file INTO wa_file.
  v_cnt = v_cnt + 1.

* ヘッダ行がある場合は、無視する
  IF v_cnt <= 1.
    CONTINUE.
  ENDIF.

  SPLIT wa_file AT c_tab
   INTO wa_data-col1
        wa_data-col2
        wa_data-col3.

  APPEND wa_data TO it_data.

ENDLOOP.

説明

まず、OPEN DATASET命令でファイルを開きます。他のプログラムがファイルが開いているとエラーとなります。
今回は、WINDOWS LINEFEEDと記述しているがこれは改行コードがCRLFになっている為である。もし改行コードがLFの場合はUNIX LINEFEEDとする必要がある。
また、ファイルが読み込めなかった時はENCODINGの指定とファイルの文字コードも確認してみてください。
ファイルが読み込めた場合は、READ DATASET命令により一行読み込み内部テーブルに書き込むというのを繰り返します。
この時取得した値はフラットなデータである事に注意してください。その後、定義に合わせてヘッダを取り除いたり、区切ったりという加工をしなければいけません。

サンプルコード:書き込み

OPEN DATASET v_file FOR OUTPUT
  IN TEXT MODE ENCODING DEFAULT WITH WINDOWS LINEFEED.
IF sy-subrc <> 0.
*    MESSAGE XXX WITH v_file.
ENDIF.

LOOP AT it_data INTO wa_data.
  CONCATENATE
    wa_data-col1
    wa_data-col2
    wa_data-col3
         INTO wa_file SEPARATED BY c_tab.

  TRANSFER wa_file TO v_file.
ENDLOOP.

説明

同じようにOPEN DATASET命令でファイルを開きます。存在しなくても問題ありません。
次に内部テーブルの値をフラットなデータに加工(今回はタブ区切り)にしTRANSFER命令を使用する事でファイルへ書き込む事ができます。

ローカルのテキストファイルを扱う場合はこちらを参照
ローカルのEXCELファイルを扱う場合はこちらを参照