2

我有一个派生列的问题。基本上我有一个包含分隔数据的平面文件源。

我的一些列是货币,数据以一种奇怪的格式保存(旧系统倾向于这样做)。

无论如何,数据保存为:00030.200, 0123.410,0002231.210

我需要将这些字符串转换为 Currency DT_CY。我已经尝试使用所有不同的数字类型进行直接转换,但它们都失败了(不确定是前导零还是尾随零导致它)

所以我的问题很简单。我可以在派生列中使用什么表达式来删除前导零和尾随零。请注意,数据的长度并非始终相同,因此不能完全执行左/右子字符串选项。

有什么帮助吗?

发送

4

2 回答 2

5

你可以这样做,使用派生列:

Replace(Ltrim(Replace(dataToConvert, "0", " ")), " ", "0")

基本上,您将零转换为空格以利用 Ltrim 函数。

在这里建立了这个解决方案。

下面是它如何进行的示例:(假设我们要转换 0040.300。为此,我们可以将数字显示为:|0|0|4|0|。|3|0|0| 看看如何替换语句会影响我们的数据)

基本上,0040.300 的转换将以这种方式进行:

  • 内部替换:| | |4| |.|3| | | ('0' 变成空格)
  • 微调:|4| |.|3| | | (左边的空格被修剪)
  • 外部替换:|4|0|.|3|0|0| (空格变为“0”)

所以我们最终得到 40.300。

于 2013-05-13T14:33:41.303 回答
2

好的,所以我自己通过玩“脚本组件”并使用以下代码删除传入的所有属性的所有前导空格来找到答案:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    var rowProperties = Row.GetType().GetProperties();
    foreach (var rowColumn in rowProperties)
    {           

        if (rowColumn.PropertyType == typeof(System.String))
        {          
            var rowValue = rowColumn.GetValue(Row, null);    
            rowColumn.SetValue(Row, rowValue.ToString().TrimStart('0'), null);
        }
    }        
} 
于 2013-05-09T14:29:47.127 回答