0

フラット ファイル (txt) からデータを取得する SSIS パッケージがあります。フィールドの 1 つは符号なし整数である必要があり、それを SQL テーブルにロードする必要があります。「フラットファイル接続マネージャーエディター」で、フラットファイルの「フォーマット」を固定幅に設定しました(列の長さを持つスペックファイルのみの区切り文字はありません。私が話しているフィールドは4文字の長さでなければなりません(に従って)しかし、一部の値では、4 番目の文字に「}」記号が表示されます。たとえば、「010}」です。定義を信頼して、この値を符号なし整数にロードしようとしましたが、うまくいきませんでした。

誰もそのようなフォーマットを認識していますか? もしそうなら、どうすれば適切なデータ型にロードできますか?

よろしくお願いします。オレン。

4

2 に答える 2

0

私があなたの質問を正しく理解していれば。方法の 1 つは、「派生列変換」を使用することです。そこに新しい列を追加することを選択します。
フェッチしているデータが DT_WSTR データ型の場合、次の式を使用して「}」を「」で取り除くことができます。次に、ロードするフィールドに従って型キャストします。ここでは (DT_I4) を使用しています 次に、新しい列を宛先にマップします。

   (DT_I4) REPLACE(character_expression,searchstring,replacementstring)

それが役に立てば幸い。

于 2013-08-27T09:00:57.077 に答える
0

インポート時に問題が発生する可能性があることがいくつかあります。まず、元のファイルのエンコーディングを知る必要があります。

テキスト ファイルのエンコーディング/コードページを検出する方法

エンコーディングは、char の実際のサイズ (バイト単位) を決定し、さらに重要なことに、各文字がどのように格納されるかを決定します。ご覧のとおり、4 文字の Unicode 文字列は、エンコーディングに応じて 4 バイトから 16 バイトまで (複合文字がある場合はそれ以上) になる可能性があります。int は通常 4 バイト (DT_I 4 ) ですが、ssis は最大 32 バイト (と思います) を提供します。そのため、不明なバイト数を所定の unsigned int にロードしているときに、一部が切り捨てられて、ガベージ値になってしまう可能性があります。

エンコーディングがわからない、または見つからない場合は、UTF-8 であると想定しますが、それは実際には良い習慣ではありません。これについて少し説明します: http://en.wikipedia.org/wiki/UTF-8 また、さまざまなエンコーディング (UTF-8、UTF-16 ..) の Unicode 文字セットを見て、見てください。 「}」文字とそれに一致する値。なぜそれが表示されているのかについてのヒントが得られるかもしれません。

次に、フラット ファイル ソースがそのタイプのエンコーディングと一致する必要があります。Unicodeチェック ボックスをオン (またはオフ) にして、「コード ページ」を設定または選択します。次に、その列の値を unsigned int ではなく、(正しいエンコーディングの) 文字列に読み込みます。

最後に、正しい値があることがわかったら、「データ変換」を使用して、それを unsigned int などにキャストできます。

編集:「データ変換」は、その名前の通り、インポートされた値を変換します。元のファイルの書き方によっては、うまくいかない場合があります。「派生列」キャストは、実際の値を変更しない他のオプションになります。コンパイラーにそれらのビットを別の型 (unsigned int) として解釈するように指示するだけです。

于 2013-08-27T10:03:29.513 に答える