2012-05-04 26 views
0

在這種情況下,SSIS落在它的後面。如何處理FLAT FILE中的奇怪記錄?

在我的平面文件,我們有正常的記錄看這樣

"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 }在該領域。

該文件的行分隔符是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中。

0

我與安迪同意。我有一個類似的問題,我用一個腳本組件任務照顧它。 你的代碼可能看起來是這樣的(犯規處理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