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.