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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2015, 20:35   #1
chiko666111
 
Регистрация: 02.08.2015
Сообщений: 5
По умолчанию Нужна функция для обрезания текста(см подр.)

Нужна функция на Дельфи, при передачи в которую String функция возвращает все, что идёт после знака "-".
Пример:
B:=Cut("one-two");
Переменная B будет равна "two"
chiko666111 вне форума Ответить с цитированием
Старый 07.09.2015, 20:40   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Код:
function Cut(const s: string): string;
begin
  Result := Copy(s, Pos('-', s) + 1, MaxInt));
end;
это для строк, которые точно содержат '-'
GreenWizard вне форума Ответить с цитированием
Старый 07.09.2015, 20:54   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Цитата:
Сообщение от GreenWizard Посмотреть сообщение
Код:
function Cut(const s: string): string;
begin
  Result := Copy(s, Pos('-', s) + 1, MaxInt));
end;
это для строк, которые точно содержат '-'
А почему не?
Код:
Copy(s, Pos('-', s) + 1, Length(s))
FaTaL вне форума Ответить с цитированием
Старый 07.09.2015, 22:01   #4
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
А почему не?
Код:
Copy(s, Pos('-', s) + 1, Length(s))
а почему не
Код:
system.delete(S, 1, LastDelimiter('-',S));
п.с. проверь свою функцию на строке "скорый поезд Ростов-на-Дону - Москва"

Функция выглядит так:
Код:
function Cut(const  s: string): string;
begin
  Result := S;
  system.delete(Result, 1, LastDelimiter('-',Result)); 
end;
можно и так

Код:
function Cut(var  s: string): boolean;
var d : integer;
begin
  d:=LastDelimiter('-',s);
  result := d>0;
  if result then  system.delete(S, 1, d); 
end;
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось JUDAS; 07.09.2015 в 22:09.
JUDAS вне форума Ответить с цитированием
Старый 07.09.2015, 22:12   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
"скорый поезд Ростов-на-Дону - Москва"
И что, где ТС спрашивает, что после последнего дефиса?
Цитата:
функция возвращает все, что идёт после знака "-".
Вполне логично предположить что все, что после первого
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.09.2015, 10:35   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

JUDAS, кроме того, что автору топика нужно всё, что идёт после первого дефиса, ещё, на будущее, учтите, что операция delete крайне затратная, если в ней нет прямой необходимости, лучше её избегать.
Здесь она, например, не нужна.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.09.2015, 12:31   #7
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
операция delete крайне затратная, если в ней нет прямой необходимости, лучше её избегать.

Ну реально занудство ...
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 08.09.2015, 13:45   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
Ну реально занудство ...
угу. Оно!
просто не вижу смысла использовать очевидно неэффективный код, если можно использовать очевидно эффективный.

а так, да, согласен, занудство с моей стороны...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.09.2015, 13:47   #9
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
угу. Оно!
просто не вижу смысла использовать очевидно неэффективный код, если можно использовать очевидно эффективный.

а так, да, согласен, занудство с моей стороны...
А дайте пруф на delete. Чет мне теперь интересно стало что там внутри такого страшно не эффективного?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 08.09.2015, 13:58   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
А дайте пруф на delete. Чет мне теперь интересно стало что там внутри такого страшно не эффективного?
в идеале лучше чтоб было только Pos/PosEx и только в конце Copy.
чтоб было как можно меньше выделений памяти.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для чего нужна функция setAttribute hon JavaScript, Ajax 13 10.06.2013 17:55
Нужна функция(Макрос) для вывода номеров и категорий в таблице alexp21 Microsoft Office Excel 4 26.09.2011 23:32
Нужна программа для обрезания демок ( .dem файлов) Counter Strike 1.6 Spasibo Фриланс 0 14.05.2011 22:15
Нужна функция для ячеки в Excel resquimi Microsoft Office Excel 1 22.04.2011 23:08
Нужна функция для проигрывания MP3 EniSh Общие вопросы Delphi 6 29.06.2008 01:08