2012-05-04 3 views
0

このシナリオでは、SSISはそれに戻って平坦になります。私のフラットファイルでフラットファイルで奇妙なレコードを処理するには?

、我々はこの

"1","2","STATUSCHANGED","A","02-MAY-12 21:52:34","","Re","Initial review","" 

そして、このようないくつかのように通常見レコードを持っています。 (複数行にレコードスプレッド)

"1","2","SALESNOTIFICATIONRESPOND","Ac","02-MAY-12 21:55:19","From: W, J 
Sent: Wednesday, May 08, 2012 2:00 PM 
To: XXXX, A; Acost 
Subject: RE: Notification Id 1219 - Qu ID XXXXXX 
I got this from earlier today. Our team is reviewing the request. 



Thanks, 

Hi, 

This account belongs to D please approve/deny. 

Thanks! 

Claud","","","Reassign" 

だから、いくつかのラインに広がっているそのフィールド内では、私はすべての{CR} {LFを取る必要があることを私に示して素晴らしいですNOTEPAD +でファイルを見ます}を入力します。

このファイルの行区切り文字はLFで、テキスト修飾子は "です。

私は200ファイルのコレクションで行う必要があるので、2つの事は?

  1. ファイル内の{CR} {LF}をすべて削除しますか?
  2. 埋め込まれた「実際のフィールドにある」をテキスト修飾子として削除しますか?

Windows、DOS、またはVBAでこのように多数のファイルを処理する方法はありますか?

答えて

1

Powershellは{CR} {LF}のためにこれを行いますが、以前はpowershellを使用したことがない人なら、しばらく時間がかかります。

フィールドの真ん中に登場する「修飾子は本当の混乱で、あなたはこれをクリーンアップするためのルールを開発することができるかもしれませんが、あなたが成功する保証はありません。

1

を適切な行ターミネータだけである場合LFであり、すべての行がLFによって適切に終了されていることが確かであれば、{CR} {LF}はすべて削除できますが、実際には必要はありません。{CR} {LF}

はい、実際のフィールド内からテキスト修飾子で囲まれている場合は、間違いなく任意のテキスト修飾子を削除するか(またはエスケープする必要があります)、実際のフィールド内から削除する必要があります。原因混乱。

個人的には、pythonスクリプトを書いてSSISにデータを送る前にデータを前処理しておくか、またはスクリプトを使ってSQLにデータをインポートしてください。

3

このようなデータの場合、私はスクリプトコンポーネントを使用して解析を実行することをお勧めします。私はblog post describing one approachと書いた。このことができます

希望、 アンディ私はアンディに同意

0

。私は同様の問題を抱えていて、私はスクリプトコンポーネントタスクでそれを処理しました。 あなたのコードはこのような何か(doesntのCR LFの問題を扱う)

Imports System 
Imports System.Data 
Imports System.Math 
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper 
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper 

<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _ 
<CLSCompliant(False)> _ 
Public Class ScriptMain 
    Inherits UserComponent 

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 
     Dim strRow As String 
     Dim strColSeperator As String 
     Dim rowValues As String() 
     strRow = Row.Line.ToString() 
     If strRow.Contains(",") Then 
      strColSeperator = (",") 
     ElseIf strRow.Contains(";") Then 
      strColSeperator = ";" 
     End If 

     rowValues = Row.Line.Split(CChar(strColSeperator)) 
     If (rowValues.Length > 1) Then 
      Row.Code = rowValues.GetValue(0).ToString() 
      Row.Description = rowValues.GetValue(1).ToString() 
      Row.Blank = rowValues.GetValue(2).ToString() 
      Row.Weight = rowValues.GetValue(3).ToString() 
      Row.Scan = rowValues.GetValue(4).ToString() 
     End If 
    End Sub 

End Class 

を見ることができるステップのチュートリアルバイステップはAndy Mitchell's post

でご利用いただけます
関連する問題