楼主: yexin168

内表中的处理问题

[复制链接]
论坛徽章:
8
授权会员
日期:2008-02-29 14:46:02生肖徽章2007版:猪
日期:2008-03-13 16:46:59奥运会纪念徽章:沙滩排球
日期:2008-08-28 17:37:39生肖徽章2007版:龙
日期:2009-04-16 20:53:16生肖徽章2007版:鼠
日期:2009-05-25 14:45:552011新春纪念徽章
日期:2011-02-18 11:42:472010广州亚运会纪念徽章:马术
日期:2011-03-30 09:25:572013年新春福章
日期:2013-02-25 14:51:24
11#
发表于 2009-5-18 15:10 | 只看该作者
见怪不怪了,现在做abap的有几个是计算机?是计算机的,有几个认真学过算法、数据结构等计算机课程。有学过这些课程有几个会写一些简单的排序、遍历?

使用道具 举报

回复
论坛徽章:
104
ITPUB元老
日期:2008-04-28 13:28:53ITPUB牛人
日期:2010-10-27 17:11:51授权会员
日期:2008-02-27 08:11:19ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51BLOG每日发帖之星
日期:2010-01-09 01:01:022010世博会纪念徽章
日期:2010-08-23 01:38:37世界杯纪念徽章
日期:2010-07-12 13:08:002010广州亚运会纪念徽章:自行车
日期:2011-11-10 08:12:25NBA季后赛之星
日期:2010-06-21 13:24:43八级虎吧徽章
日期:2008-12-26 10:00:53
12#
发表于 2009-5-18 16:48 | 只看该作者
原帖由 fengleihen 于 2009-5-18 15:10 发表
见怪不怪了,现在做abap的有几个是计算机?是计算机的,有几个认真学过算法、数据结构等计算机课程。有学过这些课程有几个会写一些简单的排序、遍历?


使用道具 举报

回复
论坛徽章:
5
祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:20:05暖羊羊
日期:2015-03-04 14:50:372015年新春福章
日期:2015-03-06 11:57:31
13#
 楼主| 发表于 2009-5-20 13:55 | 只看该作者

回复 #8 fengleihen 的帖子

你说的对,是在处理这个问题... 我觉得放在一起处理起来好处理...就是写出来的时候执行比较慢, ABAP 的限制太多了..

使用道具 举报

回复
论坛徽章:
5
祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:20:05暖羊羊
日期:2015-03-04 14:50:372015年新春福章
日期:2015-03-06 11:57:31
14#
 楼主| 发表于 2009-5-20 14:04 | 只看该作者
原帖由 fengleihen 于 2009-5-18 15:10 发表
见怪不怪了,现在做abap的有几个是计算机?是计算机的,有几个认真学过算法、数据结构等计算机课程。有学过这些课程有几个会写一些简单的排序、遍历?


请问下,我这样问个问题,应该没有必要针对这些无聊的争论上来吧。。 解决问题才是最重要的,如果要讨论这些问题,还不如去教育论坛去讨论吧..
我只是个abap 初学者,每种语言都有不同的处理方式,有必要来争论这些吗?
  这个问题归结到最后还是说 如何进行内表的处理... 其实根本不是什么算法问题。如果各位有更好的处理方式,也请麻烦提供下代码参考下。。

使用道具 举报

回复
论坛徽章:
8
授权会员
日期:2008-02-29 14:46:02生肖徽章2007版:猪
日期:2008-03-13 16:46:59奥运会纪念徽章:沙滩排球
日期:2008-08-28 17:37:39生肖徽章2007版:龙
日期:2009-04-16 20:53:16生肖徽章2007版:鼠
日期:2009-05-25 14:45:552011新春纪念徽章
日期:2011-02-18 11:42:472010广州亚运会纪念徽章:马术
日期:2011-03-30 09:25:572013年新春福章
日期:2013-02-25 14:51:24
15#
发表于 2009-5-20 15:15 | 只看该作者
定义个内部表 key1
key1里面放 A B C这三个类似的东东
loop key1
排序 itab 关键字 和日期 升序排列
  loop itab where 日期 >= 200903 and 关键字 = key1-关键字
    exit
  endloop
  if sy-subrc <> 0.
    排序 itab 关键字 和日期 降序排列
     loop itab where 日期<200903 and 关键字 = key1-关键字
        exit
     endloop.
     if sy-subrc = 0.
       工作区内容为对象数据
     endif.
  else
     工作区内容为对象数据
  endif.
endloop

使用道具 举报

回复
论坛徽章:
5
祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:20:05暖羊羊
日期:2015-03-04 14:50:372015年新春福章
日期:2015-03-06 11:57:31
16#
 楼主| 发表于 2009-5-21 08:41 | 只看该作者
