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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2010, 21:44   #1
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию Функция Pos, поиск снизу вверх

Здравствуйте! Есть ли в Delphi такая функция которая может искать текст и выдавать его место в строке, как функция Pos, но только не с вверху вниз, а наоборот (снизу вверх) ? ? ? Пробовал функцию PosEx, но она также ищет сверху вниз
RIO вне форума Ответить с цитированием
Старый 11.01.2010, 22:43   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Можно, конечно, извратиться...
Например, начинать поиск с точки, кратной длине поисковой подстроки, но с конца строки.
Т.е. вначале делаем PosEx с оффсетом = длина строки - длина подстроки.
Потом - с оффсетом = длина строки - две длины подстроки.
Потом - с оффсетом = длина строки - три длины подстроки.
И так далее.
Вот вам и получится желаемое вами "удаление гланд через задний проход"
Никак не пойму... Сегодня погода какая-то особенная, что ли? Уж больно много любителей экзотических подходов к программированию.
mihali4 вне форума Ответить с цитированием
Старый 11.01.2010, 22:59   #3
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Хм Может и погода Но именно этот вариант, на мой взгляд, лучше подходит к решению моей проблемы: есть текст в мемо, нужно удалить весь текст от начала указанного слова (которое встречается первым, нахожу Pos), и до второго указанного слова (которое тоже встречается первым, но уже с конца).
Почему в этом месте не подходит Pos? Потому что второе слово в этом промежутке может встречаться много раз Можно конечно циклом пробежаться, но хочу решить проблему нестандартным способом

Последний раз редактировалось mihali4; 11.01.2010 в 23:06.
RIO вне форума Ответить с цитированием
Старый 11.01.2010, 23:10   #4
_bAd_
Пользователь
 
Регистрация: 11.01.2010
Сообщений: 21
По умолчанию

Из контекста мне стало видно, что функция ПозЕх() вас качественно удовлетворяет, просто крутит не в ту сторону
Так вот её текст:
Код:
function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;
var
  I,X: Integer;
  Len, LenSubStr: Integer;
begin
  if Offset = 1 then
    Result := Pos(SubStr, S)
  else
  begin
    I := Offset;
    LenSubStr := Length(SubStr);
    Len := Length(S) - LenSubStr + 1;
    while I <= Len do
    begin
      if S[I] = SubStr[1] then
      begin
        X := 1;
        while (X < LenSubStr) and (S[I + X] = SubStr[X + 1]) do
          Inc(X);
        if (X = LenSubStr) then
        begin
          Result := I;
          exit;
        end;
      end;
      Inc(I);
    end;
    Result := 0;
  end;
end;
Мне кажется не сложно изменить её имя и три.. или четыре цыферьки и получить требуемое
...
типа
I := Offset; заменить на I := Offset+ LenSubStr; ... ну и так далее

Последний раз редактировалось _bAd_; 11.01.2010 в 23:14.
_bAd_ вне форума Ответить с цитированием
Старый 11.01.2010, 23:17   #5
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Хммм, да, вы правы! Спасибо! То, что мне и нужно было Только у меня эта функция на асме, в 2007 делфе

PS: Я про то, что не мог ее изменить А вы как раз подкинула на делфе ее, спасибо

Последний раз редактировалось RIO; 11.01.2010 в 23:38.
RIO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
что будет возвращать функция при различных pos vasyapupkin Общие вопросы C/C++ 4 03.11.2009 20:48
функция pos drumerbaker Помощь студентам 6 17.05.2009 15:52
Сверху\снизу Marsik Помощь студентам 11 03.11.2007 13:33