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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2011, 11:19   #1
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию Получить часть строки

Нужно получить часть строки до последнего пробела. Сделал так: перевернул строку, обрезал текст до первого пробела и снова перевернул.
Сижу и думаю, глупо это как-то. Как сделать проще? Уже башка не варит...
_SERGEYX_ вне форума Ответить с цитированием
Старый 29.03.2011, 11:27   #2
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
По умолчанию

циклом перебрать все пробелы скидывая каждый в переменную и обрезать по окончании от этой переменной?
вроде как один цикл нуна вместо двух при перевертывании строки и обратно
тока не бейте дяденка

Последний раз редактировалось BoozZzilla; 29.03.2011 в 11:29.
BoozZzilla вне форума Ответить с цитированием
Старый 29.03.2011, 11:32   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Еще вот так написал... может лучше будет
Код:
function BezColor(aStr: string): string;
var i: Integer;
begin
  for i := Length(aStr) downto 1 do
    if aStr[i] = ' ' then
    begin
      Result := Copy(aStr, 1, i);
      Break;
    end;
end;
Просто этот код будет в калькулируемом поле таблицы и при больших объемах данных хочется, чтобы работал максимально быстро.
_SERGEYX_ вне форума Ответить с цитированием
Старый 29.03.2011, 11:43   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
function BezColor(aStr: string): string;
var i: Integer;
begin
  Result:='';
  for i := Length(aStr) downto 1 do
    if aStr[i] = ' ' then
    begin
      Result := Copy(aStr, 1, i);
      Break;
    end;
end;
вот теперь совсем хорошо
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.03.2011, 11:56   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Хе, как говорил Наполеон: "Лучшее сражение то, которое не состоялось". Лучше бы вообще без подобных кодов обойтись. Бестолковое начальство сразу толком задачу поставить не может, вот и приходится извращаться...
_SERGEYX_ вне форума Ответить с цитированием
Старый 29.03.2011, 12:03   #6
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Еще вот так написал... может лучше будет
Я думаю это оптимальный вариант (асм не в счет, да и неизвестно, даст ли он прирост скорости). Могу лишь посоветовать добавить const в определения aStr, это даст некоторый (очень мизерный) прирост в скорости, за счет того, что не будет выделяться память под изменения aStr.
psycho-coder вне форума Ответить с цитированием
Старый 29.03.2011, 12:06   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
что не будет выделяться память под изменения aStr.
там помоему все равно не будет выделения, в Делфи ж умные строки(хотя мера этого ума мне неизвестна)
но вообще толковое замечание
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.03.2011, 13:47   #8
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
получить часть строки до последнего пробела
Если невключительно, то
Код:
Result := Copy(aStr, 1, i-1);
И второе. А что должно получиться, если пробелов нет? В варианте от Пепела Феникса результат пустой. Но может быть, что нужно вернуть всю строку.
Код:
  for i := Length(aStr) downto 1 do
    if aStr[i] = ' ' then
    begin
      Result := Copy(aStr, 1, i-1);
      Exit;
    end;
  Result:=aStr;

Последний раз редактировалось Sibedir; 29.03.2011 в 13:52.
Sibedir вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как получить дробную часть float ]tach[ C++ Builder 6 23.01.2011 15:57
Вырезать часть строки. sergeyrulit Общие вопросы Delphi 2 22.10.2010 22:25
Отрезать часть строки Demonmov C++ Builder 3 04.05.2010 19:18
Строки. Как вывести часть строки? Anfall Общие вопросы Delphi 7 26.02.2009 09:10
простой вопрос - как получить дробную часть Inta Microsoft Office Excel 2 19.11.2008 22:11