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

help req in small code

Former Member
0 Likes
618

Hi,

I HAVE A CHARACTER FIELD OF LENGTH 10.

THE VALUES OF THIS FIELD ARE LIKE THIS

ATOR2

ATQWWW2

ASDERRE98

HDERF98

WEEEEEEEE9

QWERRRRR77

ATOR

I WANT TO PULL OUT THE VALUES LIKE 2,2,98,98,9,77 AND IN THE LAST CASE I WANT 0.

tHE VALUES ARE ALWAYS AT THE END .

i JUST WANT TO READ THE VALUES.

cAN ANYONE SUGGEST ME TO ACHIEVE THIS

Thanks

1 ACCEPTED SOLUTION
Read only

ferry_lianto
Active Contributor
0 Likes
597

Hi,

Please try this.


DATA: WA_FIELD(10) VALUE 'ATQWWW2',
      WA_VALUE(10).
                                                                        
IF WA_FIELD CA ' 0123456789'.
  SHIFT WA_FIELD BY SY-FDPOS PLACES.
  MOVE WA_FIELD TO WA_VALUE.
  WRITE: / WA_VALUE.
ENDIF.

Regards,

Ferry Lianto

5 REPLIES 5
Read only

Former Member
0 Likes
597

Hi,

Check this example..

DATA: v_input(50) VALUE 'ATQWWW21212'.

DATA: v_strlen TYPE i.

DATA: v_output TYPE char50.

DATA: v_index TYPE syindex.

DATA: v_schar.

v_strlen = strlen( v_input ).

DO v_strlen TIMES.

v_index = sy-index - 1.

v_schar = v_input+v_index(1).

IF v_schar CO '0123456789'.

CONCATENATE v_output v_schar INTO v_output.

ENDIF.

ENDDO.

CONDENSE v_output.

WRITE: / v_output.

Thanks,

Naren

Read only

ferry_lianto
Active Contributor
0 Likes
598

Hi,

Please try this.


DATA: WA_FIELD(10) VALUE 'ATQWWW2',
      WA_VALUE(10).
                                                                        
IF WA_FIELD CA ' 0123456789'.
  SHIFT WA_FIELD BY SY-FDPOS PLACES.
  MOVE WA_FIELD TO WA_VALUE.
  WRITE: / WA_VALUE.
ENDIF.

Regards,

Ferry Lianto

Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
597

How about something like this.



data: istr(100) type c occurs 0 with header line.
data: num(10) type n.
data: chr(10) type c.
data: len type i.
data: string_len type i.
data: offset type i.

istr = 'ATOR2'.   append istr.
istr = 'ATQWWW2'.  append istr.
istr = 'ASDERRE98'..  append istr.
istr = 'HDERF98'.  append istr.
istr = 'WEEEEEEEE9'. append istr.
istr = 'QWERRRRR77'.  append istr.
istr = 'ATOR'.  append istr.


loop at istr.
  num = istr.
  chr = num.
  shift chr left deleting leading '0'.
  len = strlen( chr ).
  string_len = strlen( istr ).
  offset = string_len - len.
  if len > 0.
    clear istr+offset(len).
  endif.
  write:/ istr, at 30 chr.
endloop.

Regards,

RIch Heilman

Read only

0 Likes
597

Hi all,

i didn't even realised there would be so many ways to do it

thanks all

Read only

Former Member
0 Likes
597

Just another way.


PARAMETERS: p_string(20).

DATA: v_string(20),
      v_index LIKE sy-index,
      v_number TYPE i.

CALL FUNCTION 'STRING_REVERSE'
  EXPORTING
    string    = p_string
    lang      = sy-langu
  IMPORTING
    rstring   = v_string
  EXCEPTIONS
    too_small = 1
    OTHERS    = 2.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

DO.
  v_index = sy-index - 1.
  IF v_string+v_index(1) CA sy-abcde.
    EXIT.
  ENDIF.
ENDDO.

IF v_index > 0.
  v_number = v_string(v_index).
ENDIF.

WRITE:/ v_string, v_number.