SSIS 运行 字符串作为表达式

SSIS Run string as Expression

我已经用相应的值替换了公式,最后得到了一大列:

8/4
8+4
9*84
48/74
(8+5)/7
(4*150,5)/(8,05/4,08)

我需要将这些字符串 (WSTR) 作为正则表达式处理,以一个数值结尾。

最初这是在 VBA 中使用 eval 函数完成的。

---自回答以来编辑:

不得不承认我总是避免使用脚本组件,因为我从来没有让它工作过。

我现在试了,用你的 link 得到了这个代码:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{

    Row.OutM01 = Evaluate(Row.M01);

}
static double Evaluate(string expression)
{
    var loDataTable = new DataTable();
    var loDataColumn = new DataColumn("Eval", typeof(double), expression);
    loDataTable.Columns.Add(loDataColumn);
    loDataTable.Rows.Add(0);
    return (double)(loDataTable.Rows[0]["Eval"]);
}

然而,指定的转换无效或语法错误是我唯一遇到的问题。

在脚本组件中使用 C#,您可以通过多种不同的方式评估字符串:Evaluating string "3*(4+2)" yield int 18

编辑: 使用上述 link 中不需要外部 framework/library:

的解决方案之一

在您的 ScriptComponent 中,将 Input0_ProcessInputRow(Input0Buffer Row) 方法替换为:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
     Row.Formula = Evaluate(Row.Formula).ToString();
}

static double Evaluate(string expression)
{
    var loDataTable = new DataTable();
    var loDataColumn = new DataColumn("Eval", typeof(double), expression);
    loDataTable.Columns.Add(loDataColumn);
    loDataTable.Rows.Add(0);
    return (double)(loDataTable.Rows[0]["Eval"]);
}

这假设您的输入列中包含表达式,称为 "Formula",并且您已将其定义为可以写入脚本组件的 InputColumn:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{

    //Row.M01 = Evaluate(Row.INM01);
    if (Row.INM01 == null)
    {
        //Row.M01 = null;
    }
    else
    {
        string s = Row.INM01;
        s = s.Replace(",", ".");
        Row.M01 = Evaluate(s);

    }

}
static double Evaluate(string expression)
{
    DataTable MyTable = new DataTable();
    DataColumn MyColumn = new DataColumn();
    MyColumn.ColumnName = "MyColumn";
    MyColumn.Expression = expression;
    MyColumn.DataType = typeof(double);
    MyTable.Columns.Add(MyColumn);
    DataRow MyRow = MyTable.NewRow();
    MyTable.Rows.Add(MyRow);
    return (double)(MyTable.Rows[0]["MyColumn"]);
}

原来我不得不用点替换逗号。