Skip to content

Commit 0e5d40b

Browse files
author
linzhijun
committed
fix
1 parent 786cf3c commit 0e5d40b

File tree

2 files changed

+30
-26
lines changed

2 files changed

+30
-26
lines changed

csharp/ToolGood.Algorithm/Internals/Functions/FunctionBase.csharp.cs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -590,25 +590,25 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
590590
}
591591
}
592592

593-
internal class Function_INDEXOF : Function_N
593+
internal class Function_INDEXOF : Function_4
594594
{
595-
public Function_INDEXOF(FunctionBase[] funcs) : base(funcs)
595+
public Function_INDEXOF(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) : base(func1, func2, func3, func4)
596596
{
597597
}
598598

599599
public override Operand Calculate(AlgorithmEngine work)
600600
{
601-
var args1 = funcs[0].Calculate(work); if (args1.Type != OperandType.TEXT) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IndexOf", 1); if (args1.IsError) { return args1; } }
602-
var args2 = funcs[1].Calculate(work); if (args2.Type != OperandType.TEXT) { args2 = args2.ToText("Function '{0}' parameter {1} is error!", "IndexOf", 2); if (args2.IsError) { return args2; } }
601+
var args1 = func1.Calculate(work); if (args1.Type != OperandType.TEXT) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IndexOf", 1); if (args1.IsError) { return args1; } }
602+
var args2 = func2.Calculate(work); if (args2.Type != OperandType.TEXT) { args2 = args2.ToText("Function '{0}' parameter {1} is error!", "IndexOf", 2); if (args2.IsError) { return args2; } }
603603
var text = args1.TextValue;
604-
if (funcs.Length == 2) {
604+
if (func3 == null) {
605605
return Operand.Create(text.AsSpan().IndexOf(args2.TextValue) + work.ExcelIndex);
606606
}
607-
var args3 = funcs[2].Calculate(work); if (args3.Type != OperandType.NUMBER) { args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "IndexOf", 3); if (args3.IsError) { return args3; } }
608-
if (funcs.Length == 3) {
607+
var args3 = func3.Calculate(work); if (args3.Type != OperandType.NUMBER) { args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "IndexOf", 3); if (args3.IsError) { return args3; } }
608+
if (func4 == null) {
609609
return Operand.Create(text.AsSpan(args3.IntValue).IndexOf(args2.TextValue) + args3.IntValue + work.ExcelIndex);
610610
}
611-
var args4 = funcs[3].Calculate(work); if (args4.Type != OperandType.NUMBER) { args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "IndexOf", 4); if (args4.IsError) { return args4; } }
611+
var args4 = func4.Calculate(work); if (args4.Type != OperandType.NUMBER) { args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "IndexOf", 4); if (args4.IsError) { return args4; } }
612612
return Operand.Create(text.IndexOf(args2.TextValue, args3.IntValue, args4.IntValue) + work.ExcelIndex);
613613
}
614614
public override void ToString(StringBuilder stringBuilder, bool addBrackets)
@@ -617,25 +617,25 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
617617
}
618618
}
619619

