1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
| Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.IO
Public Class ScriptMain
Public Sub Main()
Try
Dim InputFile As String
Dim OutputFile As String
Dim rundate As String
Dim writeFirstFields As Boolean
Dim writeFields As Boolean
Dim writeData As Boolean
Dim sr As StreamReader
Dim line As String
'gestion d'erreurs
Dim rowsProcessed As Integer
Dim emptyBytes(0) As Byte
'Gestion des fichiers
If Dts.Variables.Contains("InputFile") And Dts.Variables.Contains("OutputFile") Then
InputFile = Dts.Variables("InputFile").ToString
OutputFile = Dts.Variables("OutputFile").ToString
Else
Dts.TaskResult = Dts.Results.Failure
Throw New Exception("(" & DateTime.Now & ") " & "DTS Variables ""InputFile"" and ""OutputFile"" are not defined")
End If
If Not File.Exists(InputFile) Then Throw New Exception("(" & DateTime.Now & ") " & "The Input File doesn't exist")
If File.Exists(OutputFile) Then File.Delete(OutputFile)
'lecture / écriture vers le nouveau fichier
sr = New StreamReader(InputFile)
Using sw As streamwriter = New StreamWriter(OutputFile)
writeFirstFields = False
writeFields = False
writeData = False
rowsProcessed = 0
Do
line = sr.ReadLine()
rowsProcessed += 1
If line.Contains("START-OF-FIELDS") Then
Dts.Log("(" & DateTime.Now & ") " & "START-OF-FIELDS at row: " & rowsProcessed.ToString, 0, emptyBytes)
writeFields = True
writeFirstFields = True
line = sr.ReadLine()
ElseIf line.Contains("END-OF-FIELDS") Then
Dts.Log("(" & DateTime.Now & ") " & "END-OF-FIELDS at row: " & rowsProcessed.ToString, 0, emptyBytes)
writeFields = False
ElseIf line.Contains("START-OF-DATA") Then
Dts.Log("(" & DateTime.Now & ") " & "START-OF-DATA at row: " & rowsProcessed.ToString, 0, emptyBytes)
sw.Write(vbCrLf) 'on était au bout de la 1ère ligne (Fields) dans le OutputFile
writeData = True
line = sr.ReadLine()
ElseIf line.Contains("END-OF-DATA") Then
Dts.Log("(" & DateTime.Now & ") " & "END-OF-DATA at row: " & rowsProcessed.ToString, 0, emptyBytes)
writeData = False
ElseIf line.Contains("RUNDATE=") Then
'RUNDATE=20080715
rundate = Right(line, 8)
End If
'les 3 premiers champs n'apparaissent pas dans la liste des champs, on ajoute RunDate en plus
If writeFirstFields Then
sw.Write("Rundate|Ticker|Return Code|nbFields|")
writeFirstFields = False
End If
If writeFields Then sw.Write(line & "|")
If writeData Then sw.WriteLine(rundate & "|" & line)
Loop Until line.Contains("END-OF-DATA")
sr.Close()
sw.Close()
Dts.TaskResult = Dts.Results.Success
End Using
Catch ex As Exception
Dts.Log("(" & DateTime.Now & ") " & "Importation Script from Bloomberg Data Licence", ex.Message & ControlChars.CrLf & ex.StackTrace)
Dts.Events.FireError(0, "Importation Script from Bloomberg Data Licence", ex.Message & ControlChars.CrLf & ex.StackTrace, String.Empty, 0)
Dts.TaskResult = Dts.Results.Failure
Finally
Dts.Log("(" & DateTime.Now & ") " & "End at row: " & rowsProcessed.ToString)
sr.close()
sw.close()
End Try
End Sub
End Class |
Partager