• [重点]delphi删除部分字符串(不区分大小写)


    type
    TDelFlags = set of (dfDelBefore, dfDelAfter);

    //删除ms字符串中endstr子字符串前面或后面的部分字符串

    procedure Delstr(var ms: String; endstr: String; Flags: TDelFlags;
    bself: Boolean = True);
    var
    l: Integer;
    begin
    l := length(endstr);
    if pos(AnsiLowercase(endstr), AnsiLowercase(ms))=0 then
    begin
    exit;
    end;

    if dfDelBefore in Flags then
    begin
    if bself then
    Delete(ms, 1, pos(AnsiLowercase(endstr), AnsiLowercase(ms)) + l - 1)
    else
    Delete(ms, 1, pos(AnsiLowercase(endstr), AnsiLowercase(ms)) - 1)
    end
    else
    begin
    if bself then
    Delete(ms, pos(AnsiLowercase(endstr), AnsiLowercase(ms)), length(ms))
    else
    Delete(ms, pos(AnsiLowercase(endstr), AnsiLowercase(ms)) + l, length(ms))
    end;
    end;

    //从src主字符串中截取两个字符串(str1和str2)之间的部分字符串

    function GetCenterStr(src, str1, str2: string): string;

    var
    i, i2, i3: integer;
    begin
    i := 0;
    i2 := 0;
    i3 := 0;
    Delstr(src, str1, [dfDelBefore]);
    i := pos(AnsiLowercase(str1), AnsiLowercase(src));
    i3 := pos(AnsiLowercase(str2), AnsiLowercase(src));
    result := copy(src, i2 + 1, i3 - i2 - 1);
    end;

     /////////////////////// Delstr函数的升级版如下 ////////////////////////////

    function fastStrCopy(S:string;Index:integer;count:integer):string;
    var
    sLen: Integer;
    begin
    //此函数类似copy函数,但在拷贝大量字符串时比较copy函数的效率高很多。
    Result:=S;
    {
    拷贝全部字符串
    SetLength(Result,length(S));
    MoveMemory(@Result[1],@S[1],bytelength(S));
    }

    //拷贝部分字符串
    sLen:=0;
    sLen:=length(S);
    if(sLen<Index+count) then count:=sLen-Index+1;
    SetLength(Result,count);
    MoveMemory(@Result[1],@S[Index],count*sizeof(widechar));

    end;

    function FastStrCopy2(S: String; Index: Integer; Count: Integer): String;
    var
    p: PChar;
    buf: LPCWSTR;
    begin
    p := PChar(S);
    getMem(buf, bytelength(s));
    try
    inc(p, Index - 1);

    //lstrcpyn 复制字符串, 同时指定要复制的长度
    lstrcpyn(buf, p, Count + 1);
    Result := String(buf);
    finally
    freemem(buf);
    end;
    end;


    type
    TDelFlags = set of (dfDelBefore, dfDelAfter);


    function Delstr(var ms: String; endstr: String; Flags: TDelFlags;
    bself: Boolean = True): String;
    var
    l: Integer;
    begin
    l := length(endstr);
    if dfDelBefore in Flags then
    begin
    if bself then
    begin
    Result := fastStrCopy(ms, 1, pos(endstr, ms) + l - 1);
    Delete(ms, 1, pos(endstr, ms) + l - 1);
    end
    else
    begin
    Result := fastStrCopy(ms, 1, pos(endstr, ms) - 1);
    Delete(ms, 1, pos(endstr, ms) - 1);
    end;
    end
    else
    begin
    if bself then
    begin
    Result := fastStrCopy(ms, pos(endstr, ms), length(ms));
    Delete(ms, pos(endstr, ms), length(ms));
    end
    else
    begin
    Result := fastStrCopy(ms, pos(endstr, ms) + l, length(ms));
    Delete(ms, pos(endstr, ms) + l, length(ms));
    end;
    end;
    end;

  • 相关阅读:
    vue echarts 遇到的bug之一 无法渲染的问题
    前端SSR方案调研
    【读书笔记】数据结构与算法js描述-链表实现
    【转发】数组,字符串常用方法
    【转】README.md 语法汇总
    webpack 配置遇到的坑
    原生audio 实现音频播放器功能
    活动抽奖组件设计
    理解vue-loader
    kpi sql 积累
  • 原文地址:https://www.cnblogs.com/yzryc/p/delstring.html
Copyright © 2020-2023  润新知