620-
internal class Function_LASTINDEXOF : Function_N
620+
internal class Function_LASTINDEXOF : Function_4
621621
{
622-
public Function_LASTINDEXOF(FunctionBase[] funcs) : base(funcs)
622+
public Function_LASTINDEXOF(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) : base(func1, func2, func3, func4)
623623
{
624624
}
625625

626626
public override Operand Calculate(AlgorithmEngine work)
627627
{
628-
var args1 = funcs[0].Calculate(work); if (args1.Type != OperandType.TEXT) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "LastIndexOf", 1); if (args1.IsError) { return args1; } }
629-
var args2 = funcs[1].Calculate(work); if (args2.Type != OperandType.TEXT) { args2 = args2.ToText("Function '{0}' parameter {1} is error!", "LastIndexOf", 2); if (args2.IsError) { return args2; } }
628+
var args1 = func1.Calculate(work); if (args1.Type != OperandType.TEXT) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "LastIndexOf", 1); if (args1.IsError) { return args1; } }
629+
var args2 = func2.Calculate(work); if (args2.Type != OperandType.TEXT) { args2 = args2.ToText("Function '{0}' parameter {1} is error!", "LastIndexOf", 2); if (args2.IsError) { return args2; } }
630630
var text = args1.TextValue;
631-
if (funcs.Length == 2) {
631+
if (func3 == null) {
632632
return Operand.Create(text.AsSpan().LastIndexOf(args2.TextValue) + work.ExcelIndex);
633633
}
634-
var args3 = funcs[2].Calculate(work); if (args3.Type != OperandType.NUMBER) { args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LastIndexOf", 3); if (args3.IsError) { return args3; } }
635-
if (funcs.Length == 3) {
634+
var args3 = func3.Calculate(work); if (args3.Type != OperandType.NUMBER) { args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LastIndexOf", 3); if (args3.IsError) { return args3; } }
635+
if (func4 == null) {
636636
return Operand.Create(text.AsSpan(0, args3.IntValue).LastIndexOf(args2.TextValue) + work.ExcelIndex);
637637
}
638-
var args4 = funcs[3].Calculate(work); if (args4.Type != OperandType.NUMBER) { args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "LastIndexOf", 4); if (args4.IsError) { return args4; } }
638+
var args4 = func4.Calculate(work); if (args4.Type != OperandType.NUMBER) { args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "LastIndexOf", 4); if (args4.IsError) { return args4; } }
639639
return Operand.Create(text.LastIndexOf(args2.TextValue, args3.IntValue, args4.IntValue) + work.ExcelIndex);
640640
}
641641
public override void ToString(StringBuilder stringBuilder, bool addBrackets)

csharp/ToolGood.Algorithm/Internals/MathFunctionVisitor.cs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1773,21 +1773,25 @@ public FunctionBase VisitTRIMEND_fun(mathParser.TRIMEND_funContext context)
17731773
public FunctionBase VisitINDEXOF_fun(mathParser.INDEXOF_funContext context)
17741774
{
17751775
var exprs = context.expr();
1776-
FunctionBase[] args = new FunctionBase[exprs.Length];
1777-
for (int i = 0; i < exprs.Length; i++) {
1778-
args[i] = exprs[i].Accept(this);
1779-
}
1780-
return new Function_INDEXOF(args);
1776+
var args1 = exprs[0].Accept(this);
1777+
var args2 = exprs[1].Accept(this);
1778+
if (exprs.Length == 2) return new Function_INDEXOF(args1, args2, null, null);
1779+
var args3 = exprs[2].Accept(this);
1780+
if (exprs.Length == 3) return new Function_INDEXOF(args1, args2, args3, null);
1781+
var args4 = exprs[3].Accept(this);
1782+
return new Function_INDEXOF(args1, args2, args3, args4);
17811783
}
17821784

17831785
public FunctionBase VisitLASTINDEXOF_fun(mathParser.LASTINDEXOF_funContext context)
17841786
{
17851787
var exprs = context.expr();
1786-
FunctionBase[] args = new FunctionBase[exprs.Length];
1787-
for (int i = 0; i < exprs.Length; i++) {
1788-
args[i] = exprs[i].Accept(this);
1789-
}
1790-
return new Function_LASTINDEXOF(args);
1788+
var args1 = exprs[0].Accept(this);
1789+
var args2 = exprs[1].Accept(this);
1790+
if (exprs.Length == 2) return new Function_LASTINDEXOF(args1, args2, null, null);
1791+
var args3 = exprs[2].Accept(this);
1792+
if (exprs.Length == 3) return new Function_LASTINDEXOF(args1, args2, args3, null);
1793+
var args4 = exprs[3].Accept(this);
1794+
return new Function_LASTINDEXOF(args1, args2, args3, args4);
17911795
}
17921796

17931797
public FunctionBase VisitSPLIT_fun(mathParser.SPLIT_funContext context)

0 commit comments

Comments
 (0)