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
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
| User | Count |
|---|---|
| 6 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |