Convert 2[3[a]b] to aaabaaab
Posted on May 16, 2020 by Admin
Few days ago one of the member of our telegram group aked how to convert 2[3[a]b] to aaabaaab, 2[a]3[b]c to aabbbc and so on.
Question and decision how to solve the task
- How can we seperate the right opening and closing bracket including the number infront
- This can be done with the simple regex (\d{0,})[([^[]]+)]
Solution
I implemented the logic in a class. I implemented the Unit Test to the class too, so that the logic will still work correct when making changes to it.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
METHOD convert_bracketstring.
rv_value = iv_value.
DO.
DATA(lv_match) = match( val = rv_value regex = '(\d{0,})\[([^\[\]]+)\]' ).
IF lv_match IS INITIAL.
EXIT.
ENDIF.
DATA(lv_repeat_times) = substring_before( val = lv_match sub = '[' ).
rv_value = replace( val = rv_value
regex = '(\d{0,})\[([^\[\]]+)\]'
with = repeat( val = substring_before( val = substring_after( val = lv_match
sub = '[' )
sub = ']' )
occ = CONV i( substring_before( val = lv_match
sub = '[' ) ) ) ).
ENDDO.
ENDMETHOD.
|
Unit Test
For the Unit Test I have created three methods with different bracket combinations, from simple to very deep.
1
2
3
4
5
6
7
8
9
10
11
12
|
METHOD test_get_value_normal.
cl_abap_unit_assert=>assert_equals( act = zcl_kco_bracketstr2str=>convert_bracketstring( '1[a]2[b]3[c]4[d]' )
exp = 'abbcccdddd' ).
ENDMETHOD.
METHOD test_get_value_nested.
cl_abap_unit_assert=>assert_equals( act = zcl_kco_bracketstr2str=>convert_bracketstring( '2[3[a]b]' )
exp = 'aaabaaab' ).
ENDMETHOD.
METHOD test_get_value_deepnested.
cl_abap_unit_assert=>assert_equals( act = zcl_kco_bracketstr2str=>convert_bracketstring( '1[2[3[c]a]4[a]b]' )
exp = 'cccacccaaaaab' ).
ENDMETHOD.
|
Get the source code from GitHub
Download
You can download the soure code from GitHub. Available Versions are:
Import using abapGit
Or you can import the source code directly into your system by using abapGit. You can find more information about how to import repo from GitHub here.
Copy the repo link https://github.com/stekoester/convert_bracketstring_2_string