STRING_SPLIT_AT_POSITIONは、固定長の文字項目を指定位置で前半・後半に分ける汎用モジュールです。元記事の「指定したバイト数で分割する」という説明は誤解を招くため、位置による分割と、外部ファイルなどで必要になるバイト長の判定を分けて説明します。
指定位置で分割するABAP例
以下は10桁の英数字を、先頭5桁と残り5桁に分ける例です。
DATA: lv_text TYPE c LENGTH 10 VALUE '0123456789',
lv_left TYPE c LENGTH 6,
lv_right TYPE c LENGTH 6.
CALL FUNCTION 'STRING_SPLIT_AT_POSITION'
EXPORTING
string = lv_text
pos = 5
IMPORTING
string1 = lv_left
string2 = lv_right
EXCEPTIONS
string1_too_small = 1
string2_too_small = 2
pos_not_valid = 3
OTHERS = 4.
CASE sy-subrc.
WHEN 0.
WRITE: / lv_left, / lv_right.
WHEN 1 OR 2.
WRITE / '出力先の長さが不足しています'.
WHEN 3.
WRITE / '分割位置が不正です'.
WHEN OTHERS.
WRITE / '文字列の分割に失敗しました'.
ENDCASE.
SAP公式のサンプルでも、必須入力はSTRINGとPOS、結果はSTRING1とSTRING2です。出力先の長さが足りない場合、位置が不正な場合の例外を確認して処理します。利用中のシステムではSE37でインターフェースとテスト結果を確認してください。
「指定バイト数」と混同しない
文字の位置と、特定の文字コードに変換した後のバイト数は別です。日本語などを含むデータを外部システムの「nバイト以内」に収めたい場合は、この汎用モジュールにPOS = nを渡すだけでは要件を満たせません。送信先の文字コードへ変換したバイト列の長さを確認し、文字の途中で切らない設計が必要です。
単純な固定長フィールドの分割ならABAPの部分文字列も選択肢です。例外処理や保守性を含めて、対象リリースの開発方針に合わせて選びましょう。
参考・関連記事
- 汎用モジュール一覧:文字列操作の関連機能を探す
- 文字列の全角・半角変換:文字の扱いを考える際の関連記事
- バグの少ないABAPプログラミングの基本:境界値と例外を意識する