Как мне указать EOF в SSIS VBScript? - PullRequest
0 голосов
/ 29 января 2009

Каков синтаксис для чтения до конца файла в SSIS VBScript?

Dim readFile As FileInfo = New FileInfo(logHourlyName)
If readFile.Exists() Then
   Dim textStream As StreamReader = readFile.OpenText()
   Dim strLine As String
   Do While Not EOF    <--- what goes here?
       curLine = textStream.ReadLine()
   Loop
   textStream.Close()
End If

Edit: я на самом деле пытаюсь получить значение последней строки в файле. Так что чтение до тех пор, пока не EOF, не совсем то же самое, что чтение до конца файла. Но я столько вырезал, что у меня был плохой пример кода.

Ответы [ 2 ]

1 голос
/ 30 декабря 2009

Вот способ прочитать только последнюю строку, не просматривая весь файл. Он переходит в конец файла и начинает читать в обратном направлении, пока не достигнет другого символа LF, который указывает конец второй строки до последней, а затем просто прочитает эту строку.

В большом файле с миллионами строк это снижает стоимость чтения нескольких байтов.

Вы можете раскомментировать код Dts.Events.FireInformation, что происходит в вашем окне вывода.

    Dim i As Integer
    Dim CurrentByte As Integer
    Dim Trailer As String

    i = 1

    Using reader As StreamReader = New StreamReader("c:\temp\SourceFile.txt")
        Do While CurrentByte <> 10 'while we are not finding the next LF character
           reader.BaseStream.Seek((-1 * i) - 2, SeekOrigin.End) 'seeking backwards from the last position in the file minus the last CRLF
            'Dts.Events.FireInformation(0, "Now at position", reader.BaseStream.Position().ToString, "", 0, False)
            CurrentByte = reader.BaseStream.ReadByte 'read the next byte, this will advance pointer position
            'Dts.Events.FireInformation(0, "Current ASCII Code", CurrentByte & " Character:" & Chr(CurrentByte), "", 0, False)
            i = i + 1 'go to the next character                 
        Loop
        Trailer = reader.ReadLine 'we exited on the LF character, so we are at the beginning of trailer line
        Dts.Events.FireInformation(0, "   Trailer:", Trailer, "", 0, False)
    End Using
1 голос
/ 29 января 2009

С http://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx:

Dim readFile As FileInfo = New FileInfo(logHourlyName)
If readFile.Exists() Then
   Dim textStream As StreamReader = readFile.OpenText()
   Dim strLine As String
   Do
       curLine = textStream.ReadLine()
   Loop Until curLine Is Nothing
   textStream.Close()
End If

Если вам нужна последняя строка:

Dim readFile As FileInfo = New FileInfo(logHourlyName)
Dim lastLine As String
If readFile.Exists() Then
   Dim textStream As StreamReader = readFile.OpenText()
   Dim strLine As String
   Do
       curLine = textStream.ReadLine()
       If Not curLine Is Nothing Then lastLine = curLine
   Loop Until curLine Is Nothing
   textStream.Close()
End If
...