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 fpsLEFT (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||||
function fpsLOWER (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
function fpsLOWER (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||||
function fpsMID (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 fpsREPLACE (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||||
function fpsRIGHT (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 fpsTRIM (Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||||
function fpsUPPER (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])));
|
Result := CreateString(UTF8Copy(sdata[0], Round(fData[0]), Round(fdata[1])));
|
||||||
end;
|
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;
|
function fpsREPLACE(Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||||
// REPLACE( old_text, start, number_of_chars, new_text )
|
// REPLACE( old_text, start, number_of_chars, new_text )
|
||||||
var
|
var
|
||||||
@ -1232,30 +1221,6 @@ begin
|
|||||||
Result := CreateString(UTF8RightStr(s, count));
|
Result := CreateString(UTF8RightStr(s, count));
|
||||||
end;
|
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;
|
function fpsTRIM(Args: TsArgumentStack; NumArgs: Integer): TsArgument;
|
||||||
// TRIM( text )
|
// TRIM( text )
|
||||||
var
|
var
|
||||||
|
@ -1207,10 +1207,10 @@ const
|
|||||||
(Symbol:'LEFT'; MinParams:1; MaxParams:2; Func:fpsLEFT), // fekLEFT
|
(Symbol:'LEFT'; MinParams:1; MaxParams:2; Func:fpsLEFT), // fekLEFT
|
||||||
(Symbol:'LOWER'; MinParams:1; MaxParams:1; Func:fpsLOWER), // fekLOWER
|
(Symbol:'LOWER'; MinParams:1; MaxParams:1; Func:fpsLOWER), // fekLOWER
|
||||||
(Symbol:'MID'; MinParams:3; MaxParams:3; Func:fpsMID), // fekMID
|
(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:'REPLACE'; MinParams:4; MaxParams:4; Func:fpsREPLACE), // fekREPLACE
|
||||||
(Symbol:'RIGHT'; MinParams:1; MaxParams:2; Func:fpsRIGHT), // fekRIGHT
|
(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:'TRIM'; MinParams:1; MaxParams:1; Func:fpsTRIM), // fekTRIM
|
||||||
(Symbol:'UPPER'; MinParams:1; MaxParams:1; Func:fpsUPPER), // fekUPPER
|
(Symbol:'UPPER'; MinParams:1; MaxParams:1; Func:fpsUPPER), // fekUPPER
|
||||||
{ lookup/reference }
|
{ lookup/reference }
|
||||||
|
@ -1184,42 +1184,6 @@
|
|||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateString('d');
|
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
|
// Trim
|
||||||
inc(Row);
|
inc(Row);
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=TRIM(" Hallo word ")');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=TRIM(" Hallo word ")');
|
||||||
|
Reference in New Issue
Block a user