Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
atsybulsky
Active Participant


Hi Community !I'd like to share a piece of code which might be useful for someone. It is called abap data parser. Its purpose is parsing of TAB-delimited text into an arbitrary flat structure or internal table. Why TAB-delimited? This is the format which is used automatically if you copy (clipboard) something from Excel - this creates some opportunities for good program usability.

So what does it do. Let's say we have this data in a form of string (CRLF as a line delimiter, TAB as a field delimiter):
NAME     BIRTHDATE
ALEX     01.01.1990
JOHN     02.02.1995
LARA     03.03.2000

... and a corresponding data type and internal table.
types: begin of my_table_type,
name type char10,
birthdate type datum,
end of my_table_type.

data lt_container type my_table_type.

To parse the string into the container table just add the following code:
lcl_data_parser=>create( lt_container )->parse(
exporting i_data = lv_some_string_with_data
importing e_container = lt_container ).

The class supports some additional features, in particular, "unstrict mode" which allow to skip field of the target structure in text - useful when you need to load just several certain fields of a huge data structure (like standard tables in SAP). Let's consider our data type has additional field, unnecessary in the current context:
types: begin of my_table_type,
name type char10,
city type char40, " << New field, but still just 2 in the text
birthdate type datum,
end of my_table_type.
...
lcl_data_parser=>create(
i_pattern = lt_container
i_amount_format = ' .' " specify thousand and decimal delimiters
)->parse(
exporting
i_data = lv_some_string_with_data
i_strict = abap_false " missing city field will not throw an error
i_has_head = abap_true " headers in the first line of the text
importing
e_container = lt_container ).

Another feature: i_has_head parameter above means that the first line contains tech names of the fields - then the parser uses it to identify existing fields and their order (which may be flexible then).

Cases of usage

  • we (our company) use the code for some of our company's products - like this one

  • we use it in the mockup loader - another our openly published tool for unit testing (actually the data parser was a part of mockup loader initially)

  • as a tool for mass uploads for some z-tables of some other our products


The code is free to use under MIT licence. Project home page is https://github.com/sbcgua/abap_data_parser

Installation can be done manually - just 1 include to to install - or with abapGit tool (the most convenient way).

I hope you find this useful ! 😃

7 Comments