Your SlideShare is downloading. ×
Program For Parsing2
Program For Parsing2
Program For Parsing2
Program For Parsing2
Program For Parsing2
Program For Parsing2
Program For Parsing2
Program For Parsing2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Program For Parsing2

917

Published on

ABAP Parsing Program

ABAP Parsing Program

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
917
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
66
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. * Note: The routines in this program are called from other programs. * Doing a 'WHERE-USED' search for a specific routine in this * program will probably retrieve no results. However, if you * do a 'WHERE-USED' search for this program, ZLIST_FIELDS_RTTI * itself, you will find the other programs which use these forms. * Such a search should always be done before any changes are * made to the routines in this program, in order to make sure * all existing calls to the routines remain valid. REPORT zlist_fields_rtti. *----------------------------------------------------------------------* * Program: ZLIST_FIELDS_RTTI * Author: Gordon Tobias * Date: Dec 2006 * Description: This program contains routines intended to be called * from other programs, to list the contents of structured * records, field by field. It uses RTTI (Run Time Typing * Info - from ABAP objects methods) to identify the name * and length of each field in the record. * * Initially, there are 4 routines that can be called: *--------------------------- * FORM list_record_fields USING p_rec. * FORM list_record_fields prints the field #, name, and length. *--------------------------- * FORM list_fields_with_cols USING p_rec. * FORM list_fields_with_cols prints the field #, name, length, and * the starting and ending columns of the field. *--------------------------- * FORM list_specific_fields TABLES so_fnum * so_fname * USING p_rec. * FORM list_specific_fields print the same information as the * list_fields_with_columns, but it accepts two additional parms: * SELECT-OPTIONS table for a 3 digit numeric fields, and a 30 char * alphabetic field. These two parms can restrict the fields listed * on the report just just specific numbers (e.g. field 1-5) or names * (i.e. list just the PERNR field, or exclude all FILLER* fields). *--------------------------- * FORM convert_to_CSV USING pu_rec * pu_hdr_flag * CHANGING pc_csvrec * * FORM convert_to_CSV reads a structured record, pu_rec, and
  • 2. * generates a text field formatted as a CSV record of the fields * in the structured record. If the pu_hdr_flag = 'HDR', the CSV * record will contain the field names instead of the field values, * thus creating a header record for the CSV file. *----------------------------------------------------------------------* DATA: num3(3) TYPE n. DATA: field_name(30) TYPE c. SELECTION-SCREEN COMMENT /1(72) text-001. SELECTION-SCREEN COMMENT /1(72) text-002. SELECTION-SCREEN SKIP 1. SELECT-OPTIONS: s_fnum FOR num3, s_fname FOR field_name. START-OF-SELECTION. MESSAGE e016(rp) WITH 'This is not an executable program'. EXIT. *&---------------------------------------------------------------------* *& Form list_record_fields *&---------------------------------------------------------------------* * List the relative field number in the record, and the name, length, * and contents for every field in the record *----------------------------------------------------------------------* FORM list_record_fields USING p_rec. quot;any structured record FIELD-SYMBOLS <fs> TYPE ANY. DATA: w_index TYPE i, w_len TYPE i, first_line_flag(1) TYPE c. DATA: d_ref TYPE REF TO data. FIELD-SYMBOLS: <fs_wa> TYPE ANY, <fs_comp> TYPE ANY. DATA: desc_ref TYPE REF TO cl_abap_structdescr, wa_comp TYPE abap_compdescr. quot;component description ASSIGN p_rec TO <fs_wa>. first_line_flag = 'Y'. w_index = 0. desc_ref ?= cl_abap_typedescr=>describe_by_data( <fs_wa> ). LOOP AT desc_ref->components INTOwa_comp.
  • 3. w_index = sy-tabix. ASSIGN COMPONENT w_index OF STRUCTURE p_rec TO <fs>. IF sy-subrc = 0. IF first_line_flag = 'Y'. SKIP 1. first_line_flag = 'N'. ENDIF. IF wa_comp-type_kind NE 'P'. w_len = strlen( <fs> ). ELSE. w_len = 0. ENDIF. IF w_len > 0. WRITE: / 'Field', (3) w_index NO-SIGN, wa_comp-name(17), '(' NO-GAP, (3) wa_comp-length NO-SIGN NO-GAP, ') = ''' NO-GAP, <fs>(w_len) NO-GAP, ''''. ELSEIF wa_comp-type_kind = 'P'. WRITE: / 'Field', (3) w_index NO-SIGN, wa_comp-name(17), '(P' NO-GAP, (2) wa_comp-length NO-SIGN NO-GAP, ') = ''' NO-GAP, <fs> NO-GAP, ''''. ELSE. WRITE: / 'Field', (3) w_index NO-SIGN, wa_comp-name(17), '(' NO-GAP, (3) wa_comp-length NO-SIGN NO-GAP, ') = '''''. ENDIF. ENDIF. ENDLOOP. ENDFORM. quot; list_record_fields *&---------------------------------------------------------------------* *& Form list_fields_with_cols *&---------------------------------------------------------------------* * List the field info (name, position # in record, length) as well as * the starting and ending columns in t e record. h *----------------------------------------------------------------------* FORM list_fields_with_cols USING p_rec. quot;any structured record FIELD-SYMBOLS <fs> TYPE ANY. DATA: w_index TYPE i, w_len TYPE i, w_field_start TYPE i, w_field_end TYPE i, first_line_flag(1) TYPE c.
  • 4. DATA: d_ref TYPE REF TO data. FIELD-SYMBOLS: <fs_wa> TYPE ANY, <fs_comp> TYPE ANY. DATA: desc_ref TYPE REF TO cl_abap_structdescr, wa_comp TYPE abap_compdescr. ASSIGN p_rec TO <fs_wa>. first_line_flag = 'Y'. w_index = 0. w_field_start = 1. desc_ref ?= cl_abap_typedescr=>describe_by_data( <fs_wa> ). LOOP AT desc_ref->components INTOwa_comp. w_index = sy-tabix. ASSIGN COMPONENT w_index OF STRUCTURE p_rec TO <fs>. IF sy-subrc = 0. IF first_line_flag = 'Y'. SKIP 1. first_line_flag = 'N'. ENDIF. IF wa_comp-type_kind NE 'P'. w_len = strlen( <fs> ). ELSE. w_len = 0. ENDIF. w_field_end = w_field_start + wa_comp-length - 1. IF w_len > 0. WRITE: / 'Field', (3) w_index NO-SIGN, (4) w_field_start NO-SIGN NO-GAP, '-' NO-GAP, (4) w_field_end NO-SIGN, wa_comp-name(15), '(' NO-GAP, (3) wa_comp-length NO-SIGN NO-GAP, ') = ''' NO-GAP, <fs>(w_len) NO-GAP, ''''. ELSEIF wa_comp-type_kind = 'P'. WRITE: / 'Field', (3) w_index NO-SIGN, (4) w_field_start NO-SIGN NO-GAP, '-' NO-GAP, (4) w_field_end NO-SIGN, wa_comp-name(15), '(P' NO-GAP, (2) wa_comp-length NO-SIGN NO-GAP, ') = ''' NO-GAP, <fs> NO-GAP, ''''. ELSE. WRITE: / 'Field', (3) w_index NO-SIGN, (4) w_field_start NO-SIGN NO-GAP, '-' NO-GAP,
  • 5. (4) w_field_end NO-SIGN, wa_comp-name(15), '(' NO-GAP, (3) wa_comp-length NO-SIGN NO-GAP, ') = '''''. ENDIF. w_field_start = w_field_end + 1. ENDIF. ENDLOOP. ENDFORM. quot; list_fields_with_cols *&---------------------------------------------------------------------* *& Form list_specific_fields *&---------------------------------------------------------------------* * List the field info (name, position # in record, length) as well as * the starting and ending columns in t e record. This routine accepts h * 2 select-options tables, to indicate the specific fields to li t. s * e.g. print field numbers 1 to 5, and 9. Or print all *NAME* fields. *----------------------------------------------------------------------* FORM list_specific_fields TABLES so_fnum quot;SELECT-OPTIONS for NUM3 so_fname quot;SELECT-OPTIONS for fld name USING p_rec. quot;any structured record FIELD-SYMBOLS <fs> TYPE ANY. DATA: w_index TYPE i, w_len TYPE i, w_field_start TYPE i, w_field_end TYPE i, first_line_flag(1) TYPE c. DATA: d_ref TYPE REF TO data. FIELD-SYMBOLS: <fs_wa> TYPE ANY, <fs_comp> TYPE ANY. DATA: desc_ref TYPE REF TO cl_abap_structdescr, wa_comp TYPE abap_compdescr. ASSIGN p_rec TO <fs_wa>. first_line_flag = 'Y'. w_index = 0. w_field_start = 1. desc_ref ?= cl_abap_typedescr=>describe_by_data( <fs_wa> ). LOOP AT desc_ref->components INTOwa_comp. w_index = sy-tabix. *- Do field number & field name match the fields to be listed? ASSIGN COMPONENT w_index OF STRUCTURE p_rec TO <fs>. IF sy-subrc = 0.
  • 6. IF wa_comp-type_kind NE 'P'. quot;Packed fields don't have STRLEN w_len = strlen( <fs> ). ELSE. w_len = 0. ENDIF. w_field_end = w_field_start + wa_comp-length - 1. IF w_index IN so_fnum AND wa_comp-name IN so_fname. IF first_line_flag = 'Y'. SKIP 1. first_line_flag = 'N'. ENDIF. IF w_len > 0. WRITE: / 'Field', (3) w_index NO-SIGN, (4) w_field_start NO-SIGN NO-GAP, '-' NO-GAP, (4) w_field_end NO-SIGN, wa_comp-name(15), '(' NO-GAP, (3) wa_comp-length NO-SIGN NO-GAP, ') = ''' NO-GAP, <fs>(w_len) NO-GAP, ''''. ELSEIF wa_comp-type_kind = 'P'. WRITE: / 'Field', (3) w_index NO-SIGN, (4) w_field_start NO-SIGN NO-GAP, '-' NO-GAP, (4) w_field_end NO-SIGN, wa_comp-name(15), '(P' NO-GAP, (2) wa_comp-length NO-SIGN NO-GAP, ') = ''' NO-GAP, <fs> NO-GAP, ''''. ELSE. quot;field length is ZERO --> empty of data WRITE: / 'Field', (3) w_index NO-SIGN, (4) w_field_start NO-SIGN NO-GAP, '-' NO-GAP, (4) w_field_end NO-SIGN, wa_comp-name(15), '(' NO-GAP, (3) wa_comp-length NO-SIGN NO-GAP, ') = '''''. ENDIF. ENDIF. quot;if w_index in so_fnum and wa_comp-name in so-fname w_field_start = w_field_end + 1. ELSE. WRITE: / 'Error assigning field #', w_index, '(', wa_comp-name, ') to <Field String>'. ENDIF. quot;IF sy-subrc = 0 on ASSIGN COMPONENT command ENDLOOP. ENDFORM. quot; list_specific_fields
  • 7. *&---------------------------------------------------------------------* *& Form convert_to_CSV *&---------------------------------------------------------------------* * Instead of printing the record contents to spool, convert the * structured record to a single string formatted as a CSV file line: * Quotes around each field, and commas between fields. *----------------------------------------------------------------------* FORM convert_to_csv USING pu_rec pu_hdr_flag CHANGING pc_csvrec. FIELD-SYMBOLS <fs> TYPE ANY. DATA: w_index TYPE i, w_len TYPE i, first_line_flag(1) TYPE c, w_string(60) TYPE c, w_csvrec1(2000) TYPE c, w_csvrec2(2100) TYPE c. CONSTANTS: c_quote(1) TYPE c VALUE 'quot;', c_comma(1) TYPE c VALUE ','. DATA: d_ref TYPE REF TO data. FIELD-SYMBOLS: <fs_wa> TYPE ANY, <fs_comp> TYPE ANY. DATA: desc_ref TYPE REF TO cl_abap_structdescr, wa_comp TYPE abap_compdescr. quot;component description ASSIGN pu_rec TO <fs_wa>. CLEAR: pc_csvrec, w_csvrec1, w_csvrec2. first_line_flag = 'Y'. w_index = 0. desc_ref ?= cl_abap_typedescr=>describe_by_data( <fs_wa> ). LOOP AT desc_ref->components INTOwa_comp. w_index = sy-tabix. ASSIGN COMPONENT w_index OF STRUCTURE pu_rec TO <fs>. IF sy-subrc = 0. IF pu_hdr_flag = 'HDR'. WRITE wa_comp-name TO w_string. ELSE. WRITE <fs> TO w_string. ENDIF. SHIFT w_string LEFT DELETING LEADING space. CONCATENATE c_quote w_string c_quote INTO w_string. IF first_line_flag = 'Y'. w_csvrec2 = w_string.
  • 8. first_line_flag = 'N'. ELSE. CONCATENATE w_csvrec1 c_comma w_string INTO w_csvrec2. ENDIF. CONDENSE w_csvrec2. w_csvrec1 = w_csvrec2. ENDIF. ENDLOOP. pc_csvrec = w_csvrec1. ENDFORM. quot; convert_to_CSV

×