首页 > 其他分享 >SAP ABAP 字符串去除重复字符的两种方法

SAP ABAP 字符串去除重复字符的两种方法

时间:2024-05-31 10:10:34浏览次数:14  
标签:字符 num1 num5 text ABAP 去除 TYPE SAP DATA

ABAP里如何去除字符串内的重复字符,在这提供两种方法。
第一种是直接对字符串多次循环进行排除,但考虑到性能问题要尽量减少循环次数。
第二种是把字符串里字符转成内表一列,去重后拼回一个字符串。

方法一示例代码:

点击查看代码
DATA mark         TYPE c.                           "结束标志
DATA num1         TYPE i VALUE 0  .                 "确认要删除的数量
DATA num2         TYPE i VALUE 0  .                 "确认要保留的数量
DATA num3         TYPE i          .                 "字符的最大位置
DATA num4         TYPE i VALUE 1  .                 "检查的位置
DATA num5         TYPE i.                           "DO循环次数/确认保留字符交换的位置
DATA string1      TYPE c.                           "中间字符
DATA text(32)     TYPE c VALUE 'ABACDBADA'.         "必须用c不可以用string



*确认长度
num3 = cl_abap_list_utilities=>dynamic_output_length( text ) - 1.

WHILE mark <> 'X'.

*为需要比较的字符赋值
  string1 = text+num1(1).

*num5是一个与确认DO循环次数共用的变量,这里是把确认要保留的字符与最后一位非需保留字符做位置交换
  num5 = num3 - num2.
  text+num1(1) = text+num5(1).
  text+num5(1) = string1.

*保留的数量+1
  num2 += 1.

*DO循环里,开始检查的起点。从最后一位已确认删除的字符后一位开始
  num4 =  num1.

*DO循环的次数为字符串总个数-已确认需要保留的个数-已确认需要删除的个数,这样可以确保循环到已确认保留的字符前一位即停止
  num5 = num3 + 1 - num2 - num1.

  DO num5 TIMES.
    "检查到相同的字符,即与第一位非需保留字符做位置交换
    IF text+num4(1) = string1.
      text+num4(1) = text+num1(1).
      text+num1(1) = string1.
      "检查到相同即确认删除数量+1
      num1 += 1.
    ENDIF.
    "检查位置向右一位
    num4 += 1.
  ENDDO.

*结束的标志是需要删除数量+保留数量=总数量
  IF num1 + num2 = num3 + 1.
    mark = 'X'.
*截断只能用LEFT,不能用RIGHT。原因请自己尝试!
    SHIFT text BY num1 PLACES LEFT.
  ENDIF.

ENDWHILE.

WRITE / text.

效果展示:

方法二示例代码:

点击查看代码
DATA txt        TYPE string.
DATA num6(5)    TYPE c VALUE 0.
DATA lt_text    TYPE TABLE OF string .
DATA text1      TYPE string VALUE 'ABACDBADA'.

*把字符拆成一列
DO cl_abap_list_utilities=>dynamic_output_length( text1 ) TIMES.
  APPEND text1+num6(1) TO lt_text.
  num6 += 1.
ENDDO.

*排序去重
SORT lt_text.
DELETE ADJACENT DUPLICATES FROM lt_text COMPARING ALL FIELDS.

*拼回去
LOOP AT lt_text INTO DATA(ls_text).

  txt = |{ txt }{ ls_text }|.

ENDLOOP.


WRITE / txt.

效果展示:

标签:字符,num1,num5,text,ABAP,去除,TYPE,SAP,DATA
From: https://www.cnblogs.com/SAPMXB/p/18223953

