You've already forked lazarus-ccr
fpspreadsheet: Remove rpn calculation support for the Excel functions PROPER and SUBSTITUTE - there are no adequate function available in Lazarus.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3259 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -112,10 +112,8 @@ function fpsCODE (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
function fpsLEFT (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
function fpsLOWER (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
function fpsMID (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
function fpsPROPER (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
function fpsREPLACE (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
function fpsRIGHT (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
function fpsSUBSTITUTE (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
function fpsTRIM (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
function fpsUPPER (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
|
||||
@ -1158,15 +1156,6 @@ begin
|
||||
Result := CreateString(UTF8Copy(sdata[0], Round(fData[0]), Round(fdata[1])));
|
||||
end;
|
||||
|
||||
function fpsPROPER(Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
// PROPER( text )
|
||||
var
|
||||
data: TStrArray;
|
||||
begin
|
||||
if PopStringValues(Args, 1, data, Result) then
|
||||
Result := CreateString(UTF8ProperCase(data[0]));
|
||||
end;
|
||||
|
||||
function fpsREPLACE(Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
// REPLACE( old_text, start, number_of_chars, new_text )
|
||||
var
|
||||
@ -1232,30 +1221,6 @@ begin
|
||||
Result := CreateString(UTF8RightStr(s, count));
|
||||
end;
|
||||
|
||||
function fpsSUBSTITUTE(Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
// SUBSTITUTE( text, old_text, new_text, [nth_appearance] )
|
||||
var
|
||||
data: TStrArray;
|
||||
arg_n: TsArgument;
|
||||
n: Integer;
|
||||
begin
|
||||
n := -1;
|
||||
if NumArgs = 4 then begin
|
||||
arg_n := Args.Pop;
|
||||
if arg_n.ArgumentType <> atNumber then begin
|
||||
Result := CreateError(errWrongType);
|
||||
exit;
|
||||
end;
|
||||
n := round(arg_n.Numbervalue);
|
||||
end;
|
||||
if PopStringValues(Args, 3, data, Result) then begin
|
||||
if n = -1 then
|
||||
Result := CreateString(UTF8StringReplace(data[0], data[1], data[2], [rfReplaceall]))
|
||||
else
|
||||
raise Exception.Create('not implemented');
|
||||
end;
|
||||
end;
|
||||
|
||||
function fpsTRIM(Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||
// TRIM( text )
|
||||
var
|
||||
|
@ -1207,10 +1207,10 @@ const
|
||||
(Symbol:'LEFT'; MinParams:1; MaxParams:2; Func:fpsLEFT), // fekLEFT
|
||||
(Symbol:'LOWER'; MinParams:1; MaxParams:1; Func:fpsLOWER), // fekLOWER
|
||||
(Symbol:'MID'; MinParams:3; MaxParams:3; Func:fpsMID), // fekMID
|
||||
(Symbol:'PROPER'; MinParams:1; MaxParams:1; Func:fpsPROPER), // fekPROPER
|
||||
(Symbol:'PROPER'; MinParams:1; MaxParams:1; Func:nil), // fekPROPER
|
||||
(Symbol:'REPLACE'; MinParams:4; MaxParams:4; Func:fpsREPLACE), // fekREPLACE
|
||||
(Symbol:'RIGHT'; MinParams:1; MaxParams:2; Func:fpsRIGHT), // fekRIGHT
|
||||
(Symbol:'SUBSTITUTE';MinParams:3; MaxParams:4; Func:fpsSUBSTITUTE), // fekSUBSTITUTE
|
||||
(Symbol:'SUBSTITUTE';MinParams:3; MaxParams:4; Func:nil), // fekSUBSTITUTE
|
||||
(Symbol:'TRIM'; MinParams:1; MaxParams:1; Func:fpsTRIM), // fekTRIM
|
||||
(Symbol:'UPPER'; MinParams:1; MaxParams:1; Func:fpsUPPER), // fekUPPER
|
||||
{ lookup/reference }
|
||||
|
@ -1184,42 +1184,6 @@
|
||||
SetLength(sollValues, Row+1);
|
||||
sollValues[Row] := CreateString('d');
|
||||
|
||||
// SUBSTITUTE
|
||||
inc(Row);
|
||||
MyWorksheet.WriteUTF8Text(Row, 0, '=SUBSTITUTE("lazarus", "s", "s.exe")');
|
||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||
RPNString('lazarus',
|
||||
RPNString('s',
|
||||
RPNString('s.exe',
|
||||
RPNFunc(fekSUBSTITUTE, 3, nil))))));
|
||||
SetLength(sollValues, Row+1);
|
||||
sollValues[Row] := CreateString('lazarus.exe');
|
||||
|
||||
// SUBSTITUTE
|
||||
inc(Row);
|
||||
MyWorksheet.WriteUTF8Text(Row, 0, '=SUBSTITUTE("lAzArus", "A", "a")');
|
||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||
RPNString('lAzArus',
|
||||
RPNString('A',
|
||||
RPNString('a',
|
||||
RPNFunc(fekSUBSTITUTE, 3, nil))))));
|
||||
SetLength(sollValues, Row+1);
|
||||
sollValues[Row] := CreateString('lazarus');
|
||||
|
||||
// SUBSTITUTE / utf8
|
||||
inc(Row);
|
||||
MyWorksheet.WriteUTF8Text(Row, 0, '=SUBSTITUTE("lÄzÄrus", "Ä", "a")');
|
||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||
RPNString('lÄzÄrus',
|
||||
RPNString('Ä',
|
||||
RPNString('a',
|
||||
RPNFunc(fekSUBSTITUTE, 3, nil))))));
|
||||
SetLength(sollValues, Row+1);
|
||||
sollValues[Row] := CreateString('lazarus');
|
||||
|
||||
// SUBSTITUTE / 4 parameters
|
||||
// to do...
|
||||
|
||||
// Trim
|
||||
inc(Row);
|
||||
MyWorksheet.WriteUTF8Text(Row, 0, '=TRIM(" Hallo word ")');
|
||||
|
Reference in New Issue
Block a user