2

現在、フィールドに '\0' 文字が含まれるデータベースに取り組んでいます。

たとえば、フィールド

Category CHAR(4)

値が '\0\0\0\0' (4 つのゼロ文字) の場合もあれば、' ' (4 つの空白文字) の場合もあります

スクリプト コンポーネントを使用して、この問題のあるすべてのフィールドを個別化したいと考えています。次のスクリプトを作成しましたが、C# が '\0\0\0\0' を空の文字列に変換するため、機能しません。

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    Type rowType = Row.GetType();

    foreach (IDTSInputColumn100 column in ComponentMetaData.InputCollection[0].InputColumnCollection)
    {
        PropertyInfo columnValue = rowType.GetProperty(column.Name.Replace("_", ""));
        Object obj = columnValue.GetValue(Row, null);
        if (obj is string)
        {
            string s = (string)obj;
            StringBuilder sb = new StringBuilder();
            foreach (char c in s)
            {
                if (c < ' ')
                {
                    sb.Append(' ');
                }
                else
                    sb.Append(c);
            }
            columnValue.SetValue(Row, sb.ToString(), null);
        }
    }
}

「\0」文字を個別化できるようにするために、フィールドを文字列ではなくバイト配列に変換することは可能ですか?

4

2 に答える 2

0

スクリプト コンポーネントでこれを行う必要がありますか? 派生列タスクを使用して、部分文字列を使用して各列の値を引き出すことはできませんか? Trim を使用してスペースを削除することもできます。

于 2010-11-22T16:25:08.007 に答える
0

char(4) を (データ変換コンポーネントを使用して) バイナリ表現に変換し、そこから個々の要素を操作することを検討してください。可能であれば、ソース クエリでキャストして、パイプラインに入る前に既にバイナリになるようにします。

于 2011-08-12T08:02:05.823 に答える