寫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是更多的被使用的,同時它並不是太複雜。下面舉例說明它的用法。開啟記事本,並開啟乙個檔案...