SlideShare a Scribd company logo
1 of 8
* 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
* 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.
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.
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,
(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.
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
*&---------------------------------------------------------------------*
*& 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.
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

More Related Content

What's hot

Oracle tips and tricks
Oracle tips and tricksOracle tips and tricks
Oracle tips and tricks
Yanli Liu
 

What's hot (20)

Oracle naveen Sql
Oracle naveen   SqlOracle naveen   Sql
Oracle naveen Sql
 
Oracle tips and tricks
Oracle tips and tricksOracle tips and tricks
Oracle tips and tricks
 
[APJ] Common Table Expressions (CTEs) in SQL
[APJ] Common Table Expressions (CTEs) in SQL[APJ] Common Table Expressions (CTEs) in SQL
[APJ] Common Table Expressions (CTEs) in SQL
 
HOT Understanding this important update optimization
HOT Understanding this important update optimizationHOT Understanding this important update optimization
HOT Understanding this important update optimization
 
Select To Order By
Select  To  Order BySelect  To  Order By
Select To Order By
 
Open SQL & Internal Table
Open SQL & Internal TableOpen SQL & Internal Table
Open SQL & Internal Table
 
Alv interactive ABAPreport
Alv interactive ABAPreportAlv interactive ABAPreport
Alv interactive ABAPreport
 
005 foxpro
005 foxpro005 foxpro
005 foxpro
 
Fast formula queries for functions, contexts, db is and packages
Fast formula queries for functions, contexts, db is and packagesFast formula queries for functions, contexts, db is and packages
Fast formula queries for functions, contexts, db is and packages
 
Trig
TrigTrig
Trig
 
Mca ii-dbms-u-iv-structured query language
Mca ii-dbms-u-iv-structured query languageMca ii-dbms-u-iv-structured query language
Mca ii-dbms-u-iv-structured query language
 
Basic programming
Basic programmingBasic programming
Basic programming
 
Les03
Les03Les03
Les03
 
ABAP Advanced List
ABAP Advanced ListABAP Advanced List
ABAP Advanced List
 
Assignement code
Assignement codeAssignement code
Assignement code
 
List Processing in ABAP
List Processing in ABAPList Processing in ABAP
List Processing in ABAP
 
Les01
Les01Les01
Les01
 
ORACLE NOTES
ORACLE NOTESORACLE NOTES
ORACLE NOTES
 
Modularization & Catch Statement
Modularization & Catch StatementModularization & Catch Statement
Modularization & Catch Statement
 
Les09 Manipulating Data
Les09 Manipulating DataLes09 Manipulating Data
Les09 Manipulating Data
 

Viewers also liked (8)

Test
TestTest
Test
 
Datafolha/IBOPE
Datafolha/IBOPEDatafolha/IBOPE
Datafolha/IBOPE
 
3006b 0809 P1 Choy
3006b 0809 P1 Choy3006b 0809 P1 Choy
3006b 0809 P1 Choy
 
Presentation
PresentationPresentation
Presentation
 
Tarefa 4º Encontro
Tarefa  4º EncontroTarefa  4º Encontro
Tarefa 4º Encontro
 
Testando
TestandoTestando
Testando
 
Publicaffairs Interview&Numbers Sept242008
Publicaffairs Interview&Numbers Sept242008Publicaffairs Interview&Numbers Sept242008
Publicaffairs Interview&Numbers Sept242008
 
Ebook List Of Ebook Sites
Ebook   List Of Ebook SitesEbook   List Of Ebook Sites
Ebook List Of Ebook Sites
 

Similar to Program For Parsing2

Example syntax alv grid list
Example syntax alv grid listExample syntax alv grid list
Example syntax alv grid list
Nur Khoiri
 
There are a number of errors in the following program- All errors are.docx
There are a number of errors in the following program- All errors are.docxThere are a number of errors in the following program- All errors are.docx
There are a number of errors in the following program- All errors are.docx
clarkjanyce
 
Lab11.cppLab11.cpp.docx
Lab11.cppLab11.cpp.docxLab11.cppLab11.cpp.docx
Lab11.cppLab11.cpp.docx
DIPESH30
 
Program In C You are required to write an interactive C program that.pdf
Program In C You are required to write an interactive C program that.pdfProgram In C You are required to write an interactive C program that.pdf
Program In C You are required to write an interactive C program that.pdf
amitbagga0808
 
Alvedit programs
Alvedit programsAlvedit programs
Alvedit programs
mcclintick
 
modularization-160202092213 (1).pdf
modularization-160202092213 (1).pdfmodularization-160202092213 (1).pdf
modularization-160202092213 (1).pdf
SreeramBaddila
 
Problem Implement a FIFO program in which a client sends the server.pdf
Problem Implement a FIFO program in which a client sends the server.pdfProblem Implement a FIFO program in which a client sends the server.pdf
Problem Implement a FIFO program in which a client sends the server.pdf
feelinggift
 
Merge Sort implementation in C++ The implementation for Mergesort gi.pdf
Merge Sort implementation in C++ The implementation for Mergesort gi.pdfMerge Sort implementation in C++ The implementation for Mergesort gi.pdf
Merge Sort implementation in C++ The implementation for Mergesort gi.pdf
mdameer02
 
03 abap3-090715081232-phpapp01-100511101016-phpapp02
03 abap3-090715081232-phpapp01-100511101016-phpapp0203 abap3-090715081232-phpapp01-100511101016-phpapp02
03 abap3-090715081232-phpapp01-100511101016-phpapp02
tabish
 
03 abap3-090715081232-phpapp01
03 abap3-090715081232-phpapp0103 abap3-090715081232-phpapp01
03 abap3-090715081232-phpapp01
wingsrai
 
Write the definition of the linkedListKeepLast function- (Please write.docx
Write the definition of the linkedListKeepLast function- (Please write.docxWrite the definition of the linkedListKeepLast function- (Please write.docx
Write the definition of the linkedListKeepLast function- (Please write.docx
delicecogupdyke
 

Similar to Program For Parsing2 (20)

Example syntax alv grid list
Example syntax alv grid listExample syntax alv grid list
Example syntax alv grid list
 
Alv Grids
Alv GridsAlv Grids
Alv Grids
 
There are a number of errors in the following program- All errors are.docx
There are a number of errors in the following program- All errors are.docxThere are a number of errors in the following program- All errors are.docx
There are a number of errors in the following program- All errors are.docx
 
ABAP EVENTS EXAMPLE
ABAP EVENTS EXAMPLEABAP EVENTS EXAMPLE
ABAP EVENTS EXAMPLE
 
Report zalv
Report  zalvReport  zalv
Report zalv
 
Lab11.cppLab11.cpp.docx
Lab11.cppLab11.cpp.docxLab11.cppLab11.cpp.docx
Lab11.cppLab11.cpp.docx
 
ZFINDALLZPROGAM
ZFINDALLZPROGAMZFINDALLZPROGAM
ZFINDALLZPROGAM
 
Program In C You are required to write an interactive C program that.pdf
Program In C You are required to write an interactive C program that.pdfProgram In C You are required to write an interactive C program that.pdf
Program In C You are required to write an interactive C program that.pdf
 
Alvedit programs
Alvedit programsAlvedit programs
Alvedit programs
 
modularization-160202092213 (1).pdf
modularization-160202092213 (1).pdfmodularization-160202092213 (1).pdf
modularization-160202092213 (1).pdf
 
SAP Modularization techniques
SAP Modularization techniquesSAP Modularization techniques
SAP Modularization techniques
 
Alv Block
Alv BlockAlv Block
Alv Block
 
Abap basics 01
Abap basics 01Abap basics 01
Abap basics 01
 
Zmd Constant
Zmd ConstantZmd Constant
Zmd Constant
 
Problem Implement a FIFO program in which a client sends the server.pdf
Problem Implement a FIFO program in which a client sends the server.pdfProblem Implement a FIFO program in which a client sends the server.pdf
Problem Implement a FIFO program in which a client sends the server.pdf
 
unit-3-L1.ppt
unit-3-L1.pptunit-3-L1.ppt
unit-3-L1.ppt
 
Merge Sort implementation in C++ The implementation for Mergesort gi.pdf
Merge Sort implementation in C++ The implementation for Mergesort gi.pdfMerge Sort implementation in C++ The implementation for Mergesort gi.pdf
Merge Sort implementation in C++ The implementation for Mergesort gi.pdf
 
03 abap3-090715081232-phpapp01-100511101016-phpapp02
03 abap3-090715081232-phpapp01-100511101016-phpapp0203 abap3-090715081232-phpapp01-100511101016-phpapp02
03 abap3-090715081232-phpapp01-100511101016-phpapp02
 
03 abap3-090715081232-phpapp01
03 abap3-090715081232-phpapp0103 abap3-090715081232-phpapp01
03 abap3-090715081232-phpapp01
 
Write the definition of the linkedListKeepLast function- (Please write.docx
Write the definition of the linkedListKeepLast function- (Please write.docxWrite the definition of the linkedListKeepLast function- (Please write.docx
Write the definition of the linkedListKeepLast function- (Please write.docx
 

More from Michelle Crapo

More from Michelle Crapo (13)

Abap objects
Abap objectsAbap objects
Abap objects
 
Abap objects
Abap objectsAbap objects
Abap objects
 
Learning & using new technology
Learning & using new technologyLearning & using new technology
Learning & using new technology
 
Learning & using new technology
Learning & using new technologyLearning & using new technology
Learning & using new technology
 
Dirty upgrade bala
Dirty upgrade balaDirty upgrade bala
Dirty upgrade bala
 
Big data mgmt bala
Big data mgmt balaBig data mgmt bala
Big data mgmt bala
 
Https _sapmats-de.sap-ag.de_download_download
Https  _sapmats-de.sap-ag.de_download_downloadHttps  _sapmats-de.sap-ag.de_download_download
Https _sapmats-de.sap-ag.de_download_download
 
2011 sap inside_track_eim_overview
2011 sap inside_track_eim_overview2011 sap inside_track_eim_overview
2011 sap inside_track_eim_overview
 
SAP OSS note search
SAP OSS note searchSAP OSS note search
SAP OSS note search
 
2007 SAPTech Ed
2007 SAPTech Ed2007 SAPTech Ed
2007 SAPTech Ed
 
SAP Technology QUICK overview
SAP Technology QUICK overviewSAP Technology QUICK overview
SAP Technology QUICK overview
 
General Discussion Abap Tips
General Discussion   Abap  TipsGeneral Discussion   Abap  Tips
General Discussion Abap Tips
 
Change Documents2
Change Documents2Change Documents2
Change Documents2
 

Recently uploaded

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Recently uploaded (20)

AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 

Program For Parsing2

  • 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