AT — различия между версиями

Материал из Фабиус wiki
Перейти к: навигация, поиск
м
м
Строка 10: Строка 10:
  
 
   b1 := at( pref_from, xml_text )
 
   b1 := at( pref_from, xml_text )
 +
 +
= Полный текст функции =
 +
 +
{ TQREvAtFunction }
 +
 +
type
 +
  TQREvAtFunction = class(TQREvElementFunction)
 +
  public
 +
    function Calculate: TQREvResult; override;
 +
  end;
 +
 +
function TQREvAtFunction.Calculate: TQREvResult;
 +
var
 +
  OffSet: integer;
 +
begin
 +
  if (ArgList.Count >= 2) and
 +
    (Argument(0).Kind = ResString) and
 +
    (Argument(1).Kind = ResString) then
 +
  begin
 +
    Result.Kind := ResInt;
 +
    if (ArgList.Count > 2) then
 +
      OffSet := QrEvResultToInt(Argument(2))
 +
    else
 +
      OffSet := 1;
 +
    Result.IntResult := PosEx(Argument(0).StrResult, Argument(1).StrResult, OffSet);
 +
  end
 +
  else
 +
    Result := ErrorCreate(Format(SqrExpWrongArguments, ['AT']));
 +
end;

Версия 16:34, 10 июня 2016

at - это функция, написанная на Delphi в файле Qr_expr.pas

AT( <Exp>, <Exp> )

Позиция первого вхождения подстроки в символьную строку

At( 'что искать', 'где искать' )

Примеры

 b1 := at( pref_from, xml_text )

Полный текст функции

{ TQREvAtFunction }

type

 TQREvAtFunction = class(TQREvElementFunction)
 public
   function Calculate: TQREvResult; override;
 end;

function TQREvAtFunction.Calculate: TQREvResult; var

 OffSet: integer;

begin

 if (ArgList.Count >= 2) and
   (Argument(0).Kind = ResString) and
   (Argument(1).Kind = ResString) then
 begin
   Result.Kind := ResInt;
   if (ArgList.Count > 2) then
     OffSet := QrEvResultToInt(Argument(2))
   else
     OffSet := 1;
   Result.IntResult := PosEx(Argument(0).StrResult, Argument(1).StrResult, OffSet);
 end
 else
   Result := ErrorCreate(Format(SqrExpWrongArguments, ['AT']));

end;