ファイル連携で完全なパスを受け取った後、ログにはファイル名だけを表示し、ディレクトリは別に扱いたいことがあります。汎用モジュールTRINT_SPLIT_FILE_AND_PATHは、フルパスをディレクトリ部分とファイル名部分に分けます。
たとえば/sap/interface/out/orders.csvなら、ディレクトリは/sap/interface/out/、ファイル名はorders.csvという考え方です。実際の区切り文字と戻り値は利用中のOS・リリースで確認してください。
TRINT_SPLIT_FILE_AND_PATHの使い方
DATA: lv_full_name TYPE string VALUE '/sap/interface/out/orders.csv',
lv_directory TYPE string,
lv_base_name TYPE string.
CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH'
EXPORTING
full_name = lv_full_name
IMPORTING
file_path = lv_directory
stripped_name = lv_base_name
EXCEPTIONS
x_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
" 入力パスと実行環境を確認する
RETURN.
ENDIF.
" lv_directory : ディレクトリ部分
" lv_base_name : ファイル名部分
FULL_NAMEにフルパスを渡し、FILE_PATHとSTRIPPED_NAMEを受け取ります。ここで行うのは文字列の分割です。ファイルが実在するか、権限があるか、開けるかまでは判定しません。
使う前に確認したい点
- 末尾が区切り文字の「ディレクトリだけの入力」やファイル名だけの入力では、期待する結果か確認する。
- アプリケーションサーバーとSAP GUIのPCではOSの区切り文字が違う場合がある。対象環境のパスを使って試す。
- 分割後の文字列を再結合してファイル操作に使うなら、区切り文字の重複・欠落や許可外パスへの移動を確認する。
新規開発では、利用中のABAPリリースで提供されるCL_FS_PATHなどのパス操作クラスも候補です。標準汎用モジュールの利用可否とインターフェースはSE37で確かめてください。
論理ファイルとの組み合わせ
サーバー上の出力先を環境ごとに切り替えるなら、パスの文字列を直接書く前にFILE_GET_NAMEまたはFILE_GET_NAME_USING_PATHで完全な物理ファイル名を解決します。分割は、その後にディレクトリやファイル名を別用途で使う場合に行います。
参考・関連記事
- FILE_GET_NAME:論理ファイル名から物理ファイル名を取得する
- FILE_GET_NAME_USING_PATH:論理パスとファイル名を組み合わせる
- 汎用モジュール一覧:関連するABAP機能を探す