ABAP-FIELD_SYMBOLS的使用

  DATABEGIN OF line,
    col1 TYPE i VALUE '1',
    col2 TYPE i VALUE '2',
    col3 TYPE i VALUE '3',
  END OF line.
  DATA comp(5VALUE 'COL3'.
  FIELD-SYMBOLS<f1><f2><f3>.
  ASSIGN line TO <f1>.
  ASSIGN comp TO <f2>.

  "还可以直接使用以下的语法访问其他程序中的变量
*  ASSIGN ('(ZJDEMO)SBOOK-FLDATE') TO <fs>.

  "通过索引动态的访问结构成员
  ASSIGN COMPONENT sy-index OF STRUCTURE <f1> TO <f3>.  "分配整个结构给<f3>
  "如果定义的内表没有组件名时,可以使用索引为0的组件来访问这个无名字段(注:不是1)
*  ASSIGN COMPONENT 0 OF STRUCTURE itab TO  <fs>.

  "通过字段名动态的访问结构成员
  ASSIGN COMPONENT <f2> OF STRUCTURE <f1> TO <f3>.      "分配<f2>值字段给<f3>

  "一般类型
  FIELD-SYMBOLS <fs_field>    TYPE any "任意变量/结构
                  <fs_field_02>  ,
                  <fs_table>    TYPE ANY TABLE "任意表

  "完整类型

  TYPES gty_makt TYPE TABLE OF makt.

  FIELD-SYMBOLS <fs_char> TYPE c,
                  <fs_makt> TYPE makt,
                  "<FS_MAKT01> like line of MAKT,
                  <ft_makt> TYPE gty_makt "makt类型的内表

  DATA gv_char TYPE c LENGTH 13 VALUE '广州'.
  DATA gv_numc TYPE n LENGTH 10 VALUE '123456'.
  DATA gs_makt TYPE makt.

  "分配变量
  ASSIGN gv_char TO <fs_field>.

  WRITE:/  gv_char,
        / <fs_field>.

  ASSIGN gv_numc TO <fs_field>.

  "分配结构体
  SELECT SINGLE *
    
FROM makt
    
INTO CORRESPONDING FIELDS OF gs_makt.
  IF sy-subrc .
    ASSIGN gs_makt TO <fs_field>.
  ELSE.
  ENDIF.
  WRITE/ <fs_field>.

  "分配变量
  ASSIGN gv_char TO <fs_char> .
  WRITE/ <fs_char>.

  "ASSIGN GV_NUMC to <FS_CHAR>.  "类型不匹配

  "分配结构
  ASSIGN gs_makt TO <fs_makt> .
  WRITE/ <fs_makt>-matnr <fs_makt>-maktx .

  "动态指定
  DATAgv_char01 TYPE c LENGTH 10 VALUE 'A',
        gv_char02 TYPE c LENGTH 10 VALUE 'B',
        gv_char03 TYPE c LENGTH 10 VALUE 'C',
        gv_char04 TYPE c LENGTH 10 VALUE 'D',
        gv_char05 TYPE c LENGTH 10 VALUE 'E',
        gv_char06 TYPE c LENGTH 10 VALUE 'F',
        gv_char07 TYPE c LENGTH 10 VALUE 'G',
        gv_char08 TYPE c LENGTH 10 VALUE 'H',
        gv_char09 TYPE c LENGTH 10 VALUE 'I'.

  DATA gv_index TYPE n LENGTH 2.

  DATA gv_fieldname TYPE c LENGTH 30"放置变量的名称

  gv_fieldname 'GV_CHAR' .

  ASSIGN (gv_fieldnameTO <fs_field> "动态指定,用小括号表示变量的值

  WRITE / <fs_field>.

  DO TIMES.
    gv_index sy-index .
    CONCATENATE 'GV_CHAR' gv_index INTO gv_fieldname.
    ASSIGN (gv_fieldnameTO <fs_field> .
    WRITE / gv_index':',<fs_field>.
  ENDDO.

  "结构体GS_MAKT通过FS进行输出
  "ASSIGN GS_MAKT to <FS_FIELD>.
  ASSIGN COMPONENT 'MATNR' OF STRUCTURE gs_makt TO <fs_field>."通过字段名分配
  WRITE / <fs_field>.

  ASSIGN COMPONENT OF STRUCTURE gs_makt TO <fs_field>."通过字段号分配
  WRITE / <fs_field>.

  DO TIMES.
    ASSIGN COMPONENT sy-index OF STRUCTURE gs_makt TO <fs_field>."通过字段号分配
    WRITE :/ sy-index,':',  <fs_field>.
  ENDDO.

  "结构体GS_MAKT字段 动态分配
  gv_fieldname 'MATNR'.
  ASSIGN COMPONENT gv_fieldname OF STRUCTURE gs_makt TO <fs_field>.
  IF <fs_field> IS ASSIGNED.
    WRITE:/ <fs_field>.
  ENDIF.

  "fs_field 一般类型
  "fs_field makt类型
  ASSIGN gs_makt TO <fs_makt> .
  WRITE:/ <fs_makt>-matnr.

  "一般定义的 field symbois 不能够直接使用组件
  "ASSIGN gs_makt to <FS_FIELD> .
  "WRITE:/ <FS_FIELD>-MATNR.

  ASSIGN COMPONENT 'MATNR'OF STRUCTURE <fs_field> TO <fs_field_02>.
  WRITE:/ <fs_field_02>.

  gv_fieldname 'MATNR'.
  ASSIGN COMPONENT gv_fieldname OF STRUCTURE <fs_field> TO <fs_field_02>.
  WRITE:/ <fs_field_02>.

  "强制类型转换
  ASSIGN gv_numc TO <fs_char> CASTING .
  "ASSIGN GV_NUMC TO <FS_FIELD> CASTING TYPE GTY_MAKT.

  TYPESBEGIN OF gty_score,
           name  TYPE c LENGTH 4,
           score TYPE n LENGTH 3,
         END OF gty_score.

  gv_char 'ABCD100'.

  ASSIGN gv_char TO <fs_field_02> CASTING TYPE gty_score .
  DO TIMES.
    ASSIGN COMPONENT sy-index OF STRUCTURE <fs_field_02> TO <fs_field>.
    WRITE:/ <fs_field>.
  ENDDO.

  TYPES :BEGIN OF gty_col,
           col1 TYPE c LENGTH 5,
           col2 TYPE c LENGTH 10,
           col3 TYPE c LENGTH 15,
         END OF gty_col.

  DATA gs_col TYPE gty_col.

  gs_col-col1 'CHINA' .
  gs_col-col2 'BEIJING' .
  gs_col-col3 'GREAT WALL'.

  ASSIGN gs_col TO <fs_field_02> CASTING TYPE gty_col.

  "方法使用行编号分配
  WRITE:'使用行编号分配'.
  DO TIMES.
    ASSIGN COMPONENT sy-index OF STRUCTURE <fs_field_02> TO <fs_field> .
    WRITE:/ <fs_field>.
  ENDDO.

  "方法使用字段名分配
  DATA gv_index01 TYPE n LENGTH 1.

  WRITE:'使用字段名分配'.

  DO TIMES.
    CLEAR :gv_index01,gv_fieldname.
    gv_index01 sy-index .
    CONCATENATE 'COL' gv_index01 INTO gv_fieldname.
    ASSIGN COMPONENT gv_fieldname OF STRUCTURE <fs_field_02> TO <fs_field> .
    WRITE:/ <fs_field>.
  ENDDO.

  "分配-内表
  DATA gt_makt TYPE TABLE OF makt .

  SELECT *
    
FROM makt
    
INTO CORRESPONDING FIELDS OF TABLE gt_makt
      
UP TO 10 ROWS
   WHERE spras sy-langu.
  FIELD-SYMBOLS <fs_wa> TYPE any .

  "向一般类型的字段符号分配
  ASSIGN gt_makt TO <fs_table>.
  "ASSIGN GT_MAKT TO <FS_FIELD>.类型都要参照 any table
  LOOP AT <fs_table> ASSIGNING <fs_field_02>.

  ENDLOOP.

  "向特定类型
  ASSIGN gt_makt TO <ft_makt>.

  "内表的读取
  READ TABLE <ft_makt> ASSIGNING <fs_wa> INDEX 1"使用索引
  IF  sy-subrc 0.
    ASSIGN COMPONENT 'MATNR' OF STRUCTURE <fs_wa> TO <fs_field>.
    WRITE:/ <fs_field>.
  ENDIF.

  READ TABLE <ft_makt> ASSIGNING <fs_wa> WITH KEY mandt '400'"使用索引
  IF  sy-subrc 0.
    ASSIGN COMPONENT 'MANDT' OF STRUCTURE <fs_wa> TO <fs_field>.
    WRITE:/ <fs_field> ,/.
  ENDIF.

  "内表读取 一般类型
  "READ TABLE <FS_TABLE> ASSIGNING <FS_WA> INDEX 1. "any table 不能使用索引
  "READ TABLE <FS_FIELD> ASSIGNING <FS_WA> WITH KEY MANDT = '400'. "any table 不能直接指明某一个字段
  gv_fieldname 'MANDT'.
  READ TABLE <fs_table> ASSIGNING <fs_wa> WITH KEY (gv_fieldname) = '400'"any table 可动态指明某一个字段

  LOOP AT  gt_makt INTO gs_makt.

    IF gs_makt-mandt '400'.
      gs_makt-mandt  'X'.
      MODIFY gt_makt FROM gs_makt.
      CLEARgs_makt.
    ENDIF.

  ENDLOOP.

  "FIELD-SYMBOLS : <FS_MAKT> TYPE MAKT.
  LOOP AT  gt_makt ASSIGNING <fs_makt>.

    IF <fs_makt>-mandt '400'.
      <fs_makt>-mandt  'X'.
      "MODIFY GT_MAKT FROM GS_MAKT. LOOP ASSIGNING,不需要FODIFY
      "CLEAR: GS_MAKT.
    ENDIF.

  ENDLOOP.

  DATAgv_alpha TYPE c VALUE 'A',
        gv_num   TYPE i VALUE 256.
  FIELD-SYMBOLS<f_s> TYPE x ."定义为十六进制字段符号

  DO 26 TIMES.
    ASSIGN gv_alpha TO <f_s> CASTING"强制类型转换
    WRITE:gv_alpha.
    <f_s> <f_s> + gv_num .
  ENDDO.

 

测试结果:

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值