Cómo crear un archivo de texto delimitado con los datos existentes en un DataSet
Por Enrique Martínez Montejo
Última revisión: 25/06/2006
 

Puede ser que nos interese crear un archivo de texto delimitado, con los datos existentes actualmente en un objeto DataSet, y asimismo, utilizar un carácter delimitador en concreto, como por ejemplo, que las columnas se encuentren separadas por comas, o por cualquier otro carácter.

El procedimiento seguro que muestro a continuación, crea un archivo de texto en la ruta especificada, con los datos existentes actualmente en un objeto DataTable incluido en el objeto DataSet que se pase al procedimiento. Asimismo, opcionalmente podemos elegir el carácter que delimitará a los campos (que por defecto será el punto y coma), así como si los campos alfanuméricos se deben de encerrar o no entre comillas dobles.

Private Sub CreateTextDelimiterFile(ByVal fileName As String, _
                                    ByVal ds As DataSet, _
                                    ByVal dataTableName As String, _
                                    Optional ByVal separatorChar As Char = ";"c, _
                                    Optional ByVal textDelimiter As Boolean = True)

    '*******************************************************************
    ' Nombre:        CreateTextDelimiterFile
    '                por Enrique Martínez Montejo - 18/05/2006
    '
    ' Versión:       1.0
    '
    ' Finalidad:     Crear un archivo de texto delimitado con el contenido
    '                de un objeto DataTable.
    '
    ' Entradas:
    '     fileName:  String. Ruta y nombre del archivo de texto.
    '
    '     ds:        DataSet. Un objeto DataSet válido.
    '
    '     dataTableName: String. El nombre de un objeto DataTable
    '                    incluido en el objeto DataSet
    '
    '     separatorChar: Char. El carácter delimitador de los campos. Por
    '                    defecto se utilizará el punto y coma.
    '
    '     textDelimiter: Boolean. Indica si los campos alfanuméricos deben
    '                    aparecer entre comillas dobles.
    '
    '*******************************************************************

    ' Si no se ha especificado un nombre de archivo,
    ' o el objeto DataSet no es válido, provocamos
    ' una excepción de argumentos no válidos.
    '

    If ((fileName.Length = 0) Or (dataTableName.Length = 0) Or (ds Is Nothing)) Then
        Throw New System.ArgumentException("Argumentos no válidos.")
    End If

    ' Si el archivo existe, solicitamos la confirmación
    ' para sobreescribirlo.
    '

    If (IO.File.Exists(fileName)) Then
        If (MessageBox.Show("¿Desea sobreescribir el archivo " & fileName & "?", _
                        "Crear archivo de texto", _
                        MessageBoxButtons.YesNo, _
                        MessageBoxIcon.Information) = Windows.Forms.DialogResult.No) Then

            ' Abandonamos el procedimiento
            Return
        End If
    End If

    Dim sw As System.IO.StreamWriter

    Try
        Dim dc As DataColumn
        Dim dr As DataRow
        Dim col As Integer
        Dim value As String = ""

        ' Creamos el archivo de texto
        '

        sw = New System.IO.StreamWriter(fileName)

        ' Recorremos todas las filas del objeto DataTable
        ' incluido en el conjunto de datos.
        '

        For Each dr In ds.Tables(dataTableName).Rows

            For Each dc In ds.Tables(dataTableName).Columns
                If (dc.DataType Is System.Type.GetType("System.String")) And _
                   (textDelimiter = True) Then

                    ' Incluimos el dato alfanumérico entre el caracter
                    ' delimitador de texto especificado.
                    '

                    value &= """" & dr.Item(col).ToString & """" & separatorChar

                Else

                    ' No se incluye caracter delimitador de texto alguno
                    '

                    value &= dr.Item(col).ToString & separatorChar

                End If

                ' Siguiente columna
                col += 1

            Next

            ' Al escribir los datos en el archivo, elimino el
            ' último carácter delimitador de la fila.
            '

            sw.WriteLine(value.Remove(value.Length - 1, 1))
            value = ""
            col = 0

        Next ' Siguiente fila

        ' Nos aseguramos de cerrar el archivo
        '

        sw.Close()

        Catch ex As Exception
            ' Devolvemos la excepción al procedimiento llamador
            Throw

        Finally
            sw = Nothing

    End Try

End Sub

 

Cómo crear un archivo de texto delimitado con los datos existentes en un DataSet

Si deseamos crear un archivo de texto separado por comas, con los datos de un objeto DataTable llamado Clientes, y que los campos alfanuméricos se encuentren encerrados entre comillas dobles (que es la opción por defecto), llamaríamos al procedimiento de la siguiente manera:

Try
    CreateTextDelimiterFile( _
            "C:\Mis documentos\Archivo.txt", _
            objetoDataSet, _
            "Clientes", _
            ","c)

Catch ex As Exception
    MessageBox.Show(ex.Message)

End Try

 

Otros enlaces de interés:

Trabajar con los datos existentes en un archivo de texto

Cómo crear un archivo XML con los datos de un objeto DataSet

Cómo leer un archivo de texto delimitado por comas

Indice de Ejemplos de ADO .NET


Enrique Martínez Montejo - 2006

NOTA: La información contenida en este artículo, así como el código fuente incluido en el mismo, se proporciona COMO ESTÁ, sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo explicado, recomendado o sugerido en el presente artículo.

NOTE: The information contained in this article and source code included therein, is provided AS IS without warranty of any kind, and confers no rights. You assume any risk to implement, use or run it explained, recommended or suggested in this article.