Как я могу считать слова строки без использования какой-либо функции в abap - PullRequest
0 голосов
/ 13 сентября 2018

Привет, Эксперты

Мне нужна помощь для подсчета слов строки без использования какой-либо функции в ABAP. Мы можем использовать только do цикл и if условие.

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018
METHODS count_words
  IMPORTING
    iv_text          TYPE string
  RETURNING
    VALUE(rv_result) TYPE i.

METHOD count_words.
  CONSTANTS lc_space TYPE string VALUE ` `.
  DATA(lv_remaining_text) = iv_text.
  DATA(lv_last_char) = ``.
  DO.
    IF lv_remaining_text IS INITIAL.
      RETURN. " or EXIT if you omit the METHOD around this
    ENDIF.
    DATA(lv_next_char) = lv_remaining_text(1).
    IF lv_next_char <> lc_space AND
       ( lv_last_char IS INITIAL OR
         lv_last_char = lc_space ).
      rv_result = rv_result + 1.
    ENDIF.
    lv_last_char = lv_next_char.
    lv_remaining_text = lv_remaining_text+1.
  ENDDO.
ENDMETHOD.

Пожалуйста, не используйте такой код на практике. Этот вид низкоуровневого жонглирования символов предназначен только для образовательных целей.

В реальной жизни используйте что-то вродеэто:

METHOD count_words_cleanly.
  rv_result = count( val   = iv_text
                     regex = `(\s\S|^\S)` ).
ENDMETHOD.
0 голосов
/ 13 сентября 2018

Вы можете посчитать количество пробелов между вашими словами.Вам нужно по крайней мере STRLEN, чтобы определить длину строки ... без этого я не думаю, что это работает.CONDENSE может быть полезен в некоторых случаях ... попробуйте без CONDENSE.

DATA a TYPE string VALUE 'MY NAME IS JOHN'.
DATA c TYPE i.
DATA d TYPE c.
DATA words TYPE i value 1.
DATA e TYPE i VALUE 0.

CONDENSE a.
c = STRLEN( a ).
DO c TIMES.
  d = a+e(1).
  e = e + 1.
  IF d = ' '.
    words = words + 1.
  ENDIF.
ENDDO.
WRITE words. // just as output ... delete on demand
...