tangToms

ABAP WRITE语句

ABAP使用Write,Write TO语句。

示例:

"******************************************************************
"Write使用
"******************************************************************
FORM f_test_write.
  DATA testTxt TYPE String value \'hello world!\'.
  WRITE at / testTxt."换行
  WRITE at /5 testTxt."从第5列开始输出
  WRITE at /(10) testTxt."只显示10位字符
  WRITE at /5(15) testTxt."从第5列开始显示15位字符
  WRITE:/\'****************************\'.

  "write <obj> <format> 按照固定格式显示
  WRITE / testTxt LEFT-JUSTIFIED. "靠左显示
  WRITE / testTxt RIGHT-JUSTIFIED. "靠右显示
  WRITE / testTxt CENTERED. "居中显示
  WRITE / testTxt NO-GAP. "无空格显示

  DATA testTime type String value \'1234311111\'.
  WRITE / testTime USING EDIT MASK \'__:__:__\'. "使用固定格式显示
  Data testData type String value \'00000134\'.
  WRITE / testData no-ZERO."不输出前面0, no-sign 不输出正负号
  DATA testData1 type F value \'3.44444\'.
  WRITE / testData1 DECIMALS 3 . "显示小数点后位数
  DATA testData2 type F value \'3.44564\'.
  WRITE / testData2 ROUND 3. "四舍五入小数位数

  "write as checkbox
  WRITE:/\'****************************\'.
  DATA:  FLAG1  VALUE  \'\',
         FLAG2  VALUE  \'X\'.
  WRITE: / \'CHECK FLAG 1:\' , FLAG1  AS  CHECKBOX.
  WRITE: / \'CHECK FLAG 2:\' , FLAG2  AS  CHECKBOX.

  "write as sinbol Icon
  INCLUDE  <SYMBOL>.
  INCLUDE  <ICON>.
  WRITE: / \'Phone Symbol:\' ,  SYM_PHONE  AS   SYMBOL.
  WRITE: / \'Alarm Icon:\' ,  ICON_ALARM  AS  ICON.


  "write to
  "语法:WRITE {source|(source_name)} TO destination [format_options].
  "format_options:
