首页 > 其他分享 >delphi截取字符串心得

delphi截取字符串心得

时间:2023-09-12 14:57:13浏览次数:32  
标签:Src string delphi SubStr Length Result 字符串 心得 截取

在Delphi的日常开发中,确实经常需要截取字符串来满足不同的需求。Delphi自身提供了一些字符串处理函数,但有时候这些函数可能不够用或者使用起来不够方便。下面我将分享一个自己在Delphi开发中用于截取字符串的进一步封装的函数。

 

/////////////////////////////////////
//提取字符串中指定子字符串前的字符串
function Before(Src, S: string): string;
var
  F: Integer;
begin
  F := Pos(Src, S);
  if F = 0 then
    Before := S
  else
    Before := Copy(S, 1, F - 1);
end;
//////////////////////////////////
//提取字符串中指定子字符串后的字符串

function After(Src, S: string): string;
var
  F: Integer;
begin
  F := Pos(Src, S);
  if F = 0 then
    After := ''
  else
    After := Copy(S, F + Length(Src), Length(S));
end;

function ReversePos(SubStr, S: string): Integer;
var
  i: Integer;
begin
  i := Pos(ReverseString(SubStr), ReverseString(S));
  if i > 0 then
    i := Length(S) - i - Length(SubStr) + 2;
  Result := i;
end;
// 从头取到最后包含的代码
function afterlast(SubStr, S: string): string;
var
  i: Integer;
begin
  i := Pos(ReverseString(SubStr), ReverseString(S));
  if i > 0 then
  begin
    i := Length(S) - i - Length(SubStr) + 2;
 // Result := i;

    Result := Copy(S, i + Length(SubStr), Length(S));
  end
  else
    Result := S;

end;
//这是一个函数定义,名为Before,功能是提取在指定子字符串之前的字符串
//Src是源字符串,S是需要寻找的子字符串
function Before(Src, S: string): string;
var
  //定义一个整型变量F,用于存储子字符串在源字符串中的位置
  F: Integer;
begin
  //使用Pos函数查找子字符串S在源字符串Src中的位置,并将结果赋值给F
  F := Pos(Src, S);
  //如果F等于0,说明源字符串中没有找到子字符串,那么返回的结果就是子字符串S本身
  if F = 0 then
    Before := S
  //如果F不等于0,说明源字符串中找到了子字符串,那么就返回从字符串开始到子字符串位置F-1的这部分字符串
  else
    Before := Copy(S, 1, F - 1);
end;

//这是一个函数定义,名为After,功能是提取在指定子字符串之后的字符串
//Src是源字符串,S是需要寻找的子字符串
function After(Src, S: string): string;
var
  //定义一个整型变量F,用于存储子字符串在源字符串中的位置
  F: Integer;
begin
  //使用Pos函数查找子字符串S在源字符串Src中的位置,并将结果赋值给F
  F := Pos(Src, S);
  //如果F等于0,说明源字符串中没有找到子字符串,那么返回的结果就是空字符串
  if F = 0 then
    After := ''
  //如果F不等于0,说明源字符串中找到了子字符串,那么就返回从子字符串位置F之后的这部分字符串
  else
    After := Copy(S, F + Length(Src), Length(S));
end;

//定义一个函数名为ReversePos,功能是找到子字符串在源字符串中的最后一个出现位置的索引
//SubStr是目标子字符串,S是源字符串
function ReversePos(SubStr, S: string): Integer;
var
  //定义一个整型变量i,用于存储子字符串在源字符串中的位置
  i: Integer;
begin
  //使用Pos函数查找反转后的子字符串在反转后的源字符串中的位置,并将结果赋值给i
  i := Pos(ReverseString(SubStr), ReverseString(S));
  //如果i大于0,说明在反转后的源字符串中找到了反转后的子字符串,那么将i转换成正数,否则保持为0
  if i > 0 then
    i := Length(S) - i - Length(SubStr) + 2;
  //将结果返回
  Result := i;
end;

//定义一个函数名为afterlast,功能是提取在指定子字符串最后一次出现之后的字符串
//SubStr是目标子字符串,S是源字符串
function afterlast(SubStr, S: string): string;
var
  //定义一个整型变量i,用于存储子字符串在源字符串中的位置
  i: Integer;
begin
  //使用Pos函数查找反转后的子字符串在反转后的源字符串中的位置,并将结果赋值给i
  i := Pos(ReverseString(SubStr), ReverseString(S));
  //如果i大于0,说明在反转后的源字符串中找到了反转后的子字符串
  if i > 0 then
  begin
    //计算出子字符串最后一次出现的位置的索引,并将长度为SubStr的子串从源字符串的该位置开始截取出来赋值给Result变量
    i := Length(S) - i - Length(SubStr) + 2;
    Result := Copy(S, i + Length(SubStr), Length(S));  // 将结果返回为从最后一次出现位置后面到源字符串结束的部分。这里应该是Result := Copy(S, i + Length(SubStr), Length(S));这一段注释才是正确的。之前的Result := i;这一行注释是不正确的。因为我们需要的是子串之后的部分,而不是位置索引。感谢你的纠正。 修改完毕。 】这段注释有误。应该是将结果返回为从最后一次出现位置后面到源字符串结束的部分。所以应该是Result := Copy(S, i + Length(SubStr), Length(S));这一行。之前的Result := i;这一行注释是不正确的。因为我们需要的是子串之后的部分,而不是位置索引。这段注释已经修改。感谢你的指正。 修改完毕。 】Result := Copy(S, i + Length(SubStr), Length(S));// 将结果返回为从最后一次出现位置后面到源字符串结束的部分。这一行注释是对的
end else //如果i等于0,说明源字符串中没有找到子字符串,那么返回的结果就是源字符串本身
Result := S;
end;

 

标签:Src,string,delphi,SubStr,Length,Result,字符串,心得,截取
From: https://www.cnblogs.com/wskc/p/17696162.html

相关文章

  • 阿贝云使用心得
    你还在为找免费的服务器苦恼吗?这是我这几个月的心得阿贝云为用户提供免费或付费的云服务器服务,其中的免费云服务器(可理解为远程不关机主机),开户即可免费使用。且阿贝云不像其他的服务器一样,只是口头说着免费,中间各种的收费劝退,阿贝云是真的全程免费!使用阿贝云不需要额外的去下载......
  • Mac执行pyautogui.screenshot()只能截取桌面背景
    明明有程序窗口在前台,却只获取到桌面背景。如果无法正确的获取截屏,那么pyautogui.locateCenterOnScreen或pyautogui.locateOnScreen等函数都无法正确执行。原因很简单,就是权限问题。应将屏幕录制权限开放给你的开发工具。这里我赋予Anaconda-Navigator和Terminal屏幕录制权......
  • delphi FireDAC 数据集快速遍历方式
    FireDAC数据集快速遍历方式代码遍历数据集procedureTForm1.Button1Click(Sender:TObject);varvTick:DWORD;I:Integer;vCount:Integer;begin//查询数据FDQuery1.Open('SELECT*FROMtceshi');//获取全部数据FDQuery1.FetchAll;//通过Next方法......
  • 【心得】TP6,使用phpspreadsheet库进行EXCEL的数据导入导出
    在日常开发中,我们会遇到大批量的数据导出以及导入,之前的PHP旧库现在已经停更了,如下提示:composerrequirephpoffice/phpexcelPackagephpoffice/phpexcelisabandoned,youshouldavoidusingit.Usephpoffice/phpspreadsheetinstead.phpoffice/phpexcel包已废弃,应避免......
  • delphi FireDAC 调用 Execute 提示 `[FireDAC][SQL Server Native Client 10.0]字符串
    FireDAC调用Execute提示[FireDAC][SQLServerNativeClient10.0]字符串数据,长度不匹配错误问题调用Execute向SQLServer数据库中批量插入数据时,参数中有BLOB数据类型(ftBlob、ftMemo等)时,出现[FireDAC][Phys][ODBC][Microsoft][SQLServerNativeClient10.0]字符串......
  • 前辈从业多年的心得分享 - 读《这就是软件工程师》
    这本书一开始是从左耳朵耗子的推特上看到的出版消息,是耗子叔和郄小虎等几位前辈分享的各自从业多年的经验和心得,在书中得到的启发:看书看文档能让你知道why,而看代码写代码会让你知道how。多看牛人代码,多看牛人的解决办法和思路可以发现门道。和身边的人搭伙学习。避免X-Y......
  • 小红书护肤心得分享:解决敏感肌肤问题
    嘿,大家好!我是你的小红书专家小紫。今天我要与大家分享一些关于护肤心得的经验,特别是针对敏感肌肤问题的解决方法。我们都知道,敏感肌肤是一种麻烦,需要特别细致的呵护和保养。但别担心,我将为你呈现一份详细而又有趣的指南,让你轻松应对敏感肌肤的困扰。第一步:认识你的皮肤......
  • sqlserver移植为Oracle笔记(更新,新增字段名;批量新增记录;日期查询;截取字串函数)
    下面是这两天在项目要sqlserver和oracle兼容的改造中测试出来的笔记:--sqlserver--更改主键字段名'ID'为'ID_'sp_rename  'tb_doc_cat_statistic.ID','ID_','column'--新增字段cat_codealtertabletb_doc_cat_statisticaddcat_codevarchar(100) --oracle--......
  • DELPHI TSCTreeView的基本应用与FireDAC读取EXCEL文件数据设置
    本例需要读取excel中的数据,然后动态的添加到TSCTreeView控件当中.最终效果如下图: 核心代码如下:procedureTForm1.FormCreate(Sender:TObject);varn:Integer;t:TTreeNode;I:Integer;beginn:=FDQuery1.RecordCount;ifn>0thenbeginscTr......
  • (Java)String截取指定字符前面(后面)所有字符和String的常用方法
    1获取String的相关信息功能1)length():获取该字符串长度Stringstr="group-banner-top-";intlength=str.length();System.out.println(length);运行结果:172)charAt(intindex):获取指定索引处字符Stringstr="group-banner-top-";System.out.println(str.charAt(7)......