Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Retrieve position and text from String

Former Member
0 Likes
1,342

Hi Experts

I have a string example displayed below:

14JUL-DO-HOU/CF-TEST/ST-1435/W-PROD 0601 VNDR 11195 HOLIDAY AUTOS S/DT-2035/RT-ZAR5000/TJ-54IMP

I need to find the value prefixed by "/RT-" and then retrieve the text up until the next "/".

EG. The result needs to be "ZAR5000" from the example string above.

Could someone please show me how to do that?

Thanks in Advance

Anton Kruse

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,294

Hi,

Below sample program . and apply same logic in your program.

parameter: p_str type char250.

data: lv_off type i,
      lv_i type i,
      lv_j type i,
      lv_str TYPE string.


FIND FIRST OCCURRENCE OF '/RT-'
    IN p_str
    IGNORING CASE
    MATCH OFFSET lv_off.

IF moff NE 0.
lv_i = lv_off + 4.
while p_str+lv_i(1) NE '/'.
CONCATENATE lv_str p_str+lv_i(1) INTO lv_str.
lv_i = lv_i + 1.
ENDWHILE.
ENDIF.

write: lv_str.

Regards,

Shankar.

5 REPLIES 5
Read only

Former Member
0 Likes
1,295

Hi,

Below sample program . and apply same logic in your program.

parameter: p_str type char250.

data: lv_off type i,
      lv_i type i,
      lv_j type i,
      lv_str TYPE string.


FIND FIRST OCCURRENCE OF '/RT-'
    IN p_str
    IGNORING CASE
    MATCH OFFSET lv_off.

IF moff NE 0.
lv_i = lv_off + 4.
while p_str+lv_i(1) NE '/'.
CONCATENATE lv_str p_str+lv_i(1) INTO lv_str.
lv_i = lv_i + 1.
ENDWHILE.
ENDIF.

write: lv_str.

Regards,

Shankar.

Read only

Former Member
0 Likes
1,294

Hi Anton,

For the below example you can do this way.

Write Code as below.


                  search string for '/RT-'.
                  clear lv_position.
                 ( sy-fdpos will give u the position of /RT )
                  lv_position = sy-fdpos + 7.    ( get the position of the text ZAR5000 into a variable called lv_position).
                  final_name  = w_t513s-stltx+lv_position. ( get the name into your desired variable like this )

Let me know if you still have any issues.

Thanks,

Guru.

Read only

awin_prabhu
Active Contributor
0 Likes
1,294

Hi Anton,

Try beow code:


DATA: str TYPE string,
      str1 TYPE string.
DATA: result_tab TYPE match_result_tab,
      wa TYPE match_result.
DATA: len TYPE i,
      len1 TYPE i,
      cnt TYPE i VALUE 0,
      moff TYPE i.
DATA: final TYPE TABLE OF string,
      wa1 LIKE LINE OF final.

str = '14JUL-DO-HOU/CF-TEST/ST-1435/W-PROD 0601 VNDR 11195 HOLIDAY AUTOS S/DT-2035/RT-ZAR5000/TJ-54IMP'.
len = STRLEN( str ).

FIND ALL OCCURRENCES OF '/RT-' IN str RESPECTING CASE
RESULTS result_tab.

LOOP AT result_tab INTO wa.
  moff = wa-offset + 4.
  len1 = len - moff.
  wa1 = str+moff(len1).
  APPEND wa1 TO final.
ENDLOOP.

LOOP AT final INTO wa1.
  len = STRLEN( wa1 ).
  DO len TIMES.
    IF wa1+cnt(1) = '/'.
      wa1 = wa1+0(cnt).
      MODIFY final FROM wa1. " Final internal table containing all the texts
      EXIT.
    ENDIF.
    cnt  = cnt + 1.
  ENDDO.
ENDLOOP.

Read only

Former Member
0 Likes
1,294

Hi

I managed to come right on my own using the following:

WORD = '14JUL-DO-HOU/CF-TEST/ST-1435/W-PROD 0601 VNDR 11195 HOLIDAY AUTOS S/NM-REDELINGHUIS ALETHAMRS/DT-2035/RT-ZAR5000/W-PROD 0601 '.
SPLIT WORD AT '/RT-' INTO FIRST_HALF SECOND_HALF.
SPLIT SECOND_HALF AT '/' INTO FIRST_HALF SECOND_HALF.

FIRST_HALF now contains the value "ZAR5000"

Thanks

Read only

Former Member
0 Likes
1,294

HI check the code

data: v_st TYPE string VALUE '14JUL-DO-HOU/CF-TEST/ST-1435/W-PROD 0601 VNDR 11195 HOLIDAY AUTOS S/DT-2035/RT-ZAR5000/TJ-54IMP',
      str1 type string,
      str2 TYPE string,
      str3 TYPE string.
START-OF-SELECTION.

SPLIT v_st at '/RT-'  INTO str1 str2.

WRITE:/ str1,
      / str2.
SPLIT str2 at '/'  INTO str3 str1.
WRITE:/ str3.