2015-04-17 47 views
0

我已經由相應的值替換公式,與該大柱結束了:SSIS運行字符串作爲表達

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

我需要處理這些字符串(WSTR)爲正則表達式,與結束了一個數字值。

最初這是在VBA中用eval函數完成的。

---編輯,因爲答案:

不得不承認我總是避免腳本組件,因爲我從來沒有得到它的工作。

我現在試着與你的鏈接一到這個代碼:

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"]); 
} 

然而,指定的轉換是無效或語法錯誤是我這輩子唯一得到的。

+0

如果OutM01列是字符串數據類型,則需要使用將Evaluate()函數的輸出轉換爲字符串: Row.OutM01 = Evaluate(Row.M01).ToString(); –

回答

0

使用C#的腳本組件,您可以評估一個字符串許多不同的方式:Evaluating string "3*(4+2)" yield int 18

編輯:利用從上述鏈接的解決方案之一不需要外部框架/庫 :

在你ScriptComponent,請用Input0_ProcessInputRow(Input0Buffer行)方法:

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"]); 
} 

這是假定在它表達你的輸入列被稱爲「公式」,你有DEFI定義它可以在你的腳本組件寫入到InputColumn:

InputColumn setup

+0

我試圖在腳本組件中寫入它沒有成功,真的沒辦法使用SSIS工具箱中的另一個工具來實現這個功能嗎?見第一篇文章 –

0
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"]); 
} 

原來我不得不更換點的逗號。