如何在ABAP中读取字符串中的每个字符?例如,我想读取字符串“a7m4d0”中的每个字符。之后我想验证每个字符是字符还是数字。任何提示或想法?
答案 0 :(得分:8)
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
答案 1 :(得分:3)
在最近的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.
答案 2 :(得分:2)
以下是如何访问字符串中的单个字符:
此示例将字符“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()”获取字段的长度,并为每个字符执行循环。
答案 3 :(得分:1)
另一种方法
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
语句,字符串函数或显式索引。
答案 4 :(得分: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.