热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据的输出与数值传递

1.数据的基本输出通过关键字WRITE的声明,能够实现数据对象的输出,并能够实现输出对象的长度、输出位置及格式等属性的控制。与变量定义一样,WRITE可以同时输出多个数据对象,对于

1.数据的基本输出

      通过关键字"WRITE"的声明,能够实现数据对象的输出,并能够实现输出对象的长度、输出位置及格式等属性的控制。与变量定义一样,WRITE可以同时输出多个数据对象,对于不同的对象可以通过反斜杠”/”换行输出。

例如:

DATAWORD(16VALUE '0123456789ABCDEF'.
DATATYPE VALUE 123.
WRITE WORD.           "单独输出一个变量
WRITE:/ WORD,
      / N.            "换行输出两个变量
WRITE AT (10WORD.   "输出变量的前10位‘0123456789’
WRITE AT /5(10WORD"从第5格开始输出变量的前10位‘56789ABCDE’

2.数据的格式化输出

2.1 NO-ZERO : 若输出对象为N或C类型,将前面的0取代为空格

DATA STR(10TYPE C.
STR '000123456'.
WRITE STR.            "输出:000123456
WRITE / STR NO-ZERO.  "输出:   123456

 

2.2 NO-SIGN:对于I、P或F类型,前面都会有一个标识符号,在实际输出中占用一位但不显示,使用该语法其前面的符号不会输出

DATA STR(10TYPE P.
STR '123456789'.
WRITE STR.           "输出:123,456,789
WRITE / STR NO-SIGN"输出:123,456,789

 

2.3 NO-GROUPING:对于I或P类型,省略千分号符号。

DATA NOWDATE TYPE P.
NOWDATE '20130730'.
WRITE NOWDATE.                 "输出:20,130,730
WRITE / NOWDATE NO-SIGN.       "输出:20,130,730
WRITE / NOWDATE NO-GROUPING.   "输出:20130730

 

2.4 DD/MM/YY、MM/DD/YY、DD/MM/YYYY、MM/DD/YYYY、DDMMYY、MMDDYY、YYMMDD :定义日期输出格式。

DATA:NOWDATE TYPE D.
NOWDATE '20130730'.
WRITE / NOWDATE.            "输出:20130730
WRITE / NOWDATE DD/MM/YY.   "输出:13/07/30
WRITE / NOWDATE MM/DD/YY.   "输出:13/07/30
WRITE / NOWDATE DD/MM/YYYY"输出:2013/07/30
WRITE / NOWDATE MM/DD/YYYY"输出:2013/07/30
WRITE / NOWDATE DDMMYY.     "输出:130730
WRITE / NOWDATE MMDDYY.     "输出:130730
WRITE / NOWDATE YYMMDD.     "输出:130730

 

2.5 CURRENCY w:使货币字段按格式输出,w代表货币单位。维护表TCURX中货币类型时有效。

DATA SALES TYPE P.
SALES 93860.
WRITE / SALES CURRENCY 'DEM' ROUND DECIMALS 2."输出:9.39 (四舍五入)WRITE / SALES CURRENCY 'ITL' ROUND DECIMALS 2."输出:938.60

 

 2.6 DECIMALS d:控制输出数值小数位.

DATA:TYPE DECIMALS VALUE '1.267',
     Y TYPE VALUE '125.456E2'.

WRITE:DECIMALS 0"输出结果:1
      / DECIMALS 2"输出结果:1.27
      / DECIMALS 5"输出结果:1.26700
      / Y DECIMALS 0"输出结果:1E+04
      / Y DECIMALS 1"输出结果:1.3E+04
      / Y DECIMALS 5"输出结果:1.25456E+04
      / Y DECIMALS 20."输出结果:1.2545600000000000E+04

 

2.7 +():字符串按某一偏移量进行输出,即可以截取字符串中的一段。

DATA:X(10TYPE VALUE 'ABCDEFGHIJ'.
WRITE:/ X+0(10),"輸出:ABCDEFGHIJ
      / X+0(5)"輸出:ABCDE
      / X+1(9)"輸出:BCDEFGHIJ
      / X+5(3)"輸出:FGH

 

2.8 EXPONENT DECIMALS :对于浮点型数值,输出采用科学记数法。

DATATYPE VALUE '1023456987886'.
WRITEEXPONENT 0"输出:1023456,987,886
       / EXPONENT 3, "输出:1023456,987,886
       / EXPONENT 9, "输出:1023456,987,886
       / DECIMALS 4. "输出:*3456987886.0000

 

 

2.9  ROUND r: 移除数值左边或右边的r位数据.

DATA:TYPE DECIMALS VALUE '12493.97'.
WRITE:ROUND -2,"輸出:1,249,397.00
      / ROUND 0"輸出:12,493.97
      / ROUND 2"輸出:124.94
      / ROUND 5"輸出:0.12

 

2.10  TIME ZONE tz:实现不同时区的时间转换.

DATA:S_TST TYPE TIMESTAMP.
S_TST 20130731063015.

WRITE:S_TST TIME ZONE 'UTC+12',        "輸出:2013/07/31 18:30:15
    /S_TST TIME ZONE 'UTC+12'DD/MM/YY."輸出:13/07/31 18:30:15

 

 

2.11 USING EDIT MASK mask:输出数据自定义格式。

DATA TIME TYPE VALUE '143020'.
WRITE /(8TIME USING EDIT MASK  '__:__:__'.  "输出:14:30:20
WRITE /(5TIME USING EDIT MASK  '_:_:_'.     "输出:1:4:3

 

2.12  UNDER g:参照上一行输出位置并列输出,只对WRITE 语法有效。

WRITE:/10 'NAME'(001)15'RoomNo'62'Age'(002).
WRITE:'SANLLY' UNDER 'NAME'(001),
        '4.2'    UNDER 'RoomNO',
        '20'     UNDER 'Age'(002).

输出结果: Name               RoomNo             Age

               SANLLY              4.2                  20

 

2.13  NO-GAP :去除输出值间的空格,该语法只对WRITE语句有效。

WRITE:'A'NO-GAP,'B'NO-GAP,'C'."输出:ABC
WRITE:/'A','B','C'.             "输出:A B C

 

2.14 输出数据对齐方式的设置:

LEFT-JUSTIFIED(向左对齐)、

RIGHT-JUSTIFIED(向右对齐)、

CENTERED(居中对齐)


DATACOUNT TYPE VALUE 100.
WRITE/5 'The total count is',COUNT LEFT-JUSTIFIED.
WRITE/5 'The total count is',COUNT RIGHT-JUSTIFIED.
WRITE/5 'The total count is',COUNT CENTERED.

不同的数据类型都会有各自默认的对齐方式。各基本数据默认输出对齐方式如下表所示:

 C=LEFT-JUSTIFIED  I=RIGHT-JUSTIFIED  P=RIGHT-JUSTIFIED  F=RIGHT-JUSTIFIED
 N=LEFT-JUSTIFIED  D=LEFT-JUSTITIED  T=LEFT-JUSTIFIED  X=LEFT-JUSTIFIED

 

 

 

3.數据的赋值

    对变量的赋值是程序的常用操作之一,ABAP通常的赋值语句是MOVE或赋值运算符”=“,还可以通过WRITE语句实现将源字段的值赋值给目标变量,源字段可为常量或变量等数据对象。语法定义如下:

    MOVE TO .

     = .

    这两种方式是完全等价的,另外,通过WRITE语名可以实现字符类型数值传递而不会输出该值。

    WRITE  TO  .

     WRITE赋值只可以在字符类型对象中赋值,否则系统会出错。      

     数据赋值还可以使用源字段的偏移量。下例实现在源字段中取偏移量赋值给目标变量,其语法定义及实例如下:

      +() = .

例如:

DATA TYPE VALUE 186.
DATATYPE I.
MOVE TO B.
WRITE/ A,"输出:186
       / B."输出:186

再如:

DATAWORD1(18TYPE VALUE '0123456789ABCDEFGH',
      WORD2 LIKE WORD1.

MOVE WORD1+10(5TO WORD2.
WRITE/ WORD1,"輸出:0123456789ABCDEFGH
       / WORD2."輸出:ABCDE

 

 

4.通过指针实现数据的赋值.

  与上面赋值方式不同,字段符号(FIELD SYMBOLS)不是直接对变量赋值,而是通过指针给变量分配源字段的内存地址。指针对象通过语名FIELD-SYMBOLS加上尖括号“<>”来定义,用语句ASSIGN来分配数值。

DATA:NUMBER TYPE VALUE 12.
FIELD-SYMBOLS:,
            TYPE I,
            LIKE NUMBER.

ASSIGN:NUMBER TO ,
       NUMBER TO ,
       NUMBER TO .

5.数据类型的转换

   在不同的数据对象之间赋值时,系统会自动进行类型转换,转换过程遵照固定规则进行,

例如将一个C类型数据赋值给N类型的对象,只有数字字符被传递,其他字符则被忽略。

DATA:TEXT(10TYPE VALUE 'ABC1234567',
     NUM(10TYPE N,
     INT TYPE I.

NUM TEXT.
INT NUM.

WRITE:NUM,"0001234567
    / INT."1,234,567

   变量ttext赋值给tnum时,ABC被转换为000,当tnum赋值给tint时,默认取其整数部分。需要注意的是,C类型不能直接赋值给I,如果上例语句中写与tint=ttext,系统将报错提示数据类型转换错误。

      ABAP中还可以使用以下语法实现数据间赋值:

      MOVE A TO B.      

      WRITE A TO B.

 

     不同进制之间的转换可以参考如下方法:

DATA:CHR TYPE C.

 FIELD-SYMBOLS: TYPE X"定义一个十六进制的指针类型
               TYPE C.
CHR 'A'.
ASSIGN CHR TO  CASTING.  "将字符转换为十六进制
  + 1.
ASSIGN  TO  CASTING"将十六进制的指针对象转换为字符指针对象
MOVE  TO CHR.            "将指针变量赋值到字符变量


推荐阅读
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文介绍了如何在 Spring Boot 项目中使用 spring-boot-starter-quartz 组件实现定时任务,并将 cron 表达式存储在数据库中,以便动态调整任务执行频率。 ... [详细]
  • 本文探讨了如何在C#应用程序中通过选择ComboBox项从MySQL数据库中检索数据值。具体介绍了在事件处理方法 `comboBox2_SelectedIndexChanged` 中可能出现的常见错误,并提供了详细的解决方案和优化建议,以确保数据能够正确且高效地从数据库中读取并显示在界面上。此外,还讨论了连接字符串的配置、SQL查询语句的编写以及异常处理的最佳实践,帮助开发者避免常见的陷阱并提高代码的健壮性。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • 在尝试将 mysqldump 文件加载到新的 MySQL 服务器时,遇到因使用保留关键字 'table' 导致的语法错误。 ... [详细]
  • 本文介绍了如何在Spring框架中使用AspectJ实现AOP编程,重点讲解了通过注解配置切面的方法,包括方法执行前和方法执行后的增强处理。阅读本文前,请确保已安装并配置好AspectJ。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • 在C#中开发MP3播放器时,我正在考虑如何高效存储元数据以便快速检索。选择合适的数据结构,如字典或数组,对于优化性能至关重要。字典能够提供快速的键值对查找,而数组则在连续存储和遍历方面表现优异。根据具体需求,合理选择数据结构将显著提升应用的响应速度和用户体验。 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 英语面试技巧:提升个人技能与表现
    在英语面试中,个人技能是指除专业知识外,能够促进职业发展的各种能力。虽然你可能具备多种技能,但建议重点突出与目标岗位最相关的几项,以增强面试官对你专业能力和适应性的认可。 ... [详细]
  • 如何使用和示例代码解析 org.semanticweb.owlapi.model.OWLSubPropertyChainOfAxiom.getPropertyChain() 方法 ... [详细]
author-avatar
dafeige
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有