代码改变世界

ABAP 中的换行符以及日期格式的特殊情况

2018-08-07 15:13  覆盆子  阅读(1997)  评论(0编辑  收藏  举报

1、换行符

当通过EXCEL上传获取数据的时候,常常会无意中带有换行符,换行符在DEBUG的时候我们会看到其会在字符串前后家双引号记忆在字符串后加#,也就是会变成“XXX#”这样,当然你通过CA等方式判断是否包含#这个字符的时候,是会判断失败的,那要怎么判断呢

做如下定义:

DATA: crlf(2TYPE c.

crlf = cl_abap_char_utilities=>cr_lf.

crlf其实就是换行符,debug可以看到其是两个#,也就是##,然后再通过lv_str ca crlf的方式去判断,就会判断成功

如果需要去除#,则需要如下FORM,当然这个FORM也只能将带#的字符串中的#变成空格,所以如果要变成纯字符串,还需要对其中的空格及双引号进行处理

FORM remove_cr_lf  USING    p_str.
  DATA: tcodepage TYPE cpcodepage.
  CALL FUNCTION 'NLS_GET_FRONTEND_CP'
    EXPORTING
      langu                 = sy-langu
      fetype                = 'MS'
    IMPORTING
      frontend_codepage     = tcodepage
    EXCEPTIONS
      illegal_syst_codepage = 1
      no_frontend_cp_found  = 2
      internal_or_db_error  = 3
      OTHERS                = 4.

  CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
    EXPORTING
      intext            = p_str
      inter_cp          = tcodepage
      replacement       = 32     " 等于space, ASC
    IMPORTING
      outtext           = p_str
    EXCEPTIONS
      invalid_codepage  = 1
      codepage_mismatch = 2
      internal_error    = 3
      cannot_convert    = 4
      fields_not_type_c = 5
      OTHERS            = 6.

 

ENDFORM.

 

 

2、日期的特殊情况

当通过EXCEL上传导入日期格式的数据时,系统常常会将数据变成既不是INITIAL又不是’00000000‘,DEBUG看到的却是空值,通过CLEAR处理则会变成’00000000‘

所以这个时候如何判断这个日期字段是否有值呢,就只能用  lv_date = ''来判断了,这个就会判断成功

 

感觉很神奇