• READ语句相关


    用自定义关键字读取单行

    要从有自定义关键字的内表中读取单行,请使用READ语句的WITH KEY选项,用法如下:

    语法

    READ TABLE <itab> [INTO <wa>] WITH KEY <key> [BINARY SEARCH].

    用 INTO 选项可以指定目标区域 。如果表格有表头行,则可以忽略 INTO 选项。这样,表格工作区域就成了目标区域。

    系统读取 <itab> 中匹配 <key> 中所定义的关键字的第一个条目。关于二分法搜索选项的详细信息,参见二分法搜索。

    如果找到有适当关键字的条目,则将系统字段 SY-SUBRC设置为0,并且SY-TABIX包含该行的索引。否则,将 SY-SUBRC设置为非0值 。

    如下所述,可以定义多个关键字 <key>:

    定义一系列关键字段

    要定义自己的一系列关 键字段,请使用 WITH KEY 选项,用法如下:

    语法

    ....WITH KEY <k1> = <f1> ... <kn> = <fn> ...

    自定义关键字包含表格组件 <k1>...<kn>。字段 <f1>...<fn> 是关键字段的内容必须匹配的值。

    如果 <fi> 的数据类型与数据类型 <ki> 不兼容,则 <fi> 转换为类型 <ki>。

    可以用 (<ni>) 代替 <ki> 来实时设置关键字段。关键字段是字段 <ni> 的内容。如果在运行时 <ni> 为空,则系统忽略该关键字段。如果 <ni> 包含无效的组件名称,则发生实时错误。

    用户可以为任何在关键字中使用的组件指定偏移量和长度(参见指定数据对象的偏移量)。

    将整行定义为关键字

    通过使用 WITH KEY 选项可将内表整行定义为其关键字 ,如下所示 :

    语法

    ....WITH KEY = <value> ...

    如果 <value> 的数据类型与表格行的数据类型不兼容,则将 <value> 转换为表格 行的数据类 型。

    对于此类关键字,也可以选择由某个基本数据类型或内表直接定义的,而不是由 段串直接定义的特定内表行。

    将行首定义为关键字

    要将内表的行首定义为关键字,请使用 WITH KEY 选项,用法如下:

    语法

    ....WITH KEY <k> ...

    系统将(左 对齐)的行首与 <k> 进行比较。 <k> 不能包含内表或包含内表的结构。与上面两个选项不同之处在于用 <k> 的数据类型进行比较。

    示例:

    DATA: BEGIN OF LINE,

             COL1 TYPE C,

             COL2 TYPE P DECIMALS 5,

             COL3 TYPE I,

             COL4 TYPE I,

          END OF LINE.

    DATA ITAB LIKE LINE OCCURS 10.

    DO 10 TIMES.

       LINE-COL1 = SY-INDEX.

       LINE-COL2 = SQRT( SY-INDEX ).

       LINE-COL3 = SY-INDEX ** 2.

       LINE-COL4 = SY-INDEX ** 3.

       APPEND LINE TO ITAB.

    ENDDO.

    READ TABLE ITAB INTO LINE WITH KEY COL3 = 9 COL4 = 36.

    WRITE: / SY-SUBRC, SY-TABIX.

    READ TABLE ITAB INTO LINE WITH KEY COL3 = 9 COL4 = 27.

    WRITE: / SY-SUBRC, SY-TABIX.

    READ TABLE ITAB INTO LINE WITH KEY '2'.

    WRITE: / SY-SUBRC, SY-TABIX.

    其输出为:

        4          0

        0          3

        0          2

    在此,创建包含四列的内表。对表格的10行进行填充之后,用自定义关键字读取单行。有关键字段 COL3、COL4 的自定义序列的第一个 READ 语句失败,第二个 READ 语句找到索引为 3 的行。第三 个 READ 语句搜索以 “2”开始的表格行并找到索引为 2的行。下图显示主要步骤:

    原文:http://blog.csdn.net/animalbe/article/details/5514490

    示例:

    DATA ITAB   TYPE I OCCURS 10,

    DATA SQUARE TYPE I.

    DO 30 TIMES.

       SQUARE = SY-INDEX ** 2.

       APPEND SQUARE TO ITAB.

    ENDDO.

    READ TABLE ITAB INTO SQUARE WITH KEY = 25.

    WRITE: SY-SUBRC, SY-TABIX.

    其输出为:

        0          5

    在此创建包含基本类型 I 行的内表。 填充完表格之后,读取值为 25 且索引为 5 的行。


    二分法搜索

    用关键字读取单行时,可以执行二分法搜索以代替标准顺序搜索。为此,请使用READ语句的二分法搜索选项。

    语法

    READ TABLE <itab> ..... BINARY SEARCH.

    如果使用二分法搜索选项,则必须按关键字 中指定的次 序对内表进 行排序。

    如果系统找 到匹配指定 关键字的多 行,则读取 索引最低的 行。

    二分法搜索 比线性搜索 要快。因此 ,应尽可能 将内表排序 并且使用 二分法搜索 选项。


    指定数据对象的偏移量

    在 ABAP/4 中,可以在 所有处理数 据对象的语句中指定基本数据对象的偏移量值 。

    为此,请在语句中指定 数据对象名称,如下所 示:

    语法

    <f>[+<o>][(<l>)]

    对字段 <f> 中从 <o>+1 开始且长度 <l> 的部分执行该语句的操作。

    如果未指定长度 <l>,则 对该字段 <o> 和结尾之间的所有位置进行处理。

    关于使用READ TABLE语句的注意事项:

    WITH KEY 中的检索条件比较符不能使用‘<>’(不等于)。

    如果只想取得内部表中不等于某条件的一条记录,那么请使用下面变通方法。
    LOOP AT itab WHERE KEY <> ‘XX’.
               此处取得第一条记录。
             EXIT.
           ENDLOOP.

       如果在运行时 <KEY> 值为空,则 统忽略该关键字段。另外可对关键字段指定偏移量和长度。WITH KEY 中的检索条件比较符不能使用‘<>’(不等于)。如果只想取得内部表中不等于某条件的一条记录,那么请使用下面变通方法。
    LOOP AT itab WHERE KEY <> ‘XX’.
               此处取得第一条记录。
             EXIT.
           ENDLOOP.
       如果在运行时 <KEY> 值为空,则 统忽略该关键字段。另外可对关键字段指定偏移量和长度。
  • 相关阅读:
    主动一点
    白鱼泡湿地公园
    Google管理制度(东北分公司)
    碎嘴子
    升级的时代
    SD2.0大型网站架构讨论沙龙
    旅途摘抄《12条职场秘笈》
    fscache 调研
    lxccheckpoint 一些 比较老的资料
    folly,facebook刚刚开源的底层c++函数
  • 原文地址:https://www.cnblogs.com/hanmos/p/2888326.html
Copyright © 2020-2023  润新知