Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.12.2016, 15:00
dagon81 dagon81 вне форума
Прохожий
 
Регистрация: 13.07.2016
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Путь к файлу

Приветствую.
помогите решить вопрос, бьюсь 3 день.
Есть путь к примеру C\:папка1\папка2\файл.txt
Мне нужно вывести только папка2\файл.txt
Подскажите как это правильно сделать.
  #2  
Старый 08.12.2016, 15:17
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Код:
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  
Старый 08.12.2016, 15:19
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Вырвать из строки кусок, начиная со второго обратного слеша справа.
__________________
Пишу программы за еду.
__________________
  #4  
Старый 08.12.2016, 15:19
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Alegun
Код:
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;

Код:
s := "c:\folder1\folder2\file"
a := s.split(['\']);
print a[-1]
print a[-2]
-1, -2 — первый и второй элемент с конца массива.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 08.12.2016 в 15:24.
  #5  
Старый 08.12.2016, 15:29
dagon81 dagon81 вне форума
Прохожий
 
Регистрация: 13.07.2016
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо, но не много не то, мне надо из пути к файлу убрать путь к исполняемой программе.
например
путь к исполняемой программе I:\code\project\
путь к файлу I:\code\project\Icon\1.ico и из этого пути убрать путь программы.
Надеюсь объяснил.
  #6  
Старый 08.12.2016, 15:38
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
...Надеюсь объяснил.
Стало только хуже:-)
Код:
...
s:= StringReplace(s,extractfiledir(paramstr(0)),'',[]);
...


З.Ы. Оффтоп:
Цитата:
Сообщение от M.A.D.M.A.N.
Код:
s := "c:\folder1\folder2\file"
a := s.split(['\']);
print a[-1]
print a[-2]
-1, -2 — первый и второй элемент с конца массива.
Mad, а поподробнее про s.split не подскажешь, мож чё не знаю, но в D7 такого у стринги нет

Последний раз редактировалось Alegun, 08.12.2016 в 15:41.
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
dagon81 (08.12.2016)
  #7  
Старый 08.12.2016, 15:38
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Похоже ТС сам запутался) Тогда Copy начиная с Length строки пути к исп. файлу. 1 строчка кода будет.
__________________
Пишу программы за еду.
__________________
  #8  
Старый 08.12.2016, 15:46
dagon81 dagon81 вне форума
Прохожий
 
Регистрация: 13.07.2016
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

спасибо все попробую
  #9  
Старый 08.12.2016, 19:57
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Alegun
Стало только хуже:-)
Код:
...
s:= StringReplace(s,extractfiledir(paramstr(0)),'',[]);
...


З.Ы. Оффтоп:

Mad, а поподробнее про s.split не подскажешь, мож чё не знаю, но в D7 такого у стринги нет
На входе строка, на выходе список (массив) подстрок.
"hello/world/!!!" -> ["hello", "world", "!!!"]
http://docwiki.embarcadero.com/Libra...ls.SplitString
В ХЕ* версиях встроенная ф-я в виде хелперов (расширения базовых типов).
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
Alegun (09.12.2016)
  #10  
Старый 08.12.2016, 20:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от dagon81
Спасибо, но не много не то, мне надо из пути к файлу убрать путь к исполняемой программе.
например
путь к исполняемой программе I:\code\project\
путь к файлу I:\code\project\Icon\1.ico и из этого пути убрать путь программы.
Надеюсь объяснил.

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  
Старый 09.12.2016, 09:44
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
На входе строка, на выходе список (массив) подстрок.
"hello/world/!!!" -> ["hello", "world", "!!!"]
http://docwiki.embarcadero.com/Libra...ls.SplitString
В ХЕ* версиях встроенная ф-я в виде хелперов (расширения базовых типов).
Спасибо за пояснение, это значит что-то типа DelimitedText в TStringList, но к сожалению, у бабульки семёрки такое отсутствует (
  #12  
Старый 09.12.2016, 18:42
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
var
  s: String;
begin
  (* s:=ExtractFilePath(Application.ExeName)+'icons\icon.txt'; *)
  s:=Copy(s, Length(ExtractFilePath(Application.ExeName))+1, MaxInt-1);
__________________
Пишу программы за еду.
__________________
  #13  
Старый 09.12.2016, 20:49
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от NumLock
Код:
var
  s: String;
begin
  (* s:=ExtractFilePath(Application.ExeName)+'icons\icon.txt'; *)
  s:=Copy(s, Length(ExtractFilePath(Application.ExeName))+1, MaxInt-1);
StringReplace еще присобачить можно.
А вообще, какой-то флейм начался. Если так будет продолжаться, придётся тему закрывать.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
  #14  
Старый 10.12.2016, 00:16
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
StringReplace еще присобачить можно.
А вообще, какой-то флейм начался. Если так будет продолжаться, придётся тему закрывать.

Кстати, да. Причем 'да' на оба утверждения.
  #15  
Старый 10.12.2016, 11:33
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение Еще решение

Совсем забыли про регулярки...
Код:
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.
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter