ABAP 用指针的方式

摘要:
首先定义指针FIELD-SYMBOLS:LIKEgt_tab_out。然后在循环赋值期间使用ASSIGNING关键字初始化指针。

首先要定义指针

FIELD-SYMBOLS: <fs_out> LIKE gt_tab_out.

然后在循环赋值时使用ASSIGNING关键字对指针初始化。

LOOP AT lt_tab_out ASSIGNING <fs_out> WHERE aufnr NE space.
        READ TABLE lt_afko WITH KEY aufnr = <fs_out>-aufnr.
        IF sy-subrc EQ 0.
          MOVE lt_afko-fevor TO <fs_out>-fevor.
          MOVE lt_afko-txt TO <fs_out>-fevortxt.
          CLEAR lt_afko.
        ENDIF.
      ENDLOOP.

2、指针的定义和赋值:(这部分网上参考一部分,后续自己有遇到继续补充)

1、定义指针:
    指针的定义主要有以下语句
    定义任意类型的指针,但是不具备栏位结构(仅仅是一个地址)
      FIELD-SYMBOLS <carrid> TYPE ANY.
  参考数据库表定义(这种指针是含有栏位结构的,参考内表同理)
    
      FIELD-SYMBOLS <sflight> TYPE sflight.
      FIELD-SYMBOLS <sflight> LIKE sflight.
      FIELD-SYMBOLS <sflight> LIKE LINE OF sflight.
  动态定义具有栏位结构的指针类型
    
       DATA: tabname TYPE tabname VALUE 'SFLIGHT' ,   
       dref TYPE REF TO data.
        FIELD-SYMBOLS: <itab> TYPE ANY TABLE.    
        CREATE DATA dref TYPE TABLE OF (tabname).
        ASSIGN dref->* TO <itab>.
    2、指针的分配(常用句法)
    分配某个变量给指针
       ASSIGN var TO <field-symbols>
  分配结构中的某个字段的地址给指针
    
      ASSIGN COMPONENT pos OF STRUCTURE struc TO <field-symbols>.
  分配整个内表行给指针(指针必须定义为有栏位结构的类型)   
      READ TABLE itab INDEX/WITH KEY ASSIGNING <field-symbols>.
      LOOP AT itab
      ASSIGNING  <field-symbols>.
       ENDLOOP.
    分配类的方法或借口给指针
      ASSIGN dref->* TO <field-symbols>.

赋值:
FIELD-SYMBOLS: <fs1>.   "定义一个指针
DATA: num0     TYPE i VALUE 10,
      num1(10) TYPE c VALUE '巴拉巴拉'.
ASSIGN num0 TO <fs1>.

WRITE:/ '<FS1>:',<fs1>.     "输出结果:10
WRITE:/ 'num0:',num0.       "输出结果:10

IF <fs1> IS ASSIGNED.       "一定要进行判断
  <FS1> = 21.
ENDIF.
WRITE:/ 'num0:',num0.       "输出结果:21 ;当指针的值变化时,赋值给指针的变量的值也将改变

1, 创建动态内表: 
a,动态内表的结构的定义. 
   动态内表表结构的定义必须使用表结构与 table type: lvc_t_fcat一样的内表. 
   一般情况下,我们都内表的所有列定义成字符型. 
b,根据表结构生成内表. 
   系统提供了一个标准的method来产生动态表,使用方法如下: 
2, 动态内表的赋值: 
a,获取指定的字段 
b,给指定的字段赋值 
3, 读取动态内表的值: 
a,获取指定的字段 
b,读取指定的字段值 

REPORT  zdyn_test.
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa>,
<dyn_field>.
DATA: dy_table TYPE REF TO data,
     dy_line  TYPE REF TO data,
     it_structure TYPE lvc_t_fcat,
     wa_structure TYPE lvc_s_fcat.
START-OF-SELECTION.
PERFORM create_structure.  " 定义内表的结构
PERFORM create_dynamic_table.  " 按照定义的内表结构,产生一个内表
PERFORM write_data_to_dyntable.  " 向动态内表中写数
PERFORM output_dyntable_data.   " 从动态内表中取数,并写到屏幕
*&---------------------------------------------------------------------*
*&      Form  create_structure
*&---------------------------------------------------------------------*
FORM create_structure .
wa_structure-fieldname = 'COL1'.  " 第一列列名
wa_structure-col_pos   = 1.       " 表示第一列 --- 可心省略,默认情况下,第一行对应到生产内表的第一列,如果指定,则按指定的列顺序生成内表
wa_structure-inttype = 'C'.       " 数据类型
wa_structure-intlen = 6.          " 长度
APPEND wa_structure TO it_structure.
wa_structure-fieldname = 'COL2'.  " 第二列列名
wa_structure-col_pos   = 2.       " 表示第二列--- 可心省略,默认情况下,第一行对应到生产内表的第一列,如果指定,则按指定的列顺序生成内表
wa_structure-inttype = 'C'.       " 数据类型
wa_structure-intlen = 6.          " 长度
APPEND wa_structure TO it_structure.
wa_structure-fieldname = 'COL3'.  " 第三列名
wa_structure-col_pos   = 3.       " 表示第三列 --- 可心省略,默认情况下,第一行对应到生产内表的第一列,如果指定,则按指定的列顺序生成内表
wa_structure-inttype = 'C'.       " 数据类型
wa_structure-intlen = 6.          " 长度
APPEND wa_structure TO it_structure.
ENDFORM.                    " create_structure
*&---------------------------------------------------------------------*
*&      Form  create_dynamic_table
*&---------------------------------------------------------------------*
FORM create_dynamic_table .
CALL METHOD cl_alv_table_create=>create_dynamic_table
   EXPORTING
