0

应用 unpivot 过程后,我有一个包含空格和其他字符(如“-”)的金额列。我想将那些非数字值转换为零。我使用替换程序,但它一次只转换一个。另外,我尝试使用以下脚本

/**

Public Overrides Sub Input()_ProcessInputRows(ByVal Row As Input()Buffer)
     If Row.ColumnName_IsNull = False Or Row.ColumnName = "" Then 
           Dim pattern As String = String.Empty
           Dim r As Regex = Nothing
           pattern = "[^0-9]"
           r = New Regex(pattern, RegexOptions.Compiled)
           Row.ColumnName = Regex.Replace(Row.ColumnName, pattern, "") 
      End If
End Sub  

**/

但我遇到了错误。我对脚本不太了解,所以也许我放错了地方。底线是我需要转换那些非数字值。

预先感谢您的帮助。

4

1 回答 1

1

我通常将正则表达式视为将另一个问题引入现有问题的好方法。

我为模拟您的问题所做的是编写一个添加 5 行的 select 语句。2 个有效数字,其余为空字符串、带空格的字符串和带连字符的字符串。

在此处输入图像描述

然后我将它连接到一个脚本组件并将列设置为读/写

在此处输入图像描述

我使用的脚本如下。我验证那里有一个值,如果有,我尝试将该值转换为整数。如果失败,那么我将其分配为零。VB 不是我的强项,所以如果这可以更优雅地完成,请编辑我的脚本。

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
    ' Ensure we have data to work with
    If Not Row.ColumnName_IsNull Then
        ' Test whether it's a number or not
        ' TryCast doesn't work with value types so I'm going the lazy route
        Try
            ' Cast to an integer and then back to string because 
            ' my vb is weak
            Row.ColumnName = CStr(CType(Row.ColumnName, Integer))
        Catch ex As Exception
            Row.ColumnName = 0
        End Try

    End If

End Sub
于 2013-09-24T21:24:01.943 回答