感谢fengleihen  大力支持...   让我这个abap初学者 受益匪浅.  谢谢~

使用道具 举报

回复
论坛徽章:
11
2009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB元老
日期:2009-04-11 21:27:42生肖徽章2007版:牛
日期:2009-06-08 00:31:34
17#
发表于 2009-5-21 10:07 | 只看该作者
原帖由 fengleihen 于 2009-5-20 15:15 发表
定义个内部表 key1
key1里面放 A B C这三个类似的东东
loop key1
排序 itab 关键字 和日期 升序排列
  loop itab where 日期 >= 200903 and 关键字 = key1-关键字
    exit
  endloop
  if sy-subrc  0.
    排序 itab 关键字 和日期 降序排列
     loop itab where 日期<200903 and 关键字 = key1-关键字
        exit
     endloop.
     if sy-subrc = 0.
       工作区内容为对象数据
     endif.
  else
     工作区内容为对象数据
  endif.
endloop


就做一次loop搞定的事儿,让你们搞的那么麻烦,唉。
程序 = 算法 + 数据结构

data itab type table of xxx.
data last_value like line of itab.
data found.

sort itab by key date.
loop itab.
  at new key.
    clear found.
    clear last_value.
  end at.

  if found is initial.
    if itab-date = 200903.
      itab is your need
      found = 'X'.
    elseif itab-date > 200903.
      itab is your need
      found = 'X'.
    else.
      last_value = itab.
    endif.
  endif.

  at end of key.
    if found is initial.
      last_value is your need
    endif.
  end at.
endloop.

[ 本帖最后由 awarecan 于 2009-5-21 10:08 编辑 ]

使用道具 举报

回复
论坛徽章:
11
2009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB元老
日期:2009-04-11 21:27:42生肖徽章2007版:牛
日期:2009-06-08 00:31:34
18#
发表于 2009-5-21 10:14 | 只看该作者
可能连last_value都不用声明,在at end of key里直接用itab也行。

data itab type table of xxx.
data found.

sort itab by key date.
loop itab.
  at new key.
    clear found.
  end at.

  if found is initial.
    if itab-date >= 200903.
      itab is your need
      found = 'X'.
    endif.
  endif.

  at end of key.
    if found is initial.
      itab is your need
    endif.
  end at.
endloop.

[ 本帖最后由 awarecan 于 2009-5-21 10:15 编辑 ]

使用道具 举报

回复
论坛徽章:
121
紫蛋头
日期:2013-07-02 19:27:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:112014年世界杯参赛球队: 波黑
日期:2014-06-07 00:05:53喜羊羊
日期:2015-03-04 14:49:392015年新春福章
日期:2015-03-06 11:57:31
19#
发表于 2009-5-21 11:50 | 只看该作者
原帖由 awarecan 于 2009-5-21 10:14 发表
可能连last_value都不用声明,在at end of key里直接用itab也行。

data itab type table of xxx.
data found.

sort itab by key date.
loop itab.
  at new key.
    clear found.
  end at.

  if found is initial.
    if itab-date >= 200903.
      itab is your need
      found = 'X'.
    endif.
  endif.

  at end of key.
    if found is initial.
      itab is your need
    endif.
  end at.
endloop.

“程序 = 算法 + 数据结构”
上面这个算法非常好,我觉得这是实现楼主需求的最佳算法。另外我想补充几点数据结构或者说是ABAP语法的看法:
1. loop itab 在ABAP中的语句是loop at itab.
2. end at 在ABAP中是一个关键字endat.
3. at new f. at end of f. 要考虑f前面的字段。比如内表的字段是f1,f2,...fn. 如果使用at new f2这样的语句,结果会被f1影响。详细情况请debug。
4. at end of f.语句执行后,f后面的字段值会丢失(变成*)。
因此,要用楼上的算法写一个完整的程序实现楼主的需求,可能需要解决上面的几个问题。

使用道具 举报

回复
论坛徽章:
8
授权会员
日期:2008-02-29 14:46:02生肖徽章2007版:猪
日期:2008-03-13 16:46:59奥运会纪念徽章:沙滩排球
日期:2008-08-28 17:37:39生肖徽章2007版:龙
日期:2009-04-16 20:53:16生肖徽章2007版:鼠
日期:2009-05-25 14:45:552011新春纪念徽章
日期:2011-02-18 11:42:472010广州亚运会纪念徽章:马术
日期:2011-03-30 09:25:572013年新春福章
日期:2013-02-25 14:51:24
20#
发表于 2009-5-21 12:02 | 只看该作者
不错不错,

[ 本帖最后由 fengleihen 于 2009-5-21 12:03 编辑 ]

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表