sábado, 23 de junio de 2012

Descargar una archivo ZIP de la web y procesarlo en memoria


Enunciado

Usando Visual Basic .NET, descargar un archivo comprimido desde un sitio web, descomprimirlo e importar el contenido, importando sus líneas en una base de datos. Todo ello sin guardar en disco una copia, esto es trabajando en memoria.

Solución

Se utiliza la librería dotnetzip   y la clase webclient de .net Framework

Imports System.Web, System.IO, System.Net, Ionic.Zip, Microsoft.AnalysisServices

Module Module1
    Sub ejemplo()
        Dim cliente As New WebClient
        Dim datos As Byte()
        datos = cliente.DownloadData(My.Settings.CaminoZIP)
        Dim cola = New MemoryStream(datos)
        Dim comprimido = ZipFile.Read(cola)
        Dim Entrada = comprimido.Entries(0)
        Dim colaMemoria As New MemoryStream
        Entrada.Extract(colaMemoria)
        colaMemoria.Position = 0
        Dim lector As New StreamReader(colaMemoria)
        lector.ReadLine()
        Do While Not lector.EndOfStream
            Dim lineaDatos = LeeLineaGas(lector.ReadLine, Today)
            If lineaDatos IsNot Nothing Then 
                                    bd.ImportacionGas.InsertOnSubmit(lineaDatos)
        Loop
    End Sub
end module

Aclaración

Si a alguien le intriga por qué etiqueto con SSAS,... porque los archivos descargados alimentan maravillosamente bases de datos SQL Server Analysis Services. Por ejemplo gracias a este código controlo la evolución precios y orígenes de las importaciones de gas españolas. Otra cosa es encontrar las fuentes que tiene su miga.

No hay comentarios: