【AT NEW/LAST/END/FIRST的用法】

1. AT FIRST

描述:用于在第一次循环时执行的逻辑。

示例

LOOP AT lt_data INTO ls_data.  "处理逻辑  
AT FIRST.    
WRITE: / 'First record reached.'.  
ENDAT.
ENDLOOP.

说明
在上述示例中,"AT FIRST"会在循环开始时触发,并执行其下的逻辑。在本例中,它输出一条消息表示已达到第一条记录。


2. AT LAST

描述:用于在循环的最后一轮执行的逻辑。

示例

LOOP AT lt_data INTO ls_data.  "处理逻辑  
AT LAST.    
WRITE: / 'Last record reached.'.  
ENDAT.
ENDLOOP.

说明
在上述示例中,"AT LAST"会在循环结束前的最后一个记录处触发,并执行其下的逻辑。在本例中,它输出一条消息表示已达到最后一条记录。


3. AT NEW [field]

描述:用于在循环中识别指定字段field及之前的字段组合是新组时执行该逻辑。

示例

LOOP AT lt_data INTO ls_data.  
AT NEW field1.    
WRITE: / 'Group:', ls_data-field1.    
WRITE: / '-------------'.  
ENDAT.
"其他处理逻辑
ENDLOOP.

说明
在上述示例中,当字段field1和该字段前面的字段的值发生变化时,AT NEW field1会被触发,并执行其下的逻辑。在本例中,它输出一个新组的标题。


4. AT END OF [field]

描述:用于在循环中识别指定字段field及之前的字段组合是与下一行不同时,执行的逻辑,也就是组的最后一行执行的逻辑。

示例

LOOP AT lt_data INTO ls_data.  
"处理逻辑  
AT END OF field1.    
WRITE: / 'End of loop.'.  
ENDAT.
ENDLOOP.

说明
在上述示例中,AT END OF field1会在循环到当前组的最后一行时触发,并执行其下的逻辑。在本例中,它输出一条消息表示循环结束。


4. 示例

REPORT ztest_at_usage.

TYPE-POOLS: abap.

DATA: BEGIN OF it_data OCCURS 0,
        col1 TYPE c,
        col2 TYPE c,
        col3 TYPE c,
      END OF it_data.

DEFINE fill_data.
  it_data-col1 = '&1'.
  it_data-col2 = '&2'.
  it_data-col3 = '&3'.
  APPEND it_data.
  CLEAR it_data.
END-OF-DEFINITION.

fill_data:
          a a a,
          a a a,
          a b a,
          a a b,
          a b b,
          a b c,
          a b f,
          a b c,
          a c c,
          a c d,
          a d d,
          a d g.

SORT it_data BY col1 ASCENDING
                col2 ASCENDING.

LOOP AT it_data.

  AT NEW col2.
    WRITE:/ 'AT NEW col2',
    it_data-col1,
    it_data-col2,
    it_data-col3.
  ENDAT.

*  其他逻辑
  WRITE:  /1(8)'遍历到第',9(1) sy-tabix,'行',
  it_data-col1,
  it_data-col2,
  it_data-col3.

  AT END OF col2.
    WRITE:/ 'AT END col2',
    it_data-col1,
     it_data-col2,
     it_data-col3.
    WRITE:/.
  ENDAT.

ENDLOOP.

总体说明

这些控制语句可以与循环语句(如LOOP AT、DO…ENDDO等)结合使用,以便根据特定的条件或循环位置执行相应的逻辑。它们对于处理分组、边界情况和循环的特殊需求非常有用。

std::_Deque_iterator<esw::SingleProcessedData, esw::SingleProcessedData&, esw::SingleProcessedData*>::_M_set_node ( __new_node=<optimized out>, this=<optimized out>) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/stl_deque.h:257 #1 std::_Deque_iterator<esw::SingleProcessedData, esw::SingleProcessedData&, esw::SingleProcessedData*>::operator+= (__n=10, this=<synthetic pointer>) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/stl_deque.h:219 #2 std::_Deque_iterator<esw::SingleProcessedData, esw::SingleProcessedData&, esw::SingleProcessedData*>::operator+ (__n=10, this=0xffff9002c620) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/stl_deque.h:230 #3 std::deque<esw::SingleProcessedData, std::allocator<esw::SingleProcessedData> >::_M_reserve_elements_at_back (__n=10, this=0x0) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/stl_deque.h:2129 #4 std::deque<esw::SingleProcessedData, std::allocator<esw::SingleProcessedData> >::_M_range_insert_aux<esw::SingleProcessedData*> ( __last=0xffff9d7eb3c0, __first=0xffff9d7eaf10, __pos=..., this=0x0) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/deque.tcc:608 #5 std::deque<esw::SingleProcessedData, std::allocator<esw::SingleProcessedData> >::_M_insert_dispatch<esw::SingleProcessedData*> ( __last=0xffff9d7eb3c0, __first=0xffff9d7eaf10, __pos=..., this=0x0) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/stl_deque.h:2011 #6 std::deque<esw::SingleProcessedData, std::allocator<esw::SingleProcessedData> >::insert<esw::SingleProcessedData*, void> ( __last=0xffff9d7eb3c0, __first=0xffff9d7eaf10, __position=..., this=0x0) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/stl_deque.h:1739 #7 esw::MagTracking::SolveDoubleSensors (this=0xffff9002ae50, vecRawData=..., trackingResult=...) at /mnt/v1/wenzhao.huang/Emts-alg/BoardSoftware/Algorithm/src/emts_alg_mag_tracking.cpp:325 #8 0x0000000000436934 in esw::TerminalController::GetTrackingResult (this=this@entry=0xffff90014778, singleDataVec=..., singleUnit=false, exception=@0xffff9001bd9a: 0, location=...) at /mnt/v1/wenzhao.huang/Emts-alg/BoardSoftware/Feature/src/emts_feature_terminal_controller.cpp:198 #9 0x0000000000434d2c in esw::TrackingManager::Run (this=0xffff90013bf0) at /mnt/v1/wenzhao.huang/Emts-alg/BoardSoftware/Feature/src/emts_feature_tracking_manager.cpp:192 #10 0x0000ffffb065bf9c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6 #11 0x0000ffffb0793624 in start_thread (arg=0xffffb065bf80) at pthread_create.c:477 #12 0x0000ffffb03d062c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78 分析奔溃原因
08-26
#0 __memcpy_generic () at ../sysdeps/aarch64/multiarch/../memcpy.S:163 #1 0x00000000004a0efc in std::_Construct<esw::SingleProcessedData, esw::SingleProcessedData&> (__p=<optimized out>) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/stl_construct.h:75 #2 std::__uninitialized_copy<false>::__uninit_copy<esw::SingleProcessedData*, esw::SingleProcessedData*> (__result=<optimized out>, __last=<optimized out>, __first=0xffff637f0600) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/stl_uninitialized.h:83 #3 std::uninitialized_copy<esw::SingleProcessedData*, esw::SingleProcessedData*> (__result=<optimized out>, __last=<optimized out>, __first=<optimized out>) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/stl_uninitialized.h:134 #4 std::__uninitialized_copy_a<esw::SingleProcessedData*, esw::SingleProcessedData*, esw::SingleProcessedData> (__result=0x3ff09ee2435696e6, __last=0xffff637f0ab0, __first=0xffff637f0600) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/stl_uninitialized.h:289 #5 std::vector<esw::SingleProcessedData, std::allocator<esw::SingleProcessedData> >::_M_range_insert<esw::SingleProcessedData*> ( this=this@entry=0xffff5c02c530, __position=<error reading variable: Cannot access memory at address 0xbfb6ea48ec621fc7>, __first=__first@entry=0xffff637f0600, __last=0xffff637f0ab0, __last@entry=0xffff637f0af0) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/vector.tcc:657 #6 0x000000000049f45c in std::vector<esw::SingleProcessedData, std::allocator<esw::SingleProcessedData> >::_M_insert_dispatch<esw::SingleProcessedData*> (__last=<optimized out>, __first=0xffff637f0640, __pos=..., this=0xffff5c02c530) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/stl_vector.h:1406 #7 std::vector<esw::SingleProcessedData, std::allocator<esw::SingleProcessedData> >::insert<esw::SingleProcessedData*, void> ( __last=<optimized out>, __first=0xffff637f0640, __position=..., this=0xffff5c02c530) at /usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.3.1/bits/stl_vector.h:1132 #8 esw::MagTracking::SolveSingleSensor (this=0xffff5c02adb0, vecRawData=..., trackingResult=...) at /mnt/v1/wenzhao.huang/Emts-alg/BoardSoftware/Algorithm/src/emts_alg_mag_tracking.cpp:235 #9 0x0000000000436ac4 in esw::TerminalController::GetTrackingResult (this=this@entry=0xffff5c014778, singleDataVec=..., singleUnit=<optimized out>, exception=@0xffff5c01bd9a: 0, location=...) at /mnt/v1/wenzhao.huang/Emts-alg/BoardSoftware/Feature/src/emts_feature_terminal_controller.cpp:194 #10 0x0000000000434d2c in esw::TrackingManager::Run (this=0xffff5c013bf0) at /mnt/v1/wenzhao.huang/Emts-alg/BoardSoftware/Feature/src/emts_feature_tracking_manager.cpp:192 #11 0x0000ffff8707af9c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6 #12 0x0000ffff871b2624 in start_thread (arg=0xffff8707af80) at pthread_create.c:477 #13 0x0000ffff86def62c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78
最新发布
08-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP庖丁解码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值