2

如何读取字符串中的每个字符?例如,我想读取字符串“a7m4d0”中的每个字符。之后我想验证每个字符是字符还是数字。任何提示或想法?

4

5 回答 5

11
DATA: smth TYPE string VALUE `qwert1yua22sd123bnm,`,
      index TYPE i,
      length TYPE i,
      char  TYPE c,
      num   TYPE i.

length = STRLEN( smth ).

WHILE index < length.
  char = smth+index(1).
  TRY .
      num = char.
      WRITE: / num,'was a number'.
    CATCH cx_sy_conversion_no_number.
      WRITE: / char,'was no number'.
  ENDTRY.
  ADD 1 TO index.
ENDWHILE.

你的问题解决了:P

于 2013-04-21T16:08:05.503 回答
7

在最近的 740 ABAP 服务器上有点复杂。:)

DATA: lv_text  TYPE string  VALUE `a7m4d0`.

DO strlen( lv_text ) TIMES.
  DATA(lv_single) = substring( val = lv_text off = sy-index - 1 len = 1 ) && ` is ` &&
                    COND string( WHEN substring( val = lv_text off = sy-index - 1 len = 1 ) CO '0123456789' THEN 'Numeric'
                                 ELSE                                                                             'Character' ).
  WRITE : / lv_single.
ENDDO.
于 2014-10-13T15:01:33.043 回答
3

以下是访问字符串中单个字符的方法:

这个例子将把字符“t”提取到变量“lv_char1”中。

DATA: lv_string TYPE char10,
      lv_char   TYPE char1.

lv_string = "Something";

lv_char1 = lv_string+4(1).

将“+4”附加到字符串名称指定从字符串开头的偏移量(在本例中为 4),“(1)”指定要拾取的字符数。

有关更多信息,请参阅此处的文档:

http://help.sap.com/saphelp_nw04/Helpdata/EN/fc/eb341a358411d1829f0000e829fbfe/content.htm

如果您想依次查看每个字符,您可以使用“strlen()”获取字段的长度并为每个字符执行循环。

于 2013-04-21T15:47:17.050 回答
2

另一种方法

PERFORM analyze_string USING `qwert1yua22sd123bnm,`.

FORM analyze_string USING VALUE(p_string) TYPE string.

  WHILE p_string IS NOT INITIAL.
    IF p_string(1) CA '0123456798'.
      WRITE: /  p_string(1) , 'was a number'.
    ELSE.
      WRITE: /  p_string(1) , 'was no number'.
    ENDIF.
    p_string = p_string+1.
  ENDWHILE.

ENDFORM.

不需要DATA语句、字符串函数或显式索引。

于 2014-10-16T17:04:49.177 回答
0

我知道帖子很旧,但这可能很有用,这就是用途:)

  DATA lv_counter TYPE i.

  DO STRLEN( lv_word ) TIMES.

    IF lv_word+lv_counter(1) CA '0123456789'
      "It's a number 
    ENDIF.

    lv_counter = lv_counter + 1.

  ENDDO.
于 2021-04-19T18:53:49.637 回答