Delphi中的InStrRev函式 倒找文字

2022-05-09 01:39:12 字數 1787 閱讀 7875

寫html解釋部分的時候,需要在乙個完整的url中,提取出該url的路徑,如

需要提取出

這個路徑出來,這個如果在vb/vbs中,使用instrrev函式,很容易就可以實現,但在delphi中,雖然經常用pos來判斷字元的的位置,但從來沒有看到過posrev之類的函式,查了幫助也沒有便到。本來想自己寫乙個,但一想到網路這個寶庫,還是先找找看再說,說不定有拿位前輩已經為我們寫好了。

駕著google,搜了delphi instrrev,在第一頁就找到了開發俱樂部(的乙個精華貼(貼子中說

"由於delphi沒有提供象vb中instrrev()這樣的函式.而pos()是從字串左邊開始查詢的。",看來delphi中真的沒有這個相同功能的函式了,好在該貼子中有提供乙個函式,正在使用該函式進,忽然想來delphi中有乙個函式extractfilepath跟我要的功能相似,於是立即用extractfilepath試了一下,得到的結果不是我要的。不過這沒有讓我灰心,習慣地檢視了extractfilepath的函式源**:

function extractfilepath(const filename: string): string;

vari: 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;

varp: pchar;

begin

result := length(s);

p := pchar(delimiters);

while result > 0 do

begin

if (s[result] <> #0) and (strscan(p, s[result]) <> nil) then

if (bytetype(s, result) = mbtrailbyte) then

dec(result)

else

exit;

begin

if (bytetype(s, result) <> mbtrailbyte) then

exit;

dec(result);

while bytetype(s, result) = mbtrailbyte do dec(result);

end;

dec(result);

end;

end;

delphi中的指標

從最初的 pascal 發展至今 的object pascal 可以說在指標運用上,絲毫不會遜色於 c語言的指標。以下內容分為八個部分,分別是 一 型別指標的定義 二 無型別指標的定義 三 指標的解除引用 四 取位址 指標賦值 五 指標運算 六 動態記憶體分配 七 字元陣列的運算 八 函式指標 對於...

delphi中的指標

從最初的 pascal 發展至今 的object pascal 可以說在指標運用上,絲毫不會遜色於 c語言的指標。以下內容分為八個部分,分別是 一 型別指標的定義 二 無型別指標的定義 三 指標的解除引用 四 取位址 指標賦值 五 指標運算 六 動態記憶體分配 七 字元陣列的運算 八 函式指標 對於...

Delphi中ShellExecute的妙用

shellexecute的功能是執行乙個外部程式 或者是開啟乙個已註冊的檔案 開啟乙個目錄 列印乙個檔案等等 並對外部程式有一定的控制。有幾個api函式都可以實現這些功能,但是在大多數情況下shellexecute是更多的被使用的,同時它並不是太複雜。下面舉例說明它的用法。開啟記事本,並開啟乙個檔案...