我想從一個字符串中刪除某個字符,直到字符串只有字符x個的x個試圖從一個字符串中刪除某個字符,直到字符串只有字符
所以我會想實現是
c:\folder\new\stuff\all\more\hello\awesome\to.dll
變得
c:\folder\new\
通過一次刪除一個字符,直到字符串posses 3× '\'
{或者我怎麼過很多反斜槓要求它posses因爲它不會是相同的每一次。}
到目前爲止,我曾嘗試:
function RemoveLastPart(var s: string; I : integer): string;
begin
repeat
delete(s, length(s),1)
until (pos ('\',s) = I) and (s[length(s)]='\');
result := s;
end;
和
function RemoveStr(var s: string; I : integer): string;
begin
while (pos ('\',s) = I) do
begin
delete(s, length(s),1);
result := s;
end
end;
但這是行不通的,因爲你的路徑仍然可能是
c:\folder\new\stuff vs c:\folder\new\
我在猜測我錯誤地使用了pos
。我想如果一個字符串擁有「\」然後做一些事情。
因爲我永遠不知道路徑將會到達多長時間,或者它可能包含或不包含哪些文件夾,這使得它有點棘手。
我自己也嘗試(pos ('\',s) < I)
和1
增加我所以,如果我想我是3我要說(POS( '\',S)< 4)
編輯.... ..........
感謝所有回覆的
我永遠不會知道它有多少個反斜槓需要....我有一個時刻都在變化源文件夾
然後我有一個目標文件夾,它也一直在改變。 (EG c:\ test)和目標文件夾(EG D:\搜索結果)
掃描源文件夾中的文件類型。一旦找到匹配類型(EG c:\ test \ somefolder \ anotherfolder.exe) 我用目的地 (EG D:\ Search Results \ somefolder \ anotherfolder.exe)替換源文件。
我然後使用函數來計算兩個源文件夾反斜線和 搜索結果反斜槓所以
d:\搜索結果\ =兩個反斜槓(2) 和 d:\搜索結果\ somefolder \ anotherfolder.exe =四個反斜槓(4)
,如果我們的取4-2 + 1 = 3
這是我在哪裏卡住了...
我現在知道需要多少個反斜槓才能複製整個源目錄。
,所以我需要3反斜槓
如果再算上向後我們得到
d:\搜索結果\ somefolder \ anotherfolder.exe d:\搜索結果\ somefolder \ anotherfolder(這是錯誤的,這就是爲什麼我添加until (pos ('\',s) = I) and (s[length(s)]='\');
)
倒不如來算前鋒,所以我們得到
d:\搜索結果\ somefolder \ anotherfolder.exe d:\搜索結果\索姆efolder \
再次感謝所有回覆。我還沒有嘗試任何建議,但我會研究所有這些,看看我能否做出一些工作。
方法Pos總是返回特定字符串內子字符串的第一個ocurnace的位置。所以在你的例子中,Pos總是返回3。因此,我建議您使用PosEx來代替,因爲它允許您指定從哪個位置開始搜索特定的子字符串。 – SilverWarior 2015-04-04 21:16:57
@SilverWarior,Delphi的新版本具有模擬PosEx的Pos重載。 – 2015-04-04 21:20:28
嗨謝謝,即時通訊運行xe7 ..會給這一炮謝謝! @SilverWarior – 2015-04-04 21:24:34