说我没有。20101105
,我需要将它与一系列其他的序号进行比较,比如20110105
, 20090105
,找到最接近的序号。。
我不想在整体上比较它,我需要通过解析它来比较每个数字,然后看看哪个最接近。
有人建议如何在ABAP语言中做到这一点吗?
总的来说你应该提到更多的信息。例如,这些数字真的是整数吗?然后,您可以将它们放入内部表中,并对它们进行排序,这是找到与实际扫描相关的任何"最接近"数字的最简单解决方案。这就像整数在排序中一样,它们像数字一样排序,朋友。但是如果你想要按字符进行比较(如果数字是整数,那就没有意义了),我会在do-loop中为你提供一些字符比较的帮助,将较小的字符串长度作为迭代器计数器。我省略了else,那是你的"家庭作业"。: - d
DATA:
lv_length1 TYPE i,
lv_length2 TYPE i,
lv_cnt TYPE i,
lv_teststr1 TYPE string VALUE '123456',
lv_teststr2 TYPE string VALUE '1235'.
lv_length1 = strlen( lv_teststr1 ).
lv_length2 = strlen( lv_teststr2 ).
IF lv_length1 GE lv_length2.
DO lv_length2 TIMES.
IF lv_teststr2+lv_cnt(1) NE lv_teststr1+lv_cnt(1).
BREAK-POINT.
ENDIF.
ADD 1 TO lv_cnt.
ENDDO.
ENDIF.
计数器变量也是第一个不匹配字符的索引。这样就完成了工作。我刚刚编写并测试了
我不知道我是否理解,但也许这有帮助。
report znearest.
data lv_value(8) type n.
parameters p_value(8) type n. " ---------> The value
select-options s_values for lv_value. " -> The list
start-of-selection.
data: wa like line of s_values,
lv_dif(8) type n,
lv_nearest(8) type n,
lv_nearest_dif(8) type n,
lv_first type c.
loop at s_values into wa.
lv_dif = abs( p_value - wa-low ). " Calculate the difference
if lv_first is initial.
lv_nearest_dif = lv_dif.
lv_first = 'X'.
endif.
if lv_dif le lv_nearest_dif. " Compare the differences
lv_nearest = wa-low.
lv_nearest_dif = lv_dif.
endif.
endloop.
write: 'The nearest from', p_value, 'is', lv_nearest.
希望能有所帮助。