EOL として LF を含むテキスト ファイルを受信するという問題が発生しました。EOL として CRLF を含むファイルを送信することがあります。SSISでどちらかをEOLとして使用する方法について、誰か良いアイデアはありますか?
メモ帳++を使用して必要なものに変更するのは非常に簡単な変換操作ですが、手動で自動にしたいです。
ありがとう、
編集。データフローの前にSwiss File Knifeを使用して修正しました(完全ではありません) 。
EOL として LF を含むテキスト ファイルを受信するという問題が発生しました。EOL として CRLF を含むファイルを送信することがあります。SSISでどちらかをEOLとして使用する方法について、誰か良いアイデアはありますか?
メモ帳++を使用して必要なものに変更するのは非常に簡単な変換操作ですが、手動で自動にしたいです。
ありがとう、
編集。データフローの前にSwiss File Knifeを使用して修正しました(完全ではありません) 。
行末記号が常にどちらか一方である場合は、2 つのファイル接続マネージャーを設定することをお勧めします。1 つは "CRLF" 行区切り記号で、もう 1 つは "LF" 行区切り記号で。
次に、ブール値のパッケージ変数 (@IsCrLf など) を作成し、これをパッケージにスコープします。SSIS パッケージの最初のステップをスクリプト タスクにし、ファイル ストリームを読み取り、(ストリームで見つけたものに基づいて) 行末記号が何かを見つけようとします。それに応じて変数の値を設定します。
次に、制御フローのスクリプト タスクの後に、2 つの個別のデータ フロー (ファイル接続マネージャーごとに 1 つ) を作成し、コネクタで [式と制約] に設定された優先順位制約を使用して、使用するデータ フローを指定します。 @IsCrLf 変数の値。
以下の推奨される制御フローの例。
CRLF を LF に変更するために、ファイル ソースの後に REPLACE 操作を含む派生列はどうですか?
スイス ファイル ナイフに対する OP の投票に賛成です。
それを統合するには、プロセス実行タスクを追加する必要がありました。
ただし、For-Each-File ループを実行するパッケージがたくさんあるので、BIML が必要でした。これは次の魂に役立つかもしれません。
<ExecuteProcess Name="(EXE) Convert crlf for <#= tableName #>"
Executable="<#= myExeFolder #>sfk.exe">
<Expressions>
<Expression PropertyName="Arguments">
"crlf-to-lf " + @[User::sFullFilePath]
</Expression>
</Expressions>
</ExecuteProcess>