相关文章

  • SpringBoot直连SAP,IJ IDEA开发与Windows,linux部署
    一、sapjco引入1.1、sapjco介绍sapjco3.jar,连接SAP所需的jar包,linux与windows系统通用libsapjco3.so,linux系统下连接sap所需的动态链接库sapjeco3.dll,windows系统下连接sap所需的动态链接库我使用的版本为sapjco3.0.10<dependency><groupId>com.sap</groupId> <artif......
  • java版微信公众号开发(八)获取jsapi_ticket,生产JS-SDK签名
    jsapi_ticket是公众号用于调用微信JS接口的临时票据。只用正确的签名才能使用JS调用微信接口,小编在这里整理一个一套完整的获取方法。废话不多说,直接上干货。//importjava.security.MessageDigest;/***获取位置信息签名*@AuthorFM_南风*@Date2024......
  • SAP:观察I_CALLBACK_USER_COMMAND 参数(按钮点击事件)
    1、从函数级SLVC_FULLSCREEN里复制 一个在”GUI状态“ 下的“STANDARD_FULLSCREEN”标准全屏幕到 程序Z16_04里。 标准工具添加 定义按钮(关闭、保存)主程序代码:*&---------------------------------------------------------------------**&ReportZ16_04*&利用......
  • ASAP7nm PDK介绍
    ASAP7nmPDK介绍概述最近在调研后面教学用的PDK,考虑到需要给学生发的PDK尽量绕开版权问题,因此FoundryPDK是不敢用的,大概把Synopsys家的SAED28_32nm,Cadence家的GPDK45nm,以及几个开源PDK都大概看了一下,目前倾向于用ASAP7nm这个PDK。来说一下主要的分析和考量,首先C家和S家给的PDK......
  • 4 SAP前台操作手册-MM模块-采购管理-采购申请创建、修改、显示-ME51N ME52N ME53N
    0总体说明SAP实施项目中,到了第3个阶段-系统实现,在这个阶段,因为蓝图汇报已经结束,配置也差不多完成了,自开发还在进行中,SAP标准功能下,可以进行基础业务的前台操作了,在实现阶段的尾端,客户指定的关键用户(俗称KU-KeyUser)会进行前台业务操作和练习,提高熟练程度,同时需要在外部SAP顾......
  • 2 SAP前台操作手册-MM模块-采购管理-(标准/委外/寄售)采购信息记录创建、修改、显示、
    0总体说明SAP实施项目中,到了第3个阶段-系统实现,在这个阶段,因为蓝图汇报已经结束,配置也差不多完成了,自开发还在进行中,SAP标准功能下,可以进行基础业务的前台操作了,在实现阶段的尾端,客户指定的关键用户(俗称KU-KeyUser)会进行前台业务操作和练习,提高熟练程度,同时需要在外部SAP顾......
  • SAP:REUSE_ALV_LIST_DISPLAY 函数实现此类型ALV
    *&Report-1类型程序的主要功能是通过WRITE语句为用户提供方便的报表数据.*&与此功能类似的就是利用FUNCTIONALV创建的报表。利用*&REUSE_ALV_LIST_DISPLAY函数实现此类型ALV。*&---------------------------------------------------------------------**&Report......
  • SAP: REUSE_ALV_GRID_DISPLAY 函数实现此类型ALV
     *&Report-1类型程序的主要功能是通过WRITE语句为用户提供方便的报表数据.*&与此功能类似的就是利用FUNCTIONALV创建的报表。利用*&REUSE_ALV_GRID_DISPLAY函数实现此类型ALV。*----------------------------------------------------------------------**&-----......
  • SAP: ALV GRID 控制之 单元格按钮
    工作区域(或内部表)“GT_SFLIGHT”不是扁平的,或者包含参考或内部表作为组件。Isnotflat,orcontainsReferenceorinternaltablesascomponentsorinternaltablesascomponents.Ascomponents.解决方式:将SELECT*FROMSFLIGHTINTOTABLEgt_sflightUPTO......
  • 图片如何去水印?ps去除图片上的水印应该怎么操作?教会你!
    图片去水印是一个常见的需求,尤其在使用他人图片时,为避免版权问题,去除水印是很有必要的。Photoshop(PS)作为一款专业的图片处理软件,提供了多种去除水印的方法。以下是使用PS去除图片水印的几种详细步骤:方法一:使用内容识别填充步骤1:打开Photoshop软件,并导入需要去水印的图片。......