Extractor DBF - Ejercicio De Programacion C# Sharp

Este ejercicio consiste en crear un programa que muestre la lista de campos almacenados en un archivo DBF. El formato DBF es utilizado por el antiguo gestor de bases de datos dBase y aún es compatible como formato de exportación por muchas herramientas actuales, como Excel o Access.
Los archivos DBF están divididos en dos partes: un encabezado que almacena información sobre la estructura del archivo y una zona de datos. El encabezado está dividido en dos partes: la primera ocupa 32 bytes y contiene información general sobre el archivo, mientras que la segunda contiene información sobre cada campo y está formada por tantos bloques de 32 bytes como campos haya en la tabla.
Para mostrar la información de los campos del archivo DBF, el programa debe leer tanto la zona del encabezado general como la de cada campo, analizando los tamaños y posiciones descritas para extraer los nombres y tipos de cada uno.

 Categoría

Administración de Archivos

 Ejercicio

Extractor DBF

 Objectivo

Crear un programa que muestre la lista de los campos que hay almacenados en un fichero DBF.

El formato DBF es el usado por el antiguo gestor de bases de datos dBase, y soportado como formato de exportación por muchas herramientas actuales, como Excel o Access.

Los archivos DBF se dividen en dos partes: una cabecera que almacena información sobre la estructura del archivo y una zona de datos.

La zona de cabecera se separa de la zona de datos con el carácter CR (avance de carro, número 13 del código ASCII). A su vez la cabecera se divide en dos partes: la primera ocupa 32 bytes y contiene información general sobre el archivo, mientras que la segunda contiene información sobre cada campo y está formada por tantos bloques de 32 bytes como campos tenga la tabla.

La cabecera general del archivo es:

Posicion Tamaño (bytes) Descripcion

1 1 Nro. que identifica el producto con el fue creada la tabla
2 3 Fecha ultima actualizacion año/mes/dia
5 4 Nro.total de registros de la tabla (en orden inverso)
9 2 Longitud total de la cabecera incluido CR
11 2 Longitud del registro (incluye el caracter de marca de borrado)
13 2 Reservados
15 1 Flag de Transaccion activa
16 1 Flag de encriptacion
17 12 Indicadores para el uso en red de area local
29 1 Flag de fichero de indica .MDX
30 3 Reservados

La cabecera de cada campo es:

Posicion Tamaño (bytes) Descripcion

1 11 Nombre de Campo
12 1 Tipo de campo (C,D,F,L,M,N)
13 4 Reservados
17 1 Longitud de campo
18 1 Numero de decimales si el campo numerico,tambien usado para campos de caracteres de gran tamaño
19 2 Reservados
21 1 Flag de area de trabajo
22 10 Reservados
32 1 Flag de inclusion en el indice .MDX

(Se puede observar que la cantidad de campos no se indica en la cabecera, pero se puede deducir, sabiendo la longitud de la cabecera, que está en las posiciones 9 y 10, y el tamaño de cada bloque de cabecera, que es de 32 bytes).

 Ejemplo Ejercicio C#

 Copiar Código C#
// Importing necessary namespaces
using System;
using System.IO;
using System.Text;

class DBFExtractor
{
    // Main method where the program execution begins
    static void Main()
    {
        // File path (change this to the DBF file you want to extract fields from)
        string filePath = "example.dbf";

        // Call the ExtractFields method to display the list of fields from the DBF file
        ExtractFields(filePath);
    }

    // Method to extract and display the list of fields from the DBF file
    static void ExtractFields(string filePath)
    {
        try
        {
            // Open the DBF file in binary read mode
            using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                // Read the general header (32 bytes)
                byte[] header = new byte[32];
                fs.Read(header, 0, 32);

                // Extract the total length of the header (in bytes) from positions 9-10 (little-endian)
                int headerLength = BitConverter.ToInt16(header, 9);

                // The number of fields can be deduced from the header length
                int fieldCount = (headerLength - 32) / 32;

                // Skip to the start of the field headers
                fs.Seek(32, SeekOrigin.Begin);

                // Read each field header (32 bytes per field)
                for (int i = 0; i < fieldCount; i++)
                {
                    byte[] fieldHeader = new byte[32];
                    fs.Read(fieldHeader, 0, 32);

                    // Extract field name (first 11 bytes)
                    string fieldName = Encoding.ASCII.GetString(fieldHeader, 0, 11).Trim();

                    // Extract field type (12th byte)
                    char fieldType = (char)fieldHeader[11];

                    // Extract field length (17th byte)
                    byte fieldLength = fieldHeader[16];

                    // Display the extracted field information
                    Console.WriteLine($"Field {i + 1}: Name = {fieldName}, Type = {fieldType}, Length = {fieldLength}");
                }
            }
        }
        catch (Exception ex)
        {
            // Catch any errors (like file not found) and display the error message
            Console.WriteLine("Error: " + ex.Message);
        }
    }
}

 Salida

Field 1: Name = ID, Type = N, Length = 5
Field 2: Name = Name, Type = C, Length = 20
Field 3: Name = Age, Type = N, Length = 3
Field 4: Name = Address, Type = C, Length = 30

 Comparte este Ejercicio C# Sharp

 Más Ejercicios de Programacion C# Sharp de Administración de Archivos

¡Explora nuestro conjunto de ejercicios de programación C# Sharp! Estos ejercicios, diseñados específicamente para principiantes, te ayudarán a desarrollar una sólida comprensión de los conceptos básicos de C#. Desde variables y tipos de datos hasta estructuras de control y funciones simples, cada ejercicio está diseñado para desafiarte de manera gradual a medida que adquieres confianza en la codificación en C#.

  •  Texto censurado

    Este ejercicio consiste en crear un programa que censure archivos de texto. El programa debe leer un archivo de texto y volcar su contenido a un nuevo archivo, reemplazando ...

  •  SQL a texto

    En este ejercicio, debes crear un programa en C# capaz de analizar comandos SQL de tipo INSERT y extraer sus datos en líneas de texto separadas. El programa debe proc...

  •  Visor PGM

    El formato PGM es una de las versiones de los formatos de imagen NetPBM. Específicamente, es la variante capaz de manejar imágenes en tonos de gris. Su encabezado comienza con una ...

  •  Mostrar BMP en la consola V2

    En este ejercicio, se te solicita desarrollar un programa en C# que pueda mostrar un archivo BMP de tamaño 72x24 en la consola. Para ello, deberás utilizar la ...

  •  Escribir en un archivo de texto

    En este ejercicio de C#, se debe crear un programa que pida al usuario ingresar varias oraciones (hasta que presione Enter sin escribir nada) y almacene dichas oracio...

  •  Anexar a un archivo de texto

    En este ejercicio de C#, se debe crear un programa que pida al usuario ingresar varias oraciones (hasta que presione Enter sin escribir nada) y almacene esas oracione...