it_fieldcatalog = it_structure
   IMPORTING
ep_table        = dy_table.
ASSIGN dy_table->* TO <dyn_table>.    " 用表类型指针 <dyn_table> 指向 数据对象的内容.
ENDFORM.                    " create_dynamic_table
*&---------------------------------------------------------------------*
*&      Form  write_data_to_dyntable
*&---------------------------------------------------------------------*
FORM write_data_to_dyntable .
DATA:wa_new_line TYPE REF TO data.
DATA:i TYPE n.
DATA:j TYPE n.
CREATE DATA wa_new_line LIKE LINE OF <dyn_table>.  " 建立一个与动态内表结构相同的数据对象,且数据对象为是一个结构
ASSIGN wa_new_line->* TO <dyn_wa>.
" 用<dyn_wa>指针指向该结构
DO 3 TIMES.
i = i + 1.
   CLEAR j.
   LOOP AT it_structure INTO wa_structure.
j = j + 1.
     ASSIGN COMPONENT wa_structure-fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.  " 用指针 <dyn_field>指向工作区<dyn_wa>中的一个字段,字段名为wa_structure-fieldname.
     CONCATENATE i j INTO <dyn_field>.                                              " 给指针指向的字段赋值
   ENDLOOP.
   APPEND <dyn_wa> TO <dyn_table>.
ENDDO.
ENDFORM.                    " write_data_to_dyntable
*&---------------------------------------------------------------------*
*&      Form  output_dyntable_data
*&---------------------------------------------------------------------*
FORM output_dyntable_data .
LOOP AT it_structure INTO wa_structure.
   WRITE: wa_structure-fieldname(5).
ENDLOOP.
LOOP AT <dyn_table> INTO <dyn_wa>.
   WRITE: / .
   LOOP AT it_structure INTO wa_structure.
     ASSIGN COMPONENT wa_structure-fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.  " 用指针 <dyn_field>指向工作区<dyn_wa>中的一个字段,字段名为wa_structure-fieldname.
     WRITE: <dyn_field>.
   ENDLOOP.
ENDLOOP.
ENDFORM.                    " output_dyntable_data

免责声明:文章转载自《ABAP 用指针的方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JAVA消息服务JMS规范及原理详解maven&amp;amp;nexus_repository 私库搭建与使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用lockbits方法处理图像(转)

   许多图像处理任务即时是最简单的文件类型转换,例如从32位深度到8位深度的格式转化,直接获得像素阵列要比使用GetPixel和SetPixel等方法的效率高得多。         你可能会发现DotNet采用托管机制,大多数情况下微软会推荐你使用托管代码,理由是便捷和安全。实际应用中,直接操作内存中的数据块是很少见的,尽管如此,图像处理恰恰是这类为数...

【译】在Asp.Net中操作PDF – iTextSharp 使用表格

使用Asp.Net生成PDF最常用的元素应该是表格,表格可以帮助比如订单或者发票类型的文档更加格式化和美观。本篇文章并不会深入探讨表格,仅仅是提供一个使用iTextSharp生成表格的方法介绍,本文需要阅读我之前iTextSharp系列文章作为基础: 在ASP.NET中创建PDF-iTextSharp起步 在Asp.Net中操作PDF - iTextSha...

本地开发好的 SAP Fiori Elements 应用,如何部署到 ABAP 服务器上?

这是 Jerry 2021 年的第 29 篇文章,也是汪子熙公众号总共第 300 篇原创文章。 之前 Jerry 的两篇文章,分别介绍了如何在本地使用 Visual Studio Code 创建一个 SAP Fiori Elements 应用,以及使用 Fiori Elements Controller Extension 理念,对该 Fiori Elem...

Layui前后台交互数据获取java

Layui简介 Layui是一款适用于后台程序员的UI框架,学习成本低。Json数据格式交互前后台,并且也相当适用单页面开发。有兴趣的朋友可以看看layui官网。 Layui前后台数据交互 layui有自己的一套特定的数据格式交互(这很重要),必须参数code:0,msg:“”,count:数据size(int),data:”数据List”。一般我们选择...

ABAP中的AMDP(ABAP-Managed Database Procedures )

ABAP托管数据库过程(ABAP-Managed Database Procedure,以下简称AMDP)是在APAP on SAP HANA开发中的一种优化模式。AMDP使用数据库语言书写,比如Native SQL或者是SQL Script,并且在AMDP类的AMDP方法内实现。因此用它开发数据库过程就有点类似于编辑ABAP类。 简而言之,AMDP允许开...

C++指针(二)

  指针提供间接操作其所指对象的功能。与对迭代器进行解引用操作一样,对指针进行解引用可访问它所指的对象,*操作符将获取指针所指的对象:     string s("hello world");     string *sp = &s;         cout<<*sp;             //结果为:hello world   ...