*    [LEFT-JUSTIFIED|CENTERED|RIGHT-JUSTIFIED]
*    { { [EXPONENT exp]
*        [NO-GROUPING]
*        [NO-SIGN]
*        [NO-ZERO]
*        [CURRENCY cur]
*        { { [DECIMALS dec]
*            [ROUND scale] }
*          | [UNIT unit] } }
*      | { [ENVIRONMENT TIME FORMAT]
*          [TIME ZONE tz] }
*      [STYLE stl] }
*    [USING { {NO EDIT MASK}|{EDIT MASK mask} }]
*    [ DD/MM/YY   | MM/DD/YY
*    | DD/MM/YYYY | MM/DD/YYYY
*    | DDMMYY     | MMDDYY
*    | YYMMDD ]

  "示例1:转换xx,xxx
  DATA: testString TYPE string.
  DATA: testFloat TYPE P LENGTH 16 DECIMALS 2.
  DATA: testChar(20) TYPE C.
  testString = \'-113233.00\'.
  testFloat = testString.
  "转换为xxx,xxx表示
  WRITE testFloat TO testChar.
  WRITE:/ testChar.
  "去除前置空格
  CONDENSE testChar NO-GAPS.
  "添加负号
  testString = \'-\' && testChar.
  WRITE:/ testString.

  "示例2:
  DATA:date_long  TYPE c LENGTH 10.
  DATA:date_short TYPE c LENGTH 8.
  DATA:date_mask  TYPE c LENGTH 8.
  WRITE sy-datlo TO: date_short,
                     date_long,
                     date_mask DD/MM/YY.
  WRITE:/ date_short,date_long,date_mask.

  "示例3:字符串位置left,center,right
  DATA formatted_text TYPE c LENGTH 50.
  WRITE \'Left\'   TO formatted_text LEFT-JUSTIFIED.
  "MESSAGE formatted_text TYPE \'I\'.
  WRITE:/ formatted_text.
  WRITE \'Center\' TO formatted_text CENTERED.
  "MESSAGE formatted_text TYPE \'I\'.
  WRITE:/ formatted_text.
  WRITE \'Right\'  TO formatted_text RIGHT-JUSTIFIED.
  "MESSAGE formatted_text TYPE \'I\'.
  WRITE:/ formatted_text.

  "示例4:EXPONENT exp
  DATA: float          TYPE f.
  DATA: formatted_text1 TYPE c LENGTH 6.
  float = SQRT( 2 ).
  WRITE  float TO formatted_text1 EXPONENT 0.
  WRITE:/ formatted_text1.
  WRITE  float TO formatted_text1 EXPONENT 1.
  WRITE:/ formatted_text1.

  "示例5: NO—GROUPING,不添加千分符
  DATA: test_number(10) TYPE P DECIMALS 2.
  DATA: formatted_text2 TYPE c LENGTH 6.
  test_number = \'3333.33\'.
  WRITE test_number TO formatted_text2 NO-GROUPING.
  "*33.33,千分符变成*
  WRITE:/ formatted_text2.

  "示例6: NO-SIGN
  DATA: test_number1(10) TYPE P DECIMALS 2.
  DATA: test_number2 TYPE I.
  DATA: formatted_text3 TYPE c LENGTH 6.
  test_number1 = \'3333.33\'.
  test_number2 = -15.
  WRITE test_number1 TO formatted_text3 NO-SIGN.
  "*33.33?
  WRITE:/ formatted_text3.
  WRITE test_number2 TO formatted_text3 NO-SIGN.
  "15,负号去掉
  WRITE:/ formatted_text3.

  "示例7: NO-ZERO
  "不能同时用ENVIRONMENT TIME FORMAT and TIME ZONE.
  DATA: test_number3(10) TYPE N.
  DATA: formatted_text4 TYPE C LENGTH 20.
  test_number3 = 123.
  "0000000123添加了前置0
  WRITE test_number3 TO formatted_text4.
  WRITE:/ formatted_text4.
  "去掉前置0
  WRITE test_number3 TO formatted_text4 NO-ZERO.
  WRITE:/ formatted_text4.

  "示例8:CURRENCY
  "table:TCURX
  " ENVIRONMENT TIME FORMAT and TIME ZONE
  "and not for the numerical data types decfloat16 and decfloat34
  DATA: test_int  TYPE i VALUE 12345678.
  DATA: formatted_text5 TYPE c LENGTH 10.
  WRITE test_int TO formatted_text5 CURRENCY \'EUR\'.
  WRITE:/ formatted_text5.

  "示例9:DECIMALS dec
  "不能同时用ENVIRONMENT TIME FORMAT, TIME ZONE, and UNIT.
  DATA: test_pack TYPE p LENGTH 8 DECIMALS 4 VALUE \'1234.5678\'.
  DATA: formatted_text6 TYPE c LENGTH 10.
  "两位小数
  WRITE test_pack TO formatted_text6 DECIMALS 2.
  WRITE:/ formatted_text6.


  "示例10:ROUND
  "不能同时用STYLE, ENVIRONMENT TIME FORMAT, TIME ZONE, and UNIT
  DATA: test_pack1 TYPE p LENGTH 8 DECIMALS 0 VALUE \'12345678\'.
  DATA: formatted_text7 TYPE c LENGTH 12.
  "123,457
  WRITE test_pack1 TO formatted_text7 ROUND 2.
  WRITE:/ formatted_text7.
  "12,346
  WRITE test_pack1 TO formatted_text7 ROUND 3.
  WRITE:/ formatted_text7.

  "示例11:UNIT
  "表:T006 字段MSEHI
  "不能同时用DECIMALS, ROUND, STYLE, ENVIRONMENT TIME FORMAT, and TIME ZONE
  DATA: test_pack2 TYPE p LENGTH 8 DECIMALS 4 VALUE \'1234.0000\'.
  DATA: formatted_text8 TYPE c LENGTH 12.
  WRITE test_pack2 TO formatted_text8 UNIT \'%\'.
  WRITE:/ formatted_text8.

  "示例12:
  "ENVIRONMENT TIME FORMAT
  "不能同时用CURRENCY, DECIMALS, EXPONENT, NO-GROUPING, NO-SIGN,
  "NO-ZERO, ROUND, STYLE, TIME ZONE, or UNIT
  "TIME ZONE tz
  "不能同时使用CURRENCY, DECIMALS, ENVIRONMENT TIME FORMAT, EXPONENT,
  "NO-GROUPING, NO-SIGN, NO-ZERO, ROUND, STYLE, or UNIT
  "表TTZZ
  DATA: time_stamp     TYPE timestamp.
  DATA: tzone          TYPE timezone.
  DATA: formatted_text9 TYPE c LENGTH 50.
  time_stamp = 20100627180000.
  tzone      = \'AUSTAS\'.
  WRITE time_stamp TO formatted_text9 TIME ZONE tzone.
  WRITE:/ formatted_text9.

  "示例13
  "STYLE stl
  "不能同时使用CURRENCY, DD/MM/YY, ... , YYMMDD, ROUND,
  "ENVIRONMENT TIME FORMAT, TIME ZONE, and UNIT
  "获取format
  DATA: cldescr  TYPE REF TO cl_abap_classdescr,
        formats  TYPE abap_attrdescr_tab,
        format   LIKE LINE OF formats.
  FIELD-SYMBOLS <format> LIKE cl_abap_format=>o_scientific.
  DATA: BEGIN OF s_format,
          value LIKE cl_abap_format=>e_xml_text,
          name  TYPE abap_attrdescr-name,
        END OF s_format.
  DATA:lt_formats LIKE SORTED TABLE OF s_format WITH UNIQUE KEY value.
  DATA:lv_number TYPE decfloat34 VALUE \'123456789.3146\'.
  DATA:formatted_text10 TYPE C LENGTH 20.

  cldescr ?= cl_abap_classdescr=>describe_by_name( \'CL_ABAP_FORMAT\' ).
  formats = cldescr->attributes.
  DELETE formats WHERE name NP \'O_*\' OR is_constant <> \'X\'.
  "获取format
*  O_SIMPLE
*  O_SIGN_AS_POSTFIX
*  O_SCALE_PRESERVING
*  O_SCIENTIFIC
*  O_SCIENTIFIC_WITH_LEADING_ZERO
*  O_SCALE_PRESERVING_SCIENTIFIC
*  O_ENGINEERING
  LOOP AT formats INTO format.
    ASSIGN cl_abap_format=>(format-name) TO <format>.
    s_format-value = <format>.
    s_format-name = format-name.
    INSERT s_format INTO TABLE lt_formats.
  ENDLOOP.

  LOOP AT lt_formats INTO s_format.
    WRITE lv_number STYLE s_format-value TO formatted_text10.
    WRITE:/ formatted_text10.
  ENDLOOP.


  "示例14:USING { {NO EDIT MASK}|{EDIT MASK mask} }
  DATA: dura           TYPE i.
  DATA: time           TYPE t VALUE \'080000\'.
  DATA: formatted_text11 TYPE c LENGTH 30.
  dura = sy-uzeit - time.
  time = dura.
  "function:CONVERSION_EXIT_DURA_OUTPUT,==开头
  WRITE dura TO formatted_text11 USING EDIT MASK \'==SDURA\'.
  WRITE:/ formatted_text11.
  "RR:靠右,LL:靠左,_会被替换
  WRITE time TO formatted_text11 USING EDIT MASK \'RRThe duration is __:__:__\'.
  WRITE:/ formatted_text11.

  "示例15:
*  DD/MM/YY   | MM/DD/YY
*  | DD/MM/YYYY | MM/DD/YYYY
*  | DDMMYY     | MMDDYY
*  | YYMMDD
  DATA formatted_text12 TYPE c LENGTH 50.
  WRITE sy-datlo TO formatted_text12 YYMMDD.
  WRITE:/ formatted_text12.
  WRITE sy-datlo TO formatted_text12 DD/MM/YYYY.
  WRITE:/ formatted_text12.

ENDFORM.

 

 

分类:

技术点:

相关文章: