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;

[重点]delphi删除部分字符串(不区分大小写)的更多相关文章

  1. Delphi中常用字符串处理函数

    .copy(str,pos,num) 从str字符串的pos处开始,截取num个字符的串返回. 假设str为,)=,)='def' .concat(str1,str2{,strn}) 把各自变量连接起 ...

  2. Delphi反汇编内部字符串处理函数/过程不完全列表

    Delphi反汇编内部字符串处理函数/过程不完全列表 名称 参数 返回值 作用 等价形式 / 备注   _PStrCat EAX :目标字符串 EDX :源字符串 EAX 连接两个 Pascal 字符 ...

  3. Delphi反汇编内部字符串处理函数不完全列表

    Delphi反汇编内部字符串处理函数/过程不完全列表 名称 参数 返回值 作用 等价形式 / 备注 _PStrCat EAX :目标字符串 EDX :源字符串 EAX 连接两个 Pascal 字符串 ...

  4. C#中如何排除/过滤/清空/删除掉字符串数组中的空字符串

    C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...

  5. String的两个API,判断指定字符串是否包含另一字符串,在字符串中删除指定字符串。

    // 在字符串中删除指定字符串. String phoneNum="1795112345"; phoneNum = phoneNum.replace("17951&quo ...

  6. C语言strcmp()函数:比较字符串(区分大小写)

    头文件:#include <string.h> strcmp() 用来比较字符串(区分大小写),其原型为: int strcmp(const char *s1, const char *s ...

  7. 关于Delphi中的字符串的浅析(瓢虫大作,里面有内存错误的举例)

    关于Delphi中的字符串的浅析 只是浅浅的解析下,让大家可以快速的理解字符串. 其中的所有代码均在Delphi7下测试通过. Delphi 4,5,6,7中有字符串类型包括了: 短字符串(Short ...

  8. 使用C#删除一个字符串数组中的空字符串

    C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...

  9. delphi XE的字符串处理

    最近用delphi xe做了个东西,因为以前一直使用Delphi 7做开发,delphi 7 到delphi XE有了很大的变化,最大的变化就是对Unicode的支持,所以刚开始使用DELPHI XE ...

随机推荐

  1. 代码整洁之道Clean Code 读后感After Reading

    1.有意义的命名 名副其实,避免误导 做有意义的区分,简单明了2.函数 短小,职责单一 别重复自己3.注释 用代码来阐述 可怕的废话4.格式 垂直格式,垂直距离,空范围 横向格式,水平对齐,缩进5.错 ...

  2. int main(int argc,char* argv[])浅析

    int main(int argc,char* argv[])浅析 argc : 指输入参数个数,默认值1,就是执行程序名称 argv[] : 输入参数数组指针 举个栗子: 1. 编写一个argc.c ...

  3. CRM 权限内可查看的记录数

    CREATE FUNCTION dbo.fn_GetFilteredIdsSqlString ( ) , ) , ) ) RETURNS NVARCHAR(max) AS BEGIN ) SET @s ...

  4. Html5——视频标签使用

    video标签: 上面的例子使用一个 Ogg 文件,适用于Firefox.Opera 以及 Chrome 浏览器.要确保适用于 Safari 浏览器,视频文件必须是 MPEG4 类型.video 元素 ...

  5. spring boot区分生产环境和开发环境

    回顾一下spring boot使用基础,做个笔记. 通过配置文件,设置项目的开发环境和生成环境. 项目目录结构: application-dev.yml是开发环境配置文件,application-pr ...

  6. c# 中实用包,实用dll。

    Aspose.cell:用与操作Excel,生成,导入导出等. ICSharpCode.SharpZipLib.dll:用户压缩及解压ZIP包,根据需要也可以加密.

  7. 【Jmeter自学】Jmeter性能测试报告(八)

    http://www.cnblogs.com/YatHo/p/6092599.htmlhttp://blog.csdn.net/xiaojianpitt/article/details/4821554 ...

  8. java BASE64流 输出图片。

    亲测3个请求都可用,没有测试性能问题.仅供参考 BASE64Decoder Eclipsse 类可能引用不了解决方案链接:http://blog.csdn.net/JBxiaozi/article/d ...

  9. 33.纯 CSS 创作牛奶文字变换效果

    原文地址:https://segmentfault.com/a/1190000015037234 感想:transform: translateY(50% & -50%);  animatio ...

  10. import的使用

    iimport函数用来调用python自带的.py文件或者用户自己编写的.py文件 调用方式很简单 1 import time 2 import lib import time 调用python自带的 ...