‎2006 May 12 4:42 PM - last edited on ‎2024 Feb 04 6:08 AM by postmig_api_4
Hi,
Does anybody know of any good ABAP program which loads CSV data into a table?
I know of one but it not very friendly as it doesnt take care of escape characters, separators etc..
thanks
‎2006 May 12 4:52 PM
Try this one:
REPORT ZMIGRA.
DATA: BEGIN OF ITAB OCCURS 0,
REG(255),
END OF ITAB,
MITAB LIKE ITAB OCCURS 0 WITH HEADER LINE,
KITAB(72) OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME.
PARAMETERS: FICHERO LIKE RLGRAP-FILENAME.
SELECTION-SCREEN SKIP 1.
PARAMETERS: TABLA LIKE DD02L-TABNAME OBLIGATORY.
SELECT-OPTIONS: KMPOLONG FOR ITAB-REG.
SELECT-OPTIONS: KMPOVALE FOR ITAB-REG.
PARAMETERS: POSICUT(3) TYPE N DEFAULT '001',
USEREXIT(15) DEFAULT 'ZUE_*',
TEST AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK B01.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.
DATA: BP(20).
FIELD-SYMBOLS: , .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR FICHERO.
DATA: FICHERO_IN LIKE RLGRAP-FILENAME.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = FICHERO_IN
MASK =
',All Files,.,Data Files,.dat,Text Files,.txt.'
MODE = 'O'
TITLE = 'Selecciona un fichero...'
IMPORTING
FILENAME = FICHERO
EXCEPTIONS
INV_WINSYS = 01
NO_BATCH = 02
SELECTION_CANCEL = 03
SELECTION_ERROR = 04.
AT SELECTION-SCREEN.
IF SSCRFIELDS-UCOMM = 'FC01'. PERFORM RELOAD. ENDIF.
IF SSCRFIELDS-UCOMM = 'FC02'. PERFORM EDIT_SRC. ENDIF.
INITIALIZATION.
INCLUDE .
MOVE '@42@' TO SSCRFIELDS-FUNCTXT_01.
MOVE '@0Q@' TO SSCRFIELDS-FUNCTXT_02.
PERFORM RELOAD.
END-OF-SELECTION.
PERFORM UP_FILE.
CHECK SY-SUBRC EQ 0.
PERFORM LOOP_ITAB.
FORM EDIT_SRC.
DATA: SRC(72) OCCURS 0 WITH HEADER LINE.
DATA: SRC3(72) OCCURS 0 WITH HEADER LINE.
DATA: SRC2(72) OCCURS 0 WITH HEADER LINE,
ANS(1).
DATA: MESSI(240),
LINEA TYPE I,
PROG(30),
DIRECTIVA(72).
DATA: F(240),
G TYPE I,
H(72).
REFRESH: SRC2, SRC3, SRC.
READ REPORT 'ZMIGRA_TOP' INTO SRC3.
CONCATENATE 'include' USEREXIT '.' INTO SRC2 SEPARATED BY ' '.
APPEND SRC2.
READ REPORT USEREXIT INTO SRC.
CHECK SY-SUBRC EQ 0.
SY-SUBRC = 4.
DATA: FT(1).
CLEAR FT.
WHILE SY-SUBRC NE 0 AND SY-SUBRC NE 2.
CLEAR SY-SUBRC.
EDITOR-CALL FOR SRC TITLE 'Modificando include.'.
IF SY-SUBRC NE 0.
SY-SUBRC = 2.
CHECK SY-SUBRC EQ 0.
ENDIF.
REFRESH SRC2.
SRC2 = 'report znadar_ejemplo.'. APPEND SRC2.
IF USEREXIT NP 'TOP'.
LOOP AT SRC3. SRC2 = SRC3. APPEND SRC2. ENDLOOP.
ENDIF.
LOOP AT SRC. SRC2 = SRC. APPEND SRC2. ENDLOOP.
SYNTAX-CHECK FOR SRC2 MESSAGE F LINE G WORD H.
CHECK SY-SUBRC NE 0.
MESSAGE S398(00) WITH ' Line: ' G '.' F.
ENDWHILE.
CHECK SY-SUBRC EQ 0.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'Have a Nice Dat... '
TEXT_QUESTION = 'Would you like to save the source ?'
ICON_BUTTON_1 = 'ICON_SYSTEM_SAVE'
ICON_BUTTON_2 = 'ICON_CANCEL'
DEFAULT_BUTTON = '1'
DISPLAY_CANCEL_BUTTON = 'X'
START_COLUMN = 25
START_ROW = 6
IMPORTING
ANSWER = ANS
EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS = 2.
CHECK ( ANS = '1' AND SY-SUBRC EQ 0 ).
INSERT REPORT USEREXIT FROM SRC.
ENDFORM.
FORM RELOAD.
CLEAR: KMPOLONG, KMPOVALE. REFRESH: KMPOLONG, KMPOVALE.
KMPOLONG-SIGN = KMPOVALE-SIGN = 'I'.
KMPOLONG-OPTION = KMPOVALE-OPTION = 'BT'.
SELECT * FROM DD03L WHERE TABNAME = TABLA.
KMPOLONG-HIGH = DD03L-FIELDNAME.
KMPOLONG-LOW = DD03L-INTLEN.
KMPOVALE-HIGH = DD03L-FIELDNAME.
KMPOVALE-LOW = '='.
APPEND: KMPOLONG, KMPOVALE.
ENDSELECT.
ENDFORM.
FORM LOOP_ITAB.
DATA: DI(20),
SI(20),
AX TYPE I,
BX TYPE I,
CX LIKE SY-INDEX,
DX LIKE AX, AL(1), SF(1), SS(1).
ASSIGN (TABLA) TO .
LOOP AT ITAB.
CLEAR MITAB. REFRESH MITAB.
AX = 1.
AL = ITAB-REG+POSICUT(AX).
SPLIT ITAB-REG AT AL INTO TABLE MITAB.
CLEAR .
LOOP AT KMPOLONG.
READ TABLE MITAB INDEX SY-TABIX.
IF SY-SUBRC NE 0.
CLEAR SY-SUBRC. CHECK SY-SUBRC NE 0.
ENDIF.
CONCATENATE TABLA '-' KMPOLONG-HIGH INTO DI.
ASSIGN (DI) TO .
AX = 0.
BX = KMPOLONG-LOW.
CONCATENATE 'ue_' TABLA '_' KMPOLONG-HIGH INTO BP.
PERFORM (BP) IN PROGRAM (USEREXIT) IF FOUND.
= MITAB-REG+AX(BX).
ENDLOOP.
CHECK SY-SUBRC EQ 0.
CONCATENATE 'ue_' TABLA INTO BP.
PERFORM (BP) IN PROGRAM (USEREXIT) IF FOUND.
LOOP AT KMPOVALE.
CONCATENATE TABLA '-' KMPOVALE-HIGH INTO DI.
ASSIGN (DI) TO .
SHIFT KMPOVALE-LOW LEFT.
= KMPOVALE-LOW.
CONCATENATE 'ue_' TABLA '_' KMPOLONG-HIGH '_CONST' INTO BP.
PERFORM (BP) IN PROGRAM (USEREXIT) IF FOUND.
ENDLOOP.
IF TEST = ' '.
INSERT (TABLA) FROM .
ENDIF.
IF SY-SUBRC NE 0.
CONCATENATE 'ue_' TABLA '_ERROR' INTO BP.
PERFORM (BP) IN PROGRAM (USEREXIT) IF FOUND.
ENDIF.
ENDLOOP.
ENDFORM.
FORM UP_FILE.
CLEAR: ITAB.
REFRESH: ITAB.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = FICHERO
FILETYPE = 'ASC'
TABLES
DATA_TAB = ITAB
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
GUI_REFUSE_FILETRANSFER = 8
OTHERS = 9.
ENDFORM.
‎2006 May 12 5:02 PM
DATA: BEGIN OF itab OCCURS 0,
vbeln LIKE vbak-vbeln,
ernam LIKE vbak-ernam,
END OF itab.
DATA itab2 LIKE TABLE OF KCDE_CELLS WITH HEADER LINE.
CALL FUNCTION 'KCD_CSV_FILE_TO_INTERN_CONVERT'
EXPORTING
i_filename = 'D:\data\upl.txt'
i_separator = ','
tables
e_intern = itab2
EXCEPTIONS
UPLOAD_CSV = 1
UPLOAD_FILETYPE = 2
OTHERS = 3
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT itab2.
SPLIT itab2-value AT ',' INTO itab-vbeln itab-ernam.
APPEND itab.
CLEAR itab.
ENDLOOP.
Hope thisll give you idea!!
<b>P.S award the points.</b>
Good luck
Thanks
Saquib Khan
"Some are wise and some are otherwise"
‎2006 May 12 5:03 PM
HI,
Use GUI_UPLOAD program to upload data into a flat type internal table.
Then use spilt statement to get the csv file into correspoding fields of an itab.
data: begin of itab occurs 0,
field(500),
end of itab.
data: begin of itab occurs 0,
field1(10),
field2(20),
field3(25),
field4(06),
end of itab.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = filename
FILETYPE = file_type
TABLES
DATA_TAB = itab
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
loop at itab.
split itab at ',' into itab_new-field1 itab_new-field2
itab_new-field3 itab_new-field4.
append itab_new.
Clear itab_new.
endloop.
REgards,
Ravi
‎2006 May 12 5:37 PM
hi,
Check this link to know more
http://www.sapdevelopment.co.uk/file/file_uptabpc.htm
Regards,
Santosh
‎2006 May 15 3:34 PM
wow lot of responses...let me see which one is best and will assign points then...
One thing I can say though is the 'KCD_CSV_FILE_TO_INTERN_CONVERT' module is not very user friendly...
‎2006 May 15 4:08 PM
Hi,
Go through this link
http://www.geocities.com/victorav15/sapr3/abapfun.html#ole
u will get all the function Module related to CSV file upload & download with description and Example
Message was edited by: Manoj Gupta