![]() |
|
|
#1
|
|||
|
|||
|
Приветствую.
помогите решить вопрос, бьюсь 3 день. Есть путь к примеру C\:папка1\папка2\файл.txt Мне нужно вывести только папка2\файл.txt Подскажите как это правильно сделать. |
|
#2
|
||||
|
||||
|
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
s: string;
flg: boolean;
begin
s:= 'C\:папка1\папка2\файл.txt';
flg:= false;
for i := Length(s) downto 1 do
begin
if (flg) and (s[i] = '\') then
begin
Edit1.Text:= Copy(s,i+1, Length(s));
Exit;
end;
if s[i] = '\' then flg:= true;
end;
end; |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
dagon81 (08.12.2016)
| ||
|
#3
|
||||
|
||||
|
Вырвать из строки кусок, начиная со второго обратного слеша справа.
|
|
#4
|
||||
|
||||
|
Цитата:
Код:
s := "c:\folder1\folder2\file" a := s.split(['\']); print a[-1] print a[-2] Последний раз редактировалось M.A.D.M.A.N., 08.12.2016 в 15:24. |
|
#5
|
|||
|
|||
|
Спасибо, но не много не то, мне надо из пути к файлу убрать путь к исполняемой программе.
например путь к исполняемой программе I:\code\project\ путь к файлу I:\code\project\Icon\1.ico и из этого пути убрать путь программы. Надеюсь объяснил. |
|
#6
|
||||
|
||||
|
Цитата:
Код:
... s:= StringReplace(s,extractfiledir(paramstr(0)),'',[]); ... З.Ы. Оффтоп: Цитата:
Последний раз редактировалось Alegun, 08.12.2016 в 15:41. |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
dagon81 (08.12.2016)
| ||
|
#7
|
||||
|
||||
|
Похоже ТС сам запутался) Тогда Copy начиная с Length строки пути к исп. файлу. 1 строчка кода будет.
|
|
#8
|
|||
|
|||
|
спасибо все попробую
|
|
#9
|
||||
|
||||
|
Цитата:
"hello/world/!!!" -> ["hello", "world", "!!!"] http://docwiki.embarcadero.com/Libra...ls.SplitString В ХЕ* версиях встроенная ф-я в виде хелперов (расширения базовых типов). |
| Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Alegun (09.12.2016)
| ||
|
#10
|
|||
|
|||
|
Цитата:
FYI: Код:
var FileName : Stirng; RelFileName : String; Idx : Integer; begin FileName := 'I:\code\project\Icon\1.ico'; Idx := Length(ExtractFilePath(ParamStr(0))); RelFileName := Copy(FileName,Idx+1,Length(FileName)-Idx); end; |
|
#11
|
||||
|
||||
|
Цитата:
|
|
#12
|
||||
|
||||
|
Код:
var s: String; begin (* s:=ExtractFilePath(Application.ExeName)+'icons\icon.txt'; *) s:=Copy(s, Length(ExtractFilePath(Application.ExeName))+1, MaxInt-1); |
|
#13
|
||||
|
||||
|
Цитата:
А вообще, какой-то флейм начался. Если так будет продолжаться, придётся тему закрывать. |
|
#14
|
|||
|
|||
|
Цитата:
Кстати, да. Причем 'да' на оба утверждения. |
|
#15
|
||||
|
||||
|
Совсем забыли про регулярки...
Код:
uses
RegularExpressions;
...
function GetPartPathOfFile(PathFile: String; Psn: Byte): String;
var
Match: TMatchCollection;
Reg: TRegEx;
I: Byte;
Res: String;
begin
Reg := TRegEx.Create('[^\\]+');
if Reg.IsMatch(PathFile) then
begin
Match := Reg.Matches(PathFile, '[^\\]+', [roIgnoreCase]);
I := Psn;
while I <> Match.Count do
begin
Res := Res + Match.Item[i].Value + '\';
Inc(I);
end;
Delete(Res, Length(Res), 1);
end;
Result := Res;
end;Пример вызова (2-ой параметр означает с какого обратного слеша вернуть строку) Код:
Edit1.Text := GetPartPathOfFile('C\:папка1\папка2\файл.txt', 2);Последний раз редактировалось Kailon, 10.12.2016 в 12:46. |