Wie gebe ich EOF in SSIS VBScript?
-
20-08-2019 - |
Frage
Was ist die Syntax für in SSIS VBScript bis zum Ende der Datei zu lesen?
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: Ich bin tatsächlich versucht, den Wert der letzten Zeile in der Datei zu erhalten. So lesen, bis nicht EOF ist nicht ganz die gleichen wie bis zum Ende der Datei zu lesen. Aber ich schneide so sehr, dass ich eine schlechten Beispiel-Code hatte.
Lösung
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
Wenn Sie wollen einfach nur die letzte Zeile:
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
Andere Tipps
Hier ist eine Möglichkeit, nur die letzte Zeile zu lesen, ohne durch die gesamte Datei Looping. Es geht zum Ende der Datei und starten Sie das Lesen nach hinten, bis es einen anderen LF-Zeichen trifft, die das Ende der zweiten bis letzten Zeile zeigt an, und dann lesen Sie einfach diese Zeile in.
Auf einer großen Datei mit Millionen von Zeilen, verringern diese die Kosten wenigen Bytes zu lesen.
Sie können Dts.Events.FireInformation Codes Kommentar-, was in Ihrem Ausgabefenster passiert.
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