2012-04-24 319 views
3

我从excel文件中读取数据。 内部表的所有列都是char128,有2列只包含带小数点的数字。所以我需要检查字段只包含数字或带小数点的数字。如何 ? 谢谢abap程序,如何检查char128字段只包含数字和小数点

功能模块NUMERIC_CHECK,只能检查数字,如果数字有小数点就没用了。

+0

数字可以是负数吗? – tomdemuyt 2012-04-24 11:48:04

+0

是的,其实它可能是任何东西,我只是想检查它,如果它可以转换为数字,我必须显示错误消息给用户 – YuTian 2012-05-08 05:53:14

回答

4

您可以使用CO(只包含):

IF value CO '1234567890.'. 
    "OK 
ELSE. 
    "Error" 
ENDIF. 

也许你还需要在你的IF _ CO语句来的空间。

此检查不检测多个小数点(例如123.45.67.89)。

较新版本的ABAP支持正则表达式。

如果你在你的字符串也空格,你可以将它们添加到CO值:: IF value CO '1234567890 .'.

+0

这不是一个最好的,我已经尝试过,如果值有空间在这里,它将是无用的 – YuTian 2012-05-08 03:32:08

+0

@YuTian你可以在你的比较中添加空格。我修改了我的答案, – knut 2012-05-08 08:49:00

+1

这种技术实际上是无用的,因为它也会让完全的废话像“...... .. ..”。通过。 – vwegert 2012-09-07 15:22:26

0

,如果你想查询字符串是否是一个有效的小数,你可以使用下面的模块功能: 'HRCM_STRING_TO_AMOUNT_CONVERT',它允许您将字符串转换为数字对应字符串,给定字符串,小数点分隔符和千位分隔符。

关于

+0

非常感谢,功能很好 – YuTian 2012-05-08 03:37:23

4

您可能会尝试使用REGEX。报告DEMO_REGEX_TOY允许您输入字符串并根据它们测试正则表达式。

更有经验的人与一般的正则表达式也许能够使这一点更灵活,但这里是我想出了:

-?[0-9]+(\.[0-9]*)? 

- ?任选地匹配 ' - ' 字符(允许底片或非底片

[0-9] +匹配位数(在+使得1个或多个匹配)

\任选。?匹配的“”字符(\需要为“”是操作者)

([0-9] +)?任选十进制

+0

这是一个很好的演示,非常感谢。我会读它 – YuTian 2012-05-08 03:38:27

+0

而不是使用'(?:)而不是'()'用于非子匹配分组。 – Marius 2017-12-14 20:31:01

+0

这会在'-.5'上失败,Refined regex:' - ?(?:[0-9] + \。?| [0-9] * \。[0-9] +)' – Marius 2017-12-14 20:39:43

0

的另一种方法来检查后的任何数字匹配号码:

data: float_value type f. 
try. 
    float_value = <your string value here>. 
catch cx_sy_conversion_no_number. 
    " not a valid number 
endtry. 
+0

是的,我现在在我的代码中使用它。 – YuTian 2012-05-08 03:37:47

相关问题