daily pastebin goal
4%
SHARE
TWEET

Regex Object vs. Regex String

rplantiko Oct 26th, 2012 102 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. *&---------------------------------------------------------------------*
  2. *& Report  ZZ_TEST_REPLACE_IRREGULAR
  3. *&---------------------------------------------------------------------*
  4. *& In runtime terms:
  5. *& Using a precompiled regular expression repeatedly,
  6. *& equals using the same regular expression STRING repeatedly
  7. *& (shows that there is an internal buffering of the last regex)
  8. *&---------------------------------------------------------------------*
  9.  
  10. report  zz_test_replace_irregular.
  11.  
  12. parameters: p_num type i default 1000,
  13.             p_len type i default 100,
  14.             p_seed type i default 14527.
  15.  
  16. start-of-selection.
  17.   perform start.
  18.  
  19. * ---
  20. form start.
  21.  
  22.   data: lt_text type stringtab,
  23.         lv_text type string.
  24.  
  25.   field-symbols: <lv_text> type string.
  26.  
  27.   perform make_sample using p_num p_len p_seed
  28.                       changing lt_text.
  29.  
  30.   loop at lt_text assigning <lv_text>.
  31.     lv_text = <lv_text>.
  32.     perform replace1 using '.' lv_text.
  33.     lv_text = <lv_text>.
  34.     perform replace2 using '.' lv_text.
  35.   endloop.
  36.  
  37. endform.                    "start
  38.  
  39. *  ---
  40. form replace1 using    iv_default type char01
  41.               changing cv_text    type csequence.
  42.  
  43.   statics: sv_pattern type string.
  44.   if  sv_pattern  is  initial.
  45.     perform get_pattern changing sv_pattern.
  46.   endif.
  47.  
  48.   replace all occurrences of regex sv_pattern in cv_text with iv_default.
  49.  
  50. endform.                    "replace1
  51.  
  52. *
  53. form get_pattern changing cv_pattern type string.
  54.   data: lv_allowed_char type string.
  55.   call function 'RSKC_ALLOWED_CHAR_GET'
  56.     importing
  57.       e_allowed_char = lv_allowed_char.
  58.  
  59.   concatenate '([^' lv_allowed_char '])' into cv_pattern.
  60.  
  61. endform.                    "get_pattern
  62.  
  63.  
  64. * ---
  65. form replace2 using    iv_default type char01
  66.               changing cv_text    type csequence.
  67.  
  68.   statics: so_regex type ref to cl_abap_regex.
  69.   data: lv_pattern type string.
  70.  
  71.   if  so_regex  is  initial.
  72.     perform get_pattern changing lv_pattern.
  73.     create object so_regex
  74.       exporting
  75.         pattern = lv_pattern.
  76.   endif.
  77.  
  78.   replace all occurrences of regex so_regex in cv_text with iv_default.
  79.  
  80. endform.                    "replace2
  81.  
  82. *
  83. form make_sample using    iv_num type i
  84.                           iv_len type i
  85.                           iv_seed type i
  86.                  changing ct_text type stringtab.
  87.  
  88.   data:
  89.      lo_ran  type ref to cl_abap_random_int,
  90.      lv_x    type x length 2,
  91.      lv_c    type c,
  92.      lv_seed type i,
  93.      lv_text type string.
  94.  
  95.   lo_ran = cl_abap_random_int=>create( min = 32 max = 255 seed = iv_seed ).
  96.  
  97.   do iv_num times.
  98.     clear lv_text.
  99.     do iv_len times.
  100.       lv_x = lo_ran->get_next( ).
  101.       lv_c = cl_abap_conv_in_ce=>uccp( lv_x ).
  102.       concatenate lv_text lv_c into lv_text respecting blanks.
  103.     enddo.
  104.     append lv_text to ct_text.
  105.   enddo.
  106.  
  107. endform.                    "make_sample
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top