リモートFTPサイトから複数のCSVファイルをダウンロードする必要があります。SSISを利用しているのは、SSISがサイトで利用できる唯一のツールだからです。すべてのファイルをダウンロードするFTPスクリプトと、すべてのファイルをマージできるforeachループがあります。
データ内のコンマがフィールドを分割しないように、ファイルをTAB区切り形式に変換したいと思います(または、誰かが別の解決策を持っている場合は、私は喜んで聞きます)。ファイルを変換するVBスクリプトがありますが、ActiveXスクリプトタスクやスクリプトタスクなどのタスクを利用して、SSIS内でスクリプトを実行したいと思います。これらのタスクのいずれかを使用するようにスクリプトを挿入/変換するにはどうすればよいですか?以下は、ファイルを変換するために使用しているコードです。
Dim objFSO, objFile, objFileTSV
Dim strLine, strNewLine, strNewText
Dim FileNameLength, LineLength, NewFileName, Linepos, Quote, QuoteCount, TotalFilesConverted
Set objFSO = CreateObject("scripting.filesystemobject")
strCurPath = objFSO.GetAbsolutePathName(".")
TotalFilesConverted = 0
For Each objFile In objFSO.getfolder(strCurPath).Files
If UCase(Right(objFile.Name, 4)) = ".CSV" Then
FileNameLength = Len(objFile.Name)-4
NewFileName = Left(objFile.Name,FileNameLength) & ".tsv"
Set objFile = objFSO.OpenTextFile(objFile, 1)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
LineLength = Len(strLine)
Linepos =1
strNewLine =""
Quote = False
QuoteCount = 0
Do While Linepos <= LineLength
If mid(strLine, Linepos, 1) = "," and Not Quote Then
strNewLine = strNewLine + vbTab
Quote = False
Elseif mid(strLine, Linepos, 1) = Chr(34) Then
QuoteCount = QuoteCount +1
If QuoteCount =2 and Linepos <> LineLength Then
If mid(strLine, Linepos, 2) = Chr(34) & Chr(34) Then
strNewLine = strNewLine + Chr(34)
Linepos = Linepos +1
Quote = True
QuoteCount = 1
Else
Quote = False
QuoteCount = 0
End If
Else
Quote = True
End If
Else
strNewLine = strNewLine + Mid(strLine, Linepos, 1)
End If
Linepos = Linepos +1
Loop
strNewText = strNewText & strNewLine & vbCrLF
Loop
objFile.Close
Set objFileTSV = objFSO.CreateTextFile(NewFileName)
objFileTSV.WriteLine strNewText
TotalFilesConverted = TotalFilesConverted +1
strNewText = ""
objFileTSV.Close
End If
Next
MsgBox CStr(TotalFilesConverted) + " Files Converted from CSV to TSV."