2

派生列に問題があります。基本的に、区切られたデータを含むフラット ファイル ソースがあります。

私の列の一部は通貨であり、データは奇妙な形式で保存されます (古いシステムではこのようにする傾向があります)。

とにかく、データは次のように保存されます: 00030.200, 0123.410,0002231.210

これらの文字列を通貨 DT_CY に変換する必要があります。すべての異なる数値型を使用して直接キャストを試みましたが、すべて失敗します (先頭または末尾のゼロが原因かどうかはわかりません)

だから私の質問は簡単です。先頭と末尾のゼロを削除するために派生列で使用できる式は何ですか? データは常に同じ長さではないため、左/右の部分文字列オプションを正確に実行できないことに注意してください。

何か助けはありますか?

送信

4

2 に答える 2

5

派生列を使用して、次のようにすることもできます。

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

基本的に、ゼロを空白に変換して Ltrim 関数を利用します。

私はこのソリューションをここに設立しました。

これがどのように進行するかの例を次に示します: (0040.300 を変換したいとします。この目的のために、数値を次のように表示できます: |0|0|4|0|.|3|0|0| Replace ステートメントはデータに影響します)

基本的に、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 に答える