B
Baton77
Использую функию inside - возвращает подстроку, вложенную между парой
подстрок Front ... Back
Она цепляет ещё две функции : RPos() возвращает первый символ последней найденной
подстроки Find в строке Search.
и before() возвращает часть стоки, находящейся перед
первой найденной подстроки Find в строке Search
Так вот, глюк заключается в том, что inside возвращает только первую найденную подстроку в строке, а их может быть, скажем, десять...
В новой строке происходит то же.
Как исправить? :blink:
подстрок Front ... Back
Код:
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;
подстроки Find в строке Search.
Код:
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;
первой найденной подстроки Find в строке Search
Код:
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;
В новой строке происходит то же.
Как исправить? :blink: