SAP ABAP 指针

SAP ABAP 指针

目录

  • 一、FIELD SYMBOL 字段符号
    • 1、定义
    • 2、assign分配
    • 3.分配-内表
    • 4.动态内表
  • 二、数据引用

一、FIELD SYMBOL 字段符号

定义:是已经存在的数据对象的占位符或者符号名称,通过关键字 FIELD-SYMBOLS 定义,类似于指针,可以指代任何变量。

1、定义

定义方式: FIELD-SYMBOLS:<X> type <Y>

X: 字符符号-名称

Y:字段符号-参照类型

当Y输入时,继承赋给它的变量的所有属性

当Y不输入时,赋给它的变量必须与同类型。

  • generic type
    • 定义field symbol时不指定类型,当分配时,根据数据对象类型继承其技术属性
    • TYPE ANY TABLE - 结构表
    • TYPE ANY - 行结构
  • full type
    • 当定义field symbol时就固定形式定义数据对象,field symbol的技术属性与分配的数据对象相同
    • type | like type
FIELD-SYMBOLS:<f1>.
FIELD-SYMBOLS:<f2> TYPE i.

2、assign分配

语法 :ASSIGN [mem_area] TO [casting_spec][range_spec].

语义:将mem_area分配给 casting_spec range_spec。

  • assign 语句的基本结构
    • 静态分配-字段名已知
      • assign dobj to .
      • 可以使用+(n)对字符串进行截取,分配给field symbol,注意长度
    • 动态分配-字段名未知
      • assign (dobj) to
  • 将结构体字段分配到field symbol中
    • assign component comp of structure struc to
    • comp可以为行编号或者字段名
  • 类型更改,可以通过casting把一个不同类型的变量分配给一个
    • 隐式型变化:ASSIGN TO CASTING
    • 显示型变化:`ASSIGN TO CASTING TYPE .
  • 检查
    • sy-subrc: 成功为零 不成功非零
    • IS ASSIGND
FIELD-SYMBOLS:<fs>.
FIELD-SYMBOLS:<fs1>.
DATA:"str(20)  TYPE c VALUE 'Out',name(20) TYPE c VALUE 'str'.
*Static assignment
ASSIGN name TO <fs>.
WRITE / <fs>.*Dynamic assignment
*动态分配不是将字段f分配给<fs>,而是先找到字段f的内容,再将该内容作为一个新的数据对象分配给<fs>
*是把name变量的值 str 对应的变量地址赋值给<fs1>
*动态分配之后一定要检查 sy-subrc的值
ASSIGN (name) TO <fs1>.
WRITE / <fs1>.

在这里插入图片描述

FIELD-SYMBOLS:<fs_a>.SELECT * FROM t001w INTO  TABLE @DATA(lt_t001w).LOOP AT lt_t001w ASSIGNING FIELD-SYMBOL(<fs_1>).ENDLOOP.READ TABLE lt_t001w ASSIGNING FIELD-SYMBOL(<fs_2>) INDEX 1.READ TABLE lt_t001w ASSIGNING <fs_a> INDEX 1.

3.分配-内表

  • 基本语句定义
    • 如果指定为generic type,必须使用TYPE ANY TABLE
  • 分配语句
    • ASSIGN itab TO <f_s>.
    • 注意
      • 类型可匹配
      • 如果有表头行,应使用itab[] , 否则分配表头行
  • 在读取时,需要使用动态指定方式读取字段
    • READ TABLE <f_s> INTO structre WITH KEY (dobj) = val1
    • 明确指定字段全名会产生错误.
  • 内表循环修改
    • LOOP使用ASSIGNING语句,不需要使用MODIF语句.
    • 直接修改存储在内存中的值,所以可以省略内表值复制到结构体在执行MODIF的过程,提高性能.

"将指针中的变量取出来的两种方式

SELECT * FROM t001w INTO  TABLE @DATA(lt_t001w).
FIELD-SYMBOLS:<fs_a> TYPE ANY TABLE.DATA : lr_obj TYPE REF TO data.*get REFERENCE OF lt_t001w into lr_obj.
*ASSIGN lr_obj->* TO <fs_a>.DATA:lv_d TYPE t001w-werks.READ TABLE <fs_a> ASSIGNING FIELD-SYMBOL(<fs_data>) WITH KEY ('werks') = '1010'.
"将指针中的变量取出来的两种方式
IF sy-subrc = 0.
"先定义 一个固定类型的字段,然后利用指针的隐式转换,直接赋值ASSIGN COMPONENT 'NAME1' OF STRUCTURE <fs_data> TO FIELD-SYMBOL(<value>).lv_d = <value>."先定义 一个固定类型的字段,然后利用指针的隐式转换,直接赋值ASSIGN COMPONENT 'NAME1' OF STRUCTURE <fs_data> TO FIELD-SYMBOL(<value1>) CASTING TYPE werks_d.
ENDIF.

4.动态内表

  • 目的
    • 创建列数不确定的内表
    • 当创建报表遇到行转列,或根据查询到的数据,确定显示ALV列时,可以使用动态内表,在运行是确定列数。
  • 步骤
    • 动态内表的创建,首先要定义动态结构,然后在根据定义的动态结构利用系统一个标准的method:cl_alv_table_create=>create_dynamic_table生成动态内表.
      • 可以使用循环DO,与CONCATENATE语句配合,动态指定字段.
  • 动态内表的赋值.遍历动态结构,获取指定的字段,然后给指定的字段赋值
    • 可以使用LOOP循环中的AT时间,将基本表汇总的数据分块赋值到动态表中
  • 动态内表读取显示.与赋值相似,遍历动态结构,获取指定的字段,然后读取对应的字段值.或使用输出工具直接输出.

二、数据引用

介绍:引用变量存储的是某个对象的地址,而不是实际的内容。ABAP中的引用包括数据引用对象引用,因此,ABAP中有数据引用变量对象引用变量两种,而对象引用又分为类引用接口引用

数据引用使用**CREATE DATA…创建数据对象,对象引用使用CREATE OBJECT…创建类对象,但定义都使用DATA … TYPE REF TO…**的方式来声明一个引用变量(指针)。

数据引用就是指对非对象如基本变量、结构体、内表变量的引用(类似C中的指针)。对象引用指的是对象ABAP语言中的对象进行引用(类似Java中的指针)。

创建数据引用变量的数据类型:

TYPES <t_dref> TYPE REF TODATA.

使用上面创建出来的引用变量数据类型或者是直接通过下面的语句来创建数据引用变量:

**DATA <dref> TYPE REF TO** **DATA****.**

TYPES : typ TYPE c LENGTH 1.
DATA: dref TYPE REF TO typ.
"类型可以是动态指定
CREATE DATA dref TYPE ('TYP') .
dref->* = 'A'.
WRITE: / dref->*."ATYPES : typ2 TYPE REF TO typ.
DATA: dref2 TYPE REF TO typ2."指向指针的指针
CREATE DATA dref2 .
DATA: dref3 TYPE REF TO typ2.
dref3 = dref2."指向同一东西
DATA: c VALUE 'A'.
GET REFERENCE OF c INTO dref2->*.
WRITE: / dref3->*->*."ATYPES: tabtyp TYPE i OCCURS 0,line TYPE LINE OF tabtyp.
DATA: wa TYPE LINE OF tabtyp.
DATA: dref TYPE REF TO tabtyp.
CREATE DATA dref LIKE TABLE OF wa."注:TABLE OF 后面接的是内表的行类型
"CREATE DATA dref TYPE TABLE OF i."也可以是这样
"CREATE DATA dref TYPE TABLE OF line."也可以是这样
APPEND 1 TO dref->*.
LOOP AT dref->* INTO wa.WRITE: wa.
ENDLOOP.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/636663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

systemverilog/verilog文件操作

1、Verilog文件操作 Verilog具有系统任务和功能,可以打开文件、将值输出到文件、从文件中读取值并加载到其他变量和关闭文件。 1.1 、Verilog文件操作 1.1.1、打开和关闭文件 module tb; // 声明一个变量存储 file handler integer fd; initial begin // 以写权限打开一个文…

机器学习实战15-推荐算法-协同过滤在电影推荐中的应用实践

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下机器学习实战15-推荐算法-协同过滤在电影推荐中的应用实践。 随着互联网的发展&#xff0c;信息过载问题日益严重&#xff0c;推荐系统应运而生。本文将详细介绍推荐算法在电影推荐领域的应用实践&#xff0c;以及其…

【Python】--- 基础语法(1)

目录 1.变量和表达式2.变量和类型2.1变量是什么2.2变量的语法2.3变量的类型2.3.1整数2.3.2浮点数&#xff08;小数&#xff09;2.3.3字符串2.3.4布尔2.3.5其他 2.4为什么要有这么多类型2.5动态类型特征 3.注释3.1注释的语法3.2注释的规范 结语 1.变量和表达式 对python的学习就…

muduo网络库剖析——通道Channel类

muduo网络库剖析——通道Channel类 前情从muduo到my_muduo 概要事件种类channel 框架与细节成员函数细节实现使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库&#xff0c;考虑的肯定是众多情况是否可以高效满足&#xff1b;而作为学习者&#x…

多线程-Thread类及常见方法

目录 1.什么是Thread类 1.1Thread 的常⻅构造⽅法 1.2 Thread 的⼏个常⻅属性 2.启动⼀个线程 - start() 经典面试题&#xff1a;start 和run 区别 3.中断⼀个线程 方法一&#xff1a; 方法二: 4.等待⼀个线程 - join() 1.什么是Thread类 Thread类是Java编程语言中的一个重…

图像去噪——CTNet网络推理测试(详细图文教程)

目录 一、CTNet二、源码包准备2.1 测试集2.2 模型权重 三、环境准备四、推理测试4.1 配置参数修改4.2 官网测试4.2.1 测试当通道图像4.2.1.1 命令方式测试4.2.1.2 Configuration配置测试4.2.1.3 测试结果 4.2.2 测试彩色图像4.2.2.1 命令方式测试4.2.2.2 Configuration配置测试…

性能优化-HVX架构简介

来自 「发表于知乎专栏《移动端算法优化》」 本文主要介绍Hexagon DSP的HVX技术&#xff0c;旨在通过简单的语言讲清HVX技术。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开…

Elasticsearch 入门向使用

文章目录 ElasticSearch简介倒排索引安装(单节点)分词器kibana与Mysql概念上的对比索引库CRUD文档CRUDDSL查询相关性算分Function Score Query自定义算分Boolean Query 搜索结果处理排序分页高亮 数据聚合 aggregations自动补全数据同步集群 ElasticSearch 简介 Elasticsearc…

轻松掌握AI辅助设计微信红包封面并快速过审

【无矶之谈】轻松使用AI设计微信红包封面/动态封面并快速过审 关注本公众号梦无矶测开实录&#xff0c;2024年1月21日之后关注最新的文章&#xff0c;后台回复封面红包&#xff0c;即可免费领取本号专属微信红包封面。&#xff08;目前我过审的有五个封面&#xff0c;其中一个…

vue项目执行依赖安装(npm i或npm install )报ls-remote -h -t异常

从git拉取的vue项目执行依赖安装时一直报错&#xff0c; 报错如下图&#xff1a;首先&#xff0c;查看了node版本、npm配置的镜像地址均没找到解决办法。 在命令行中直接输入git发现提示于是从网上搜到了一个博文https://blog.csdn.net/weixin_49159364/article/details/118198…

仰暮计划|“每天清晨五六点钟,爷爷早早起床去田地里采摘蔬菜”

★ 我的奶奶出生于1955年&#xff0c;在我眼里是十分伟大的女性。身处在有六个兄弟姐妹的大家庭里&#xff0c;她从小就肩负起了照顾家人的重任。充满朝气的她&#xff0c;在上学和照顾弟弟妹妹之间穿梭。然而&#xff0c;在她将要上小学五年级的时候&#xff0c;文化大革命的爆…

[绍棠] docxtemplater实现纯前端导出word

1.下载需要的依赖 2.util文件夹下创建doc.js文件 doc.js import docxtemplater from docxtemplater import PizZip from pizzip import JSZipUtils from jszip-utils import { saveAs } from file-saver import ImageModule from "docxtemplater-image-module-free"…

力扣hot100 最长有效括号 动态规划

Problem: 32. 最长有效括号 文章目录 思路Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 Code ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) class Solution {public int longestValidParentheses(String s){int n s.length();…

Python武器库开发-武器库篇之Fofa-API使用(四十六)

Python武器库开发-武器库篇之Fofa-API使用(四十六) FOFA&#xff08;FOcus Observation of Futures Assets&#xff09;是一款专业的网络资产搜索引擎&#xff0c;旨在帮助企业发现和评估网络上的潜在安全风险。FOFA的基本原理是通过搜索引擎的方式&#xff0c;按照关键词对互…

【Redis】更改redis中的value值

今天继续进步一点点~~ 背景&#xff1a;今天有个前端的同事问我&#xff0c;能不能在Redis中他本人登录公众号的 sessionID 加上一列openID 于是我上网查了一堆在Redis里面的命令&#xff0c;以及不同的客户端怎么输入命令&#xff0c;但是后来问了下同事&#xff0c;他就给我…

PDshell16逆向PostgreSQL 工程显示字段comment备注

现状&#xff1a;当刚逆向成功的表结构是没有原来表结构中的&#xff0c;comment备注如下 然后pd逆向工程的sql已经返回了这个备注的含义 解决方案&#xff1a; 1、设置显示注释列 tools——Display Preferences…如下 勾选-按照下面得方式勾选这三个 复制这里的VBS脚本&a…

OpenVINS学习7——评估工具的简单使用

前言 OpenVINS自带评估工具&#xff0c;这里记录一下使用方法&#xff0c;我是以VIRAL数据集为例&#xff0c;但是目前仍然有问题&#xff0c;发现误差很大&#xff0c;我还没搞明白哪里出了问题。 工具介绍 主要参考 https://docs.openvins.com/eval-error.html https://bl…

Windows和Linux访问不了GitHub的解决方法

一、Windows访问不了GitHub 问题描述 使用Windows访问GitHub时&#xff0c;出现如下情况&#xff0c;显示无法访问。 解决方案&#xff1a; 打开域名查询网站&#xff1a;https://tool.chinaz.com/dns 输入GitHub的域名&#xff0c;点击立即检测。 出现如下页面&#xff0c…

实验五 PLSQL编程

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

git设置代理

git设置代理 git config --global http.proxy 127.0.0.1:7890git查询代理 git config --global http.proxy git取消代理 git config --global --unset http.proxy