我想从一个字符串中删除某个字符,直到字符串只有字符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