*-- 項目定義 DATA: LV_STR TYPE I, LV_OFFSET TYPE I, LV_COUNT_QUOTE TYPE I, LV_JUDGE TYPE STRING. DATA :C4_FILE TYPE STRING. DATA :L_TEST1 TYPE STRING. DATA :L_TEST2 TYPE STRING. DATA:L_BEG TYPE I. DATA:L_END TYPE I. TYPES: BEGIN OF OFFSET, BEG TYPE I, END TYPE I, END OF OFFSET. DATA L_R_OFFSET TYPE OFFSET. DATA L_I_OFFSET TYPE STANDARD TABLE OF OFFSET. DATA L_I_STRING TYPE STANDARD TABLE OF STRING. ** ダブル引用符「""」の削除 * REPLACE ALL OCCURRENCES OF K_WQUOTE IN C4_FILE * WITH K_NULL. * CSV * ab"c,d2 te""st ww,w qq:" ee C4_FILE = ‘"ab""c,d2","te""""st","ww,w","qq:""",ee‘. * 文字数(バイト数)の取得 LV_STR = STRLEN( C4_FILE ). * 左から1バイトずつ判定 DO. CLEAR: LV_JUDGE. LV_JUDGE = C4_FILE+LV_OFFSET(1). * 「"」(引用符)の場合、引用符カウントをインクリメント IF LV_JUDGE = K_DOQ. LV_COUNT_QUOTE = LV_COUNT_QUOTE + 1. * 「,」(カンマ)の場合、区切り文字判定を実施 ELSEIF LV_JUDGE = K_COM. * 「"」(引用符)が偶数値、かつ、「,」(カンマ)の場合、区切り判定 IF ( LV_COUNT_QUOTE MOD 2 ) = 0. * 指定区切り文字(タブ)をセット REPLACE SECTION OFFSET LV_OFFSET LENGTH 1 OF C4_FILE WITH K_TAB. L_R_OFFSET-END = LV_OFFSET - 1. APPEND L_R_OFFSET TO L_I_OFFSET. L_R_OFFSET-BEG = LV_OFFSET + 1. * 「"」(引用符)が奇数値、かつ、「,」(カンマ)の場合、区切りではない ELSE. * 処理なし ENDIF. ELSE. * 処理なし ENDIF. * オフセット位置をインクリメント LV_OFFSET = LV_OFFSET + 1. * 判定対象の文字数を超過する場合、処理を抜ける IF LV_OFFSET = LV_STR. EXIT. ENDIF. ENDDO. SORT L_I_OFFSET BY END DESCENDING. LOOP AT L_I_OFFSET INTO L_R_OFFSET. * 指定区切り文字(タブ)をセット REPLACE SECTION OFFSET L_R_OFFSET-END LENGTH 1 OF C4_FILE WITH K_NULL. * 指定区切り文字(タブ)をセット REPLACE SECTION OFFSET L_R_OFFSET-BEG LENGTH 1 OF C4_FILE WITH K_NULL. ENDLOOP. * ダブル引用符「""」の削除 REPLACE ALL OCCURRENCES OF K_WQUOTE IN C4_FILE WITH K_DOQ. split C4_FILE at K_TAB INTO TABLE L_I_STRING.
---------------
csvファイル取込
原文:https://www.cnblogs.com/mordred0123/p/10831158.html