8.39 - SQL to text

Objetive

Debes crear un programa en C# capaz de analizar órdenes INSERT de lenguaje SQL y de extraer sus datos a líneas de texto independientes, de la siguiente forma: si el fichero de entrada contuviera estas tres líneas:

insert into personas (nombre, direccion, edad) values ('smith, pedro', 'su calle', 23);
insert into personas (nombre, direccion, edad) values ('juan', 'calle cinco, 6', 24);
insert into ciudades (codigo, nombre) values ('a', 'alicante');

el fichero resultante debería tener en cada línea el nombre de un campo, seguido de “dos puntos” y de su valor. Además, cada registro deberá estar precedido del nombre de la tabla y seguido por una línea en blanco, así:

personas
nombre: smith, pedro
direccion: su calle
edad: 23

personas
nombre: juan
direccion: calle cinco, 6
edad: 24

ciudades
codigo: a
nombre: alicante

El nombre del fichero a analizar se le debe preguntar al usuario.


Solution

using System;
using System.IO;

namespace SQL2text
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader ficheroEntrada = null;
            string linea;
            string nombre;

            Console.WriteLine("Not enough parameters!");
            Console.Write("Enter file name: ");
            nombre = Console.ReadLine();

            try
            {
                ficheroEntrada = File.OpenText(nombre);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            try
            {
                do
                {
                    linea = ficheroEntrada.ReadLine();
                    if (linea != null)
                    {
                        Console.WriteLine();
                        string tableName = linea.Substring(12).Split(' ')[0];
                        string[] campo = linea.Substring(linea.IndexOf("(") + 1,
                                linea.IndexOf(")") - linea.IndexOf("(") - 1).Split(',');
                        string[] valores = linea.Substring(linea.IndexOf("values (") + 9,
                                linea.IndexOf(");") - linea.IndexOf("values (") - 9).Split(',');

                        Console.WriteLine(tableName);
                        for (int i = 0; i < campo.Length; i++)
                        {
                            Console.Write(campo[i].Trim() + ": ");
                            Console.WriteLine(valores[i].Trim().Replace("'", ""));
                        }
                    }
                } while (linea != null);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            Console.ReadLine();
        }
    }
}


Popular Posts