FRstr - точная копия StringReplace используется на случай если StringReplace глючит для работы использует функцию copy (Delphi)
{ -----------------------------------------------------------------------------} { Это библиотека для работы с динамическими массивами (1D,2D) строк } { } { Версия 2.0 (GNU Lesser GPL v2.1) } { } { Основные функции: } { * Добавление, удаление элементов } { * Быстрая сортировка массива } { * Функции чтения и записи (файл <--> динамический массив) } { * Функции фильтрации текста и строк } { } { Примечание: использование этой библиотеки обусловлено ограниченностью числа } { элементов TStringList=129391, и специфичностью алгоритма сортировки } { TStringList одна буква z ставиться после длинного слова zoom т.е. zoom,z. } { } { -----------------------------------------------------------------------------} { Это свободная программа; вы можете повторно распространять ее и/или } { модифицировать ее в соответствии с Универсальной Общественной Лицензией GNU, } { опубликованной / Фондом Свободного ПО; либо версии 2, либо (по вашему выбору)} { любой более поздней версии. } { } { Эта программа распространяется в надежде, что она будет полезной, } { но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ } { ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. } { Для получения подробных сведений смотрите } { Универсальную Общественную Лицензию GNU. } { -----------------------------------------------------------------------------} { http://www.suny-o.narod.ru } { -----------------------------------------------------------------------------} { Date last modified: 21/10/2013 } { -----------------------------------------------------------------------------} //FRstr точная копия StringReplace используется на случай если StringReplace глючит //для работы использует функцию copy function FRstr(FromStr, find1, replace1:string; flag:TReplaceFlags):string; var first:boolean; n,nf,find:integer; s1,s2:string; begin first:=false; result:=''; find:=0; nf:=1; for n := 1 to length(FromStr) do begin //Поиск фрагмента строки-------------------------------------------- //Поиск фрагмента строки без учета регистра [rfIgnoreCase] if (flag=[rfIgnoreCase]) or (flag=[rfReplaceAll,rfIgnoreCase]) then begin if (find+1)>length(find1) then find:=0; s1:=FromStr[n]; s2:=find1[find+1]; if AnsiLowerCase(s1)=AnsiLowerCase(s2) then begin find:=find+1; end else find:=0; end //-------------------------------------------------------- //Поиск фрагмента строки с учетом регистра [] else begin if (find+1)>length(find1) then find:=0; s1:=FromStr[n]; s2:=find1[find+1]; if s1=s2 then begin find:=find+1; end else find:=0; end; //------------------------------------------- //------------------------------------------------------------------ //Замена найденого фрагмента if find=length(find1) then begin first:=true; result:=result+copy(FromStr,nf,n-find-length(result))+replace1; nf:=n+1; end; //Если не стоит флаг заменить все [rfReplaceAll] выходим из цикла поскольку 1 замена уже сделана if (first=true) and ((flag=[]) or (flag=[rfIgnoreCase])) then begin if nf