Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2013, 21:00   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию Получить последний (правый) элемент пути

Имеются строки вида:
а-->б-->в...-->я
Нужно получить я.
Я конечно могу идти циклом от конца строки и пытаться выделить первый встречный разделитель. Есть ли более элегантное решение? Дельфи XE.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 12.06.2013, 21:03   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
function LastDelimiter ( const Delimiters, Source : string ) : Integer;
Хотя, там может быть так и реализовано.
UPD Это оказалось не то - ищется последнее вхождение любого символа из набора.
UPD2 Интернет предлагает:
Код:
function LastPos(const SubStr: String; const S: String): Integer;
begin
   result := Pos(Reverse(SubStr), Reverse(S)) ;
   if (result <> 0) then
     result := ((Length(S) - Length(SubStr)) + 1) - result + 1;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 12.06.2013 в 21:08.
BDA вне форума Ответить с цитированием
Старый 12.06.2013, 21:23   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Код:
var
 p:Integer;
 s:string;
begin
 s:='а-->б-->в...-->я';
 p:=Pos('-->я',s);
 Result:=p+Length('-->я'); //Result указывает на букву я
end;
Человек_Борща вне форума Ответить с цитированием
Старый 12.06.2013, 21:32   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
ExtractFileName(ExtractFileDir(s));
В s полное имя файла. Вариант d:\fff.txt не прокатит, нужен как минимум один каталог. Хотя в этом случае вернет строку нулевой длины

ADD

тю, слово путь сбило с толку, ответил невпопад
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 12.06.2013 в 21:37.
Аватар вне форума Ответить с цитированием
Старый 12.06.2013, 21:55   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Я конечно могу идти циклом от конца строки и пытаться выделить первый встречный разделитель. Есть ли более элегантное решение? Дельфи XE.
Ну и отлично. Так и делайте. И не вижу в данном подходе ничего "неэлегантного", вполне себе нормальный подход..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.06.2013, 10:40   #6
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

ну и немного извращенный метод:
Код:
uses StrUtils;
...
var
  s, ss : AnsiString;
begin
  s := 'а-->б-->в...-->я';
  s := AnsiReverseString(s);
  ss := Copy(s, 1, Pos('>', s)-1);
  ss := AnsiReverseString(ss);
  ShowMessage(ss);
end;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 14.06.2013, 07:55   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Спасибо всем за ответы.
Цитата:
UPD2 Интернет предлагает:
Попробую.
Цитата:
p:=Pos('-->я',s);
Я не знаю:
1. Не ошибся ли пользователь. Он мог забыть указать последний элемент.
2. Я не знаю как выглядит последний элемент - почти любое сочетание символов, за исключением комбинации из которой получается разделитель.
Цитата:
тю, слово путь сбило с толку, ответил невпопад
Аналогия верная - это путь от вершины к узлу/листу дерева. Папки и файлы это тоже дерево.
Цитата:
Ну и отлично. Так и делайте. И не вижу в данном подходе ничего "неэлегантного", вполне себе нормальный подход..
Ну я думал - имеется уже готовая функция/процедура.
Цитата:
ну и немного извращенный метод:
До момента входа в функцию я не знаю как будет выглядеть разделитель. И второе - в элементе пути также могут попадаться символы из разделителя. То есть в данном примере может быть в середине где-то или в конце встретиться элемент '>'. Это не будет ошибкой.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 14.06.2013 в 07:59.
Utkin вне форума Ответить с цитированием
Старый 14.06.2013, 10:25   #8
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

я, конечно, не претендую на правильность своего решения, но всё-же позволю себе небольшой коммент
Цитата:
До момента входа в функцию я не знаю как будет выглядеть разделитель
можно ж передать формат разделителя входящим параметром
Цитата:
в элементе пути также могут попадаться символы из разделителя
и
Цитата:
почти любое сочетание символов, за исключением комбинации из которой получается разделитель
как-то одно другому не соответствует
Цитата:
То есть в данном примере может быть в середине где-то или в конце встретиться элемент '>'. Это не будет ошибкой
зависит от искомого разделителя)
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 14.06.2013, 11:03   #9
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

C TStringList делать не хотите?
Например так:
Код:
var
list:TStringList;
s:string;
...
//меняем разделитель на CR+LF
list.Text := stringReplace('а-->б-->в...-->я', '-->', #13#10, [rfReplaceAll]);
//получаем последнюю строку
s:=list[pred(list.count)];
astecenko вне форума Ответить с цитированием
Старый 14.06.2013, 16:53   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
как-то одно другому не соответствует
Все соответствует.
Например:
a-->>-->в
Тут три элемента а, >, в
Цитата:
можно ж передать формат разделителя входящим параметром
Так и есть.
Цитата:
C TStringList делать не хотите?
Почему не хочу, просто не приходило в голову.
Спасибо всем за ответы. Думаю имеющихся вариантов достаточно.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В каждой строке матрицы Y(5,5) определить последний отрицательный элемент и его индекс solodinka2007 Помощь студентам 0 03.10.2012 14:55
удаляем последний элемент дерева Madmaxisss Паскаль, Turbo Pascal, PascalABC.NET 7 07.08.2012 15:16
Последний элемент на первое место Abuhamed JavaScript, Ajax 1 06.03.2012 11:50
Одномерный массив. Необходимо заменить последний положительный элемент на второй элемент массива кумитэ Паскаль, Turbo Pascal, PascalABC.NET 1 19.12.2011 16:44
последний элемент очереди zhenya.ya Помощь студентам 0 31.03.2010 21:20