课前复习
P (4) 长度4个字节
Xstring (10) 长度为10个字节,可以容纳20个数字
大结构体与小结构体的兼容
Move 大 to 小 大的覆盖小的 大结构体的剩余部分保持不变
Move 小 to 大 匹配的部分 被小的覆盖, 其余的字段被初始化
P 类型 与 F类型的优缺点
P:计算精确,适合商业结算,但范围短
F:储存范围大,计算不精确
P 与 F 类型的运算方式
F IEEE 用二进制数进行运算
P 采用半字节储存一个数字的方式进行运算
字段 结构体 兼容问题
1. 字段兼容:类型和长度相同
2. 结构体:字段按顺序兼容,并且字段数相同
3. 内表兼容:行类型相同, KEY 兼容,表类型相同
如果字符串 move 到一个比字符串小的结构体 ,
[][][][] ---à [][]
[][]
一个字段 move 到一个 内表中
Internal table 内表.
1. 静态数据对象包括: 简单数据类型(除了string 和xstring 类型), 结构体(不包含string 和xstring 类型)
2. 动态数据对象:string , xstring , 包含string 或 xstring 的结构体, 内表
一个结构体是否可以包含STRING 或xstring, 如果可以 结构体可以拓展吗?
定义一个 只有一个字段的 内表 字段长度是c(18),
定义一个结构体 结构体里 包含三个字段, 类型 随意, 第二个类型,是另一个结构体
定义一个内表 内表的行类型 是第一个结构体.
再用第二个结构体定义一个内表 ,利用这个内表 作为行类型,做一个内表
内表的三个基本属性
1. line type 行类型
2. key definition 键类型
3. table kind 表类型
1) 在standard table 中 使用 table key的查找方式为 table scan 全表扫描
2) 在 sorted table 中使用table key 在遵循; left-aligned 从左至右匹配, no gaps 没有间隔,使用”=” 填充字段时, 使用 二分查找法 ,其它情况下 使用 table scan查找
3) 对hash表访问, 只能通过key访问单条记录, 访问的速度不依赖于表中的数据量,而在其余两种表中,查询的时间与表中数据量成正比
其它情况是否代表,只是顺序不符合left-aligned. 哈希表可以通过部分的key 进行访问吗?
定义内表
1. 定义一个局部内表类型,通过该类型定义内表变量
2. 直接定义字段 直接定义内表变量(隐藏了一个内表类型)
3. 通过全局内表类型定义内表变量
标准的定义内表语句
Types or DATA name
TYPE table_kind
OF line_type
WITH key_def
[INITIAL SIZE n.]
Table kind and key. 表类型 和 表键
注意:在定义standard类型的内表时,如果使用 WITH DEFAULT KEY. 系统会自动将内表中的字符类型字段(c,n,d,t,x,string,xstring)组合成table key.
内表的key
1. standard标准表: key 不唯一.
2. sorted排序表: 可以指定KEY是否唯一
3. Hash 哈希表: KEY必须是唯一
在内表中使用不是结构体类型的行类型
当内表的行类型只有一列的时候,需要使用pseudo-compnent 伪列,
用途:设置一个按钮工具栏,用只含有一列的内表.
对内表的操作
1. move对内表的拷贝
2. clear 将数据清空
3. free 释放内存
4. compare表之间的操作,比较
5. sort 排序表
6. array fetch
递归比较
1. 先对内表之间的行数进行比较
2. 如果有必有的话,还需要对行的组件进行比较
内表之间的比较
用行数比较, 有必要的话 可以 用内容比较
定义两个内表 两个 内表不兼容 一个有3个字段 一个有5个
对两个内表进行比较.
定义两个内表, 结构一样 , 变量不一样
全做成数字型字段
第一个 添加 小数字
第二个内表 添加大数字
排序可以指定升序降序.
对内表具体操作
1. Insert 插入
2. Read 读取
3. Change 修改
4. Delete 删除
5. Insert summated collect. 插入累计
对内表中的数据行进行限制条件操作
对数据的访问
一、单条数据访问
1) 通过 table key访问
2) 通过 line index 访问(对于line index 类型内表)
3) 通过 condition条件访问
二、多条数据访问
1) 通过condition条件访问
2) 通过 index interval 通过行区间访问
指定访问数据的传输方式
1. 使用 结构体 work area 进行 copy 对内表数据进行操作
2. 定义 field symblo 指针 指向访问数据,(可以直接访问数据)
3. 通过将内表插入内表的操作
重要: 不能通过line index 对hash 表 进行访问, 在排序表中插入数据.除非插入的位置 正好是排序表中规定的位置,否则会出现 运行期异常(强烈不推荐使用insert往 sorted b表中插入数据)
Field symbol 指针
作用: 直接对内表进行操作,而不用再重新定义结构体对目标内表数据进行拷贝, 增大了效率.
定义指针语法:
Data: var_a TYPE I VALUE 4.
FIELD-SYMBOLS: <fs> TYPE i.
ASSIGN var_a TO <fs>.
<fs> = 77.
重要: 定义的指针名,必须加”<>”
Insert 插入操作
一、 单条数据的插入操作
1) 标准表: 可以使用 index (推荐) 和 table key 方式插入
2) 排序表: 可以通过 table key方式插入 , 但也可以用index插入(强烈不推荐, 很有可能出现运行错误)
3) Hash表: 只能够用table key 方式插入
二、 多条记录的插入
1) 源内表为 index table : 则可以指定源内表的数据范围,并插入到目标内表中
2) 目标内表为index table: 则可以可以指定目标内表被插入数据的具体index 位置.
具体的语句插入语法:
Insert wa INTO TABLE itab. 单条插入不指定位置
Insert wa INTO itab INDEX n. 单条插入指定插入位置
INSERT LINES OF itab1
[from n1 to n2]
INTO TABLE itab2.
INTO itab2 [ INDEX n]
读取 内表的一条 将数据 读到结构体中
如果系统独到行 sy-subrc = 0 . 然后读取到结构体中,
Sy-tfill 存放总行数
Sy-tleng 行的长度
Transporting
指定特定列 传输字段 , 传送部分字段
TRANSPORTING NO Fields 不传值, 作用 ,看内表中 有没有 这条数据
Camparing
有一个结构体 和内表
C1 C2 C3
Lh 0019 17
Lh 0018 18
通过comparing 后的值, 可以判断读取的值是否符合要求.
现在结构体中需要比较的字段赋值,
先判断 相应字段是否相等
回去做个练习
比较成功 sy-subrc = 0
Zmycompare_2009
用一个结构作为 查询条件,
到内表查询符合条件的数据
With key 可以用 table key 或 普通字段作为条件
使用field symbol
通过一个内表 定义一个 结构体 作为 指针
Read table itab [index n / key ] assigning <fs>.
Write: / <fs>-field_1.
直接修改 <fs> 的值 会怎么样?
Change 修改内表
Transporting 的 传输方向
通过 field symbol
直接修改 内表
重要: 不能直接指针对sorted 和 hash表进行操作
Delete
Delete table itab key
Key: from wa ()
With table key k1 = f1….
不能用sort 对排序表进行排序
对 sorted 表进行 insert modify , 使用不当 可能会出错
HASH表不能通过 index 进行操作
Header line
With head line 关键字定义 废弃用法
Occur + 整数, 10 ,
Occur 0 , 默认大小,
Occur 0 with head line 废弃用法了
重要: 在面向环境中 不能用带有 head line 的内表
Data: so_carr LIKE RANGE OF carrid.
Loop 内表
Where 条件 从起始点二分查找
标准表 可以部分指定顺序
From 1 to 5
对于一个标准表来说, 加上二分查找 是不是 先排序
先把标准表 排序, 然后再二分
必须先手工排序,再进行二分查找
转自: http://blog.sina.com.cn/s/blog_5cdacb630100ce98.html~type=v5_one&label=rela_nextarticle