2008-12-24 62 views
2

我需要使用MS SSIS將平面文件轉換爲數據庫。我需要一種方法來查看特定文件夾以獲取(僅)平面文件,文件名格式爲「FileName-CCYYMMDD.txt」。如何在SSIS中以字符串形式檢測文件名?

請幫我,如果有辦法從文件夾中添加一個文件 或 獲取格式爲「文件名,CCYYMMDD.txt」哪裏是CCYYMMDD的文件名是當前日期或可能的currentdate -1根據要求。

任何代碼示例或截圖將不勝感激!

回答

3

動態獲取的連接,你需要使用表達對平面文件

實例的ConnectionString屬性,讓「d:\ CC080226.txt」,你可以用下面的表達。

「d:\ CC」
+ RIGHT((DT_WSTR,4)YEAR(GETDATE()),2) +(DT_WSTR,2)月(GETDATE()) +(DT_WSTR,2)天(GETDATE()) +「.TXT」

0

對不起,我很着急,這裏是腳本中的快照,希望它有幫助。

此軟件包正在掃描符合您規格的文件的文件夾,然後將控件傳遞給數據流。

alt text http://img395.imageshack.us/img395/8531/dynafilecontrolflowms9.jpg

控制流,http://img395.imageshack.us/img395/8531/dynafilecontrolflowms9.jpg

alt text http://img104.imageshack.us/img104/2010/dynafileforeachij5.jpg

每個循環性能,http://img104.imageshack.us/img104/2010/dynafileforeachij5.jpg

alt text http://img164.imageshack.us/img164/7614/dynafilefilesystemyj1.jpg

文件系統屬性,http://img164.imageshack.us/img164/7614/dynafilefilesystemyj1.jpg

Imports System 
Imports System.Data 
Imports System.Math 
Imports Microsoft.SqlServer.Dts.Runtime 
Imports System.IO 

Public Class ScriptMain 

    Public Sub Main() 
     Dim Ext As String = ".txt" 
     Dim Path As String = ".\" 'must get from package variable to be more dynamic 
     Dim FileNames() As String = Directory.GetFiles(Path, "CC*" + Ext, SearchOption.TopDirectoryOnly) 
     Dim ValidFileNames As New Collection 
     For Each FileName As String In FileNames 
      Dim FileDate As String = FileName.Substring(Len(Path) + 2) 'first 2 letter is already "CC" 
      If Not IsYmd(FileDate.Substring(0, Len(FileDate) - Len(Ext))) Then Continue For 
      ValidFileNames.Add(FileName) 
     Next 
     Dts.Variables("FileNames").Value = ValidFileNames 
     Dts.TaskResult = Dts.Results.Success 
    End Sub 


    Private Function IsYmd(ByVal Test As String) As Boolean 
     If Len(Test) <> 6 Then Return False 
     Dim Year As String = Left(Test, 2) 
     Try 
      If CStr(2000 + CInt(Year)) <> "20" + Year Then Return False 
     Catch ex As Exception 
      Return False 
     End Try 
     Dim Month As String = Mid(Test, 3, 2) 
     Try 
      If CInt(Month) < 1 Then Return False 
      If CInt(Month) > 12 Then Return False 
     Catch ex As Exception 
      Return False 
     End Try 
     Dim Day As String = Right(Test, 2) 
     Dim FirstOfMonth As String = "20" + Year + "/" + Month + "/01" 
     Dim EndOfMonth As Integer = DateAndTime.Day(DateAndTime.DateAdd(DateInterval.Day, -1, _ 
      DateAndTime.DateAdd(DateInterval.Month, 1, CDate(FirstOfMonth)))) 
     Try 
      If CInt(Day) < 1 Then Return False 
      If CInt(Day) > EndOfMonth Then Return False 
     Catch ex As Exception 
      Return False 
     End Try 
     Return True 
    End Function 

End Class 
1

在數據流中,右鍵單擊平面文件源>顯示高級編輯器>組件屬性。在自定義屬性下,爲FileNameColumnName屬性指定一個名稱。這會將文件路徑和名稱添加到輸出列集合中。

相關問題