1

リモート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."
4

1 に答える 1

0

SSISスクリプトタスクオブジェクトではC#またはVB.NETのいずれかを選択できるため、CSVファイルの解析方法に関する多くのコードアイデアを追跡できます(たとえば、.NETでの区切りCSVの解析を参照)。

また、.NETのファイルシステムのループは非常に簡単に実行できます。

For Each dirItem As String In System.IO.Directory.EnumerateFileSystemEntries(DirPath)
    ' Insert code here ...
Next

お役に立てば幸いです。

于 2012-06-26T19:51:38.440 に答える