|  | 
 
 | 
| 
			 
			#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. |