• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Delphi中的InStrRev函数(倒找文本)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

写HTML解释部分的时候,需要在一个完整的URL中,提取出该URL的路径,如
http://www.515800.cn/blog/index.asp
需要提取出
http://www.515800.cn/blog/
这个路径出来,这个如果在VB/VBS中,使用InStrRev函数,很容易就可以实现,但在Delphi中,虽然经常用Pos来判断字符的的位置,但从来没有看到过PosRev之类的函数,查了帮助也没有便到。本来想自己写一个,但一想到网络这个宝库,还是先找找看再说,说不定有拿位前辈已经为我们写好了。
  驾着Google,搜了Delphi InStrRev,在第一页就找到了开发俱乐部(http://www.dev-club.com/)的一个精华贴(http://www.dev-club.com/club/bbs/showEssence.asp?id=14388),贴子中说
"由于Delphi没有提供象VB中InstrRev()这样的函数.而Pos()是从字串左边开始查找的。",看来Delphi中真的没有这个相同功能的函数了,好在该贴子中有提供一个函数,正在使用该函数进,忽然想来Delphi中有一个函数ExtractFilePath跟我要的功能相似,于是立即用ExtractFilePath试了一下,得到的结果不是我要的。不过这没有让我灰心,习惯地查看了ExtractFilePath的函数源代码:

function ExtractFilePath(const FileName: string): string;
var
I: Integer;
begin
I := LastDelimiter(PathDelim + DriveDelim, FileName);
Result := Copy(FileName, 1, I);
end;

一眼就看到了LastDelimiter,踏破铁鞋无觅处,来得全不费功夫。

终于用了简单的几句实现了getBaseURL函数了。


function getBaseURL(sURL:string):string;
begin
if Pos('?',sURL)>0 then
begin
Result:=LeftStr(sURL,Pos('?',sURL)-1);
end;
Result := Copy(Result, 1, LastDelimiter('/', Result));
end;


LastDelimiter的实现:

function LastDelimiter(const Delimiters, S: string): Integer;
var
P: PChar;
begin
Result := Length(S);
P := PChar(Delimiters);
while Result > 0 do
begin
if (S[Result] <> #0) and (StrScan(P, S[Result]) <> nil) then
{$IFDEF MSWINDOWS}
if (ByteType(S, Result) = mbTrailByte) then
Dec(Result)
else
Exit;
{$ENDIF}
{$IFDEF LINUX}
begin
if (ByteType(S, Result) <> mbTrailByte) then
Exit;
Dec(Result);
while ByteType(S, Result) = mbTrailByte do Dec(Result);
end;
{$ENDIF}
Dec(Result);
end;
end;


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
使用MATLAB打开.bdf脑电文件发布时间:2022-07-18
下一篇:
Matlab第四课:基础绘图发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap