Поиск подстроки между двух подстрок ?

Тема в разделе "Delphi - Система", создана пользователем Baton77, 24 май 2006.

Статус темы:
Закрыта.
  1. Baton77

    Baton77 Гость

    Использую функию inside - возвращает подстроку, вложенную между парой
    подстрок Front ... Back
    Код (Text):
    function inside(const Search, Front, Back: string): string;
    var
    Index, Len: byte;
    begin
    Index := RPos(Front, before(Search, Back));
    Len := Pos(Back, Search);
    if (Index > 0) and (Len > 0) then
    Result := Copy(Search, Index + 1, Len - (Index + 1))
    else
    Result := '';
    end;
    Она цепляет ещё две функции : RPos() возвращает первый символ последней найденной
    подстроки Find в строке Search.
    Код (Text):
    function RPos(const Find, Search: string): byte;
    var
    FindPtr, SearchPtr, TempPtr: PChar;
    begin
    FindPtr := StrAlloc(Length(Find) + 1);
    SearchPtr := StrAlloc(Length(Search) + 1);
    StrPCopy(FindPtr, Find);
    StrPCopy(SearchPtr, Search);
    Result := 0;
    repeat
    TempPtr := StrRScan(SearchPtr, FindPtr^);
    if TempPtr <> nil then
    if (StrLComp(TempPtr, FindPtr, Length(Find)) = 0) then
    begin
    Result := TempPtr - SearchPtr + 1;
    TempPtr := nil;
    end
    else
    TempPtr := #0;
    until TempPtr = nil;
    end;
    и before() возвращает часть стоки, находящейся перед
    первой найденной подстроки Find в строке Search
    Код (Text):
    function before(const Search, Find: string): string;
    var
    index: byte;
    begin
    index := Pos(Find, Search);
    if index = 0 then
    Result := Search
    else
    Result := Copy(Search, 1, index - 1);
    end;
    Так вот, глюк заключается в том, что inside возвращает только первую найденную подстроку в строке, а их может быть, скажем, десять...
    В новой строке происходит то же.
    Как исправить? :blink:
     
  2. x77

    x77 Гость

    например, удалить найденную подстроку из основной (Delete (Pos (sub, s), Length (sub)) и т.д.) и в оставшейся части искать дальше. так можно получить список всех вхождений строки.
     
  3. Baton77

    Baton77 Гость

    Вобщем функция работает, но не так как надо...
    Задаю разделители
    Код (Text):
    Temp := inside(text, '=', ']');
    Вот пример строки в которой надо реализовать этот Temp :
    Так вот, функция обрабатывает как Temp только #ff0009 , а 18 и #1200ff игнорирует и
    переходит на обработку следующей строки.
    Как заставить её понимать и 18 и #1200ff ? :)
     
  4. Barmutik

    Barmutik Гость

    Вроде как дали ответ уже .. или удаляй то что было найдено или ищи вхождение начиная с необходимой позиции в строке ...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей