Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Program to upload CSV file into table

Former Member
0 Likes
993

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

6 REPLIES 6
Read only

LucianoBentiveg
Active Contributor
0 Likes
822

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.

Read only

former_member181966
Active Contributor
0 Likes
822

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 this’ll give you idea!!

<b>P.S award the points.</b>

Good luck

Thanks

Saquib Khan

"Some are wise and some are otherwise"

Read only

Former Member
0 Likes
822

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

Read only

0 Likes
822

hi,

Check this link to know more

http://www.sapdevelopment.co.uk/file/file_uptabpc.htm

Regards,

Santosh

Read only

0 Likes
822

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...

Read only

0 Likes
822

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