‎2007 Feb 17 9:02 AM
1) can any one tell how to read the multiple records from a file in application server, please send the complete code...
[ basically split command is not spliting at '#'....plz explain in detail.
2) can you please send the code how to use split command
3) can you please tell how to use the function module "upload_files" with example.
‎2007 Feb 17 9:14 AM
Hi Basker,
The below program which creates a session and reades multiple files from an application server...
REPORT ZBDC_BATCHINPUT.
TABLE DECLARATION********
TABLES : ZCLASS,
ZSEAT.
******STRUCTURE AND VARIABLE DECLARATION**************
DATA : BEGIN OF IT_CLASS,
CLASSID(2) TYPE C,
CLASSTYPE(12) TYPE C,
END OF IT_CLASS.
DATA : BEGIN OF IT_SEAT,
TOTALSEATS(3) TYPE C,
END OF IT_SEAT.
DATA : IT_BDC LIKE TABLE OF BDCDATA WITH HEADER LINE.
DATA : FILENAME1 TYPE STRING,
FILENAME2 TYPE STRING.
******END OF STRUCTURE AND VARIABLE DECLARATION**************
ASSIGNING FILE NAME*****************
<b>FILENAME1 = 'Give your application server file path here'</b>.
<b>FILENAME2 = 'Give your application server file path here'.</b>
*****END OF ASSIGNING FILE NAME****************
OPEN DATASET FILENAME1 FOR INPUT IN TEXT MODE ENCODING DEFAULT.
OPEN DATASET FILENAME2 FOR INPUT IN TEXT MODE ENCODING DEFAULT.
PERFORM OPEN_GROUP.
******************READING THE FIRST FILE****************
DO.
READ DATASET FILENAME1 INTO IT_CLASS.
IF SY-SUBRC = 0.
PERFORM BDC_HEADER USING 'ZBDC_BATCHINPUT' 9001.
PERFORM BDC_FIELDS USING 'BDC_OKCODE' 'SAVE'.
PERFORM BDC_FIELDS USING 'ZCLASS-CLASSID' IT_CLASS-CLASSID.
PERFORM BDC_FIELDS USING 'ZCLASS-CLASSTYPE' IT_CLASS-CLASSTYPE.
ELSE.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET FILENAME1.
******************END OF READING THE FIRST FILE****************
******************READING THE SECOND FILE****************
DO.
READ DATASET FILENAME2 INTO IT_SEAT.
IF SY-SUBRC = 0.
PERFORM BDC_HEADER USING 'ZBDC_BATCHINPUT' 9002.
PERFORM BDC_FIELDS USING 'BDC_OKCODE' 'SAVE'.
PERFORM BDC_FIELDS USING 'ZSEAT-TOTALSEATS' IT_SEAT-TOTALSEATS.
ELSE.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET FILENAME2.
******************END OF READING THE SECOND FILE****************
PERFORM BDC_TRANS USING 'ZTCODES'.
PERFORM CLOSE_GROUP.
CALL TRANSACTION 'SM35'.
****Subroutine BDC Header**************
FORM BDC_HEADER USING PROGRAMNAME SCREENNO.
CLEAR IT_BDC.
IT_BDC-PROGRAM = PROGRAMNAME.
IT_BDC-DYNPRO = SCREENNO.
IT_BDC-DYNBEGIN = 'X'.
APPEND IT_BDC.
ENDFORM.
****End of Subroutine BDC Header**************
****Subroutine BDC Fields**************
FORM BDC_FIELDS USING FNAME FVALUE.
CLEAR IT_BDC.
IT_BDC-FNAM = FNAME.
IT_BDC-FVAL = FVALUE.
APPEND IT_BDC.
ENDFORM.
****End of Subroutine BDC Fields**************
Subroutine BDC_OPEN_GROUP ***************
FORM OPEN_GROUP.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = 'BATCHX'
HOLDDATE = SY-DATUM
KEEP = 'X'
USER = SY-UNAME.
ENDFORM.
End of Subroutine BDC_OPEN_GROUP ***************
***********Subroutine BDC TRANSACTION ******************
FORM BDC_TRANS USING zTCODEs.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = zTCODEs
TABLES
DYNPROTAB = IT_BDC.
ENDFORM.
***********End of Subroutine BDC TRANSACTION ******************
Subroutine BDC_CLOSE_GROUP **********************
FORM CLOSE_GROUP.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDFORM.
End of Subroutine BDC_CLOSE_GROUP ***************
&----
*& Module USER_COMMAND_9001 INPUT
&----
text
----
MODULE USER_COMMAND_9001 INPUT.
CASE SY-UCOMM.
WHEN 'SAVE'.
INSERT ZCLASS.
WHEN 'NEXTSCREEN'.
CALL SCREEN 9002.
ENDCASE.
ENDMODULE. " USER_COMMAND_9001 INPUT
&----
*& Module USER_COMMAND_9002 INPUT
&----
text
----
MODULE USER_COMMAND_9002 INPUT.
CASE SY-UCOMM.
WHEN 'SAVE'.
INSERT ZSEAT.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_COMMAND_9002 INPUT
‎2007 Feb 17 11:32 AM
Hi Bhaskar,
1) It depends: If it is a text file, you can OPEN DATASET xyz IN TEXT MODE ENCODING NON-UNICODE.
If it is a binary file or a text file without linefeed and/or carriage return characters but with fixed line length, you can read it into target structure of this line length.
You can always open in BINARY mode and read into string or xstring.
To split a character string into two or more smaller strings, use the SPLIT statement as follows:
SPLIT c AT del INTO c1 ... cn.
You can also split a string into the individual lines of an internal table as follows:
SPLIT c AT del INTO TABLE itab.
The system adds a new line to the internal table itab for each part of the string.
Please note that '#' is the SAP representation of non-displayable characters. '#' is a wildcard for any kind of control characters.
If you see '#' on screen or in debugger, you should find out what i really is. In debugger, you can switch to HEX representation.
It is recommended to use class CL_ABAP_CHAR_UTILITIES attributes to determine special characters.
SPLIT <line> AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB INTO
<component_1> <component_2> ... <component_n>.
will split a tab-delimited line into it's components.
SPLIT <string> AT CL_ABAP_CHAR_UTILITIES=>CR_LF
into table <itab>.
can be used if you read the whole file into one string to build an interbal table of the records.
Regards,
Clemens
‎2007 Feb 17 11:57 AM
hi,
try this code
DATA : i_tab1 LIKE STANDARD TABLE OF zvh4479s WITH HEADER LINE.
DATA : i_tab2 LIKE STANDARD TABLE OF zvh4479 WITH HEADER LINE.
DATA : i_tab3 LIKE STANDARD TABLE OF zvh4479s WITH HEADER LINE.
*----
*VARIABLES
*----
DATA : ds1 TYPE string VALUE 'SEQ1.DAT'.
*----
*START-OF-SELECTION
*----
SELECT *
INTO TABLE I_TAB2
FROM ZVH4479.
loop at i_tab2.
move-corresponding i_tab2 to i_tab1.
append i_tab1.
endloop.
IF sy-subrc NE 0.
MESSAGE 'NO HEADER DATA' TYPE 'E'.
ENDIF.
*----
*DATASET OPERATIONS
*----
OPEN DATASET ds1
FOR OUTPUT
IN TEXT MODE ENCODING NON-UNICODE.
IF sy-subrc EQ 0.
LOOP AT i_tab1.
TRANSFER i_tab1 TO ds1.
ENDLOOP.
ELSE.
MESSAGE 'DATASET COULD NOT BE OPENED 1' TYPE 'E'.
ENDIF.
CLOSE DATASET ds1.
OPEN DATASET ds1
FOR INPUT
IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc EQ 0.
DO.
READ DATASET ds1 INTO i_tab3.
IF sy-subrc EQ 4.
EXIT.
ENDIF.
APPEND i_tab3.
CLEAR i_tab3.
ENDDO.
ELSE.
MESSAGE 'DATASET COULD NOT BE OPENED 2' TYPE 'E'.
ENDIF.
CLOSE DATASET ds1.
‎2007 Feb 17 12:00 PM
Hi,
chk this example for gui_upload
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = 'C:\ABCD.TXT'
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
tables
data_tab = I_HTAB
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.