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

Hosted by uCoz