コード例 #1
0
        public List <Producto> Busqueda([FromForm] Producto dato)
        {
            ArbolB <Producto> .IniciarArbol("Productos", new StringToObject(Producto.StringToProducto), new ObjectToString(Producto.ProductoToString));

            return(ArbolB <Producto> .Recorrido(dato, null, 1));
        }
 public void nuevoArbol()
 {
     arbol = new ArbolB(5);
 }
コード例 #3
0
        public List <Producto> RecorridoInOrder()
        {
            ArbolB <Producto> .IniciarArbol("Productos", new StringToObject(Producto.StringToProducto), new ObjectToString(Producto.ProductoToString));

            return(ArbolB <Producto> .Recorrido(null, null));
        }
コード例 #4
0
        public void Agregar([FromForm] Producto dato)
        {
            ArbolB <Producto> .IniciarArbol("Productos", new StringToObject(Producto.StringToProducto), new ObjectToString(Producto.ProductoToString));

            ArbolB <Producto> .InsertarArbol(dato);
        }
コード例 #5
0
        /// <summary>
        /// <para>Algoritmo creado por Moises Alonso</para>
        /// Algoritmo de creación de árbol de expresion a traves de Expresión Regular
        /// </summary>
        /// <param name="RE"></param>
        public void Tree(List <Datos.AllData> RE)
        {
            var prueba   = new List <string>();
            var stringer = string.Empty;

            foreach (var item in RE)
            {
                prueba.Add(item.StringData);
                stringer += item.StringData;
            }
            foreach (var item in RE)
            {
                if (item.StringData == "(")
                {
                    Datos.Instance.PilaT.Push(item.StringData);
                }
                else if (item.StringData == ")")
                {
                    while (Datos.Instance.PilaT.Count > 0 && Datos.Instance.PilaT.Peek() != "(")
                    {
                        if (Datos.Instance.PilaT.Count == 0)
                        {
                            throw new Exception("Faltan operadores");
                        }
                        if (Datos.Instance.PilaS.Count < 2)
                        {
                            throw new Exception("Faltan operadores");
                        }
                        var nodoTemp = new ArbolB();
                        nodoTemp.Dato                = Datos.Instance.PilaT.Pop();
                        nodoTemp.Padre               = null;
                        nodoTemp.HijoDerecho         = Datos.Instance.PilaS.Pop();
                        nodoTemp.HijoDerecho.Padre   = nodoTemp.Dato;
                        nodoTemp.HijoIzquierdo       = Datos.Instance.PilaS.Pop();
                        nodoTemp.HijoIzquierdo.Padre = nodoTemp.Dato;
                        Datos.Instance.PilaS.Push(nodoTemp);
                    }
                    Datos.Instance.PilaT.Pop();
                }
                else if (Utilities.Op.Contains(item.StringData))
                {
                    if (item.StringData == "?" || item.StringData == "*" || item.StringData == "+")
                    {
                        var nodoTemp = new ArbolB();
                        nodoTemp.Dato  = item.StringData;
                        nodoTemp.Padre = null;
                        if (Datos.Instance.PilaS.Count == 0)
                        {
                            throw new Exception("Error, faltan operandos");
                        }
                        nodoTemp.HijoIzquierdo       = Datos.Instance.PilaS.Pop();
                        nodoTemp.HijoIzquierdo.Padre = nodoTemp.Dato;
                        Datos.Instance.PilaS.Push(nodoTemp);
                    }
                    else if (Datos.Instance.PilaT.Count != 0)
                    {
                        while (Datos.Instance.PilaT.Peek() != "(" && (VerificarPrecedencia(item.StringData) == true))
                        {
                            var nodoTemp = new ArbolB();
                            nodoTemp.Dato  = Datos.Instance.PilaT.Pop();
                            nodoTemp.Padre = null;
                            if (Datos.Instance.PilaS.Count() < 2)
                            {
                                throw new Exception("Faltan operadores");
                            }
                            else
                            {
                                var precedencia = VerificarPrecedencia(item.StringData);
                                nodoTemp.HijoDerecho         = Datos.Instance.PilaS.Pop();
                                nodoTemp.HijoDerecho.Padre   = nodoTemp.Dato;
                                nodoTemp.HijoIzquierdo       = Datos.Instance.PilaS.Pop();
                                nodoTemp.HijoIzquierdo.Padre = nodoTemp.Dato;
                                Datos.Instance.PilaS.Push(nodoTemp);
                            }
                        }
                    }
                    if (item.StringData == "|" || item.StringData == ".")
                    {
                        Datos.Instance.PilaT.Push(item.StringData);
                    }
                }
                else
                {
                    var nodoTemp = new ArbolB();
                    nodoTemp.Dato  = item.StringData;
                    nodoTemp.Padre = null;
                    Datos.Instance.PilaS.Push(nodoTemp);
                }
            }
            while (Datos.Instance.PilaT.Count > 0)
            {
                if (Datos.Instance.PilaT.Peek() == "(" || Datos.Instance.PilaS.Count < 2)
                {
                    throw new Exception("Faltan operadores");
                }
                var nodoTemp = new ArbolB();
                nodoTemp.Dato                = Datos.Instance.PilaT.Pop();
                nodoTemp.Padre               = null;
                nodoTemp.HijoDerecho         = Datos.Instance.PilaS.Pop();
                nodoTemp.HijoDerecho.Padre   = nodoTemp.Dato;
                nodoTemp.HijoIzquierdo       = Datos.Instance.PilaS.Pop();
                nodoTemp.HijoIzquierdo.Padre = nodoTemp.Dato;
                Datos.Instance.PilaS.Push(nodoTemp);
            }
            if (Datos.Instance.PilaS.Count != 1)
            {
                throw new Exception("Faltan operadores");
            }
        }
コード例 #6
0
        public ActionResult Dividir(string Codigo)
        {
            string CodigoN = Codigo;

            string[] CodigoSeparado = new string[100];
            CodigoSeparado = CodigoN.Split(' ');

            if (CodigoSeparado[0] == "CREATE" && DiccionarioArboles.ContainsKey(CodigoSeparado[2]) == false)
            {
                if (CodigoSeparado[1] == "TABLE")
                {
                    ArbolNuevo.NombreVariables.Clear();
                    Ingresados.Clear();
                    int ContadorAtributos = (CodigoSeparado.Length - 7) / 2;  //-7 por CREATE TABLE NOMBRE ID INT PRIMARY KEY y DIV 2 porque por cada nombre existe un tipo de variable
                                                                              //AtributosDeTabla = new string[CodigoSeparado.Length - 7];  //Arreglo para guardar todos los atributos y sus tipos
                    if (ContadorAtributos > 10)
                    {
                        return(RedirectToAction("/error"));
                    }
                    else
                    {
                        ArbolNuevo.NombreVariables.Add("ID");
                        for (int i = 7; i < CodigoSeparado.Length; i++)       //Desde 7 para que comienze luego de KEY
                        {
                            if (i % 2 != 0)
                            {
                                ArbolNuevo.NombreVariables.Add(CodigoSeparado[i]);       //i-7 para comenzar en 0 en AtributosDeTabla
                            }
                        }
                        //en posiciones pares se almacenara el nombre y en posiciones impares el tipo de dato
                        DiccionarioArboles.Add(CodigoSeparado[2], ArbolNuevo);

                        ViewBag.Columnas = ArbolNuevo.NombreVariables;

                        return(View());
                    }
                }
                else
                {
                    return(RedirectToAction("/error"));
                }
            }
            else if (CodigoSeparado[0] == "INSERT" && CodigoSeparado[1] == "INTO") //Revisa sintaxis
            {
                if (DiccionarioArboles.ContainsKey(CodigoSeparado[2]) == true)     //Revisa que si exista la tabla
                {
                    int Declarados     = 0;                                        //Contador de atributos declarados antes de "VALUES"
                    int PosicionValues = 0;                                        //Posicion de vector CodigoSeparado[] donde esta "VALUES"
                    int Asignados      = 0;                                        //Contador de variables asignadas despues de "VALUES"
                    for (int i = 0; i < CodigoSeparado.Length; i++)                //Para contar atributos
                    {
                        if (CodigoSeparado[i] == "VALUES")
                        {
                            PosicionValues = i;                     //Toma valor de posicion donde VALUES esta
                            break;
                        }
                    }
                    Declarados = PosicionValues - 3;                                   //Resta 3 de la posicion VALUES por "INSERT", "INTO" y "VALUES"
                    for (int j = (PosicionValues + 1); j < CodigoSeparado.Length; j++) //Comienza despues de VALUES
                    {
                        Asignados++;                                                   //Incrementa por elementos
                    }
                    if (Declarados != Asignados)
                    {
                        return(RedirectToAction("/error"));
                    }
                    if (Declarados > 10)
                    {
                        return(RedirectToAction("/error"));
                    }
                    if (Asignados == Declarados)
                    {
                        string[] Columnas = new string[Declarados];                      //Arreglo para imprimir columnas
                        string[] As       = new string[Declarados];                      //Arreglo para imprimir declarados
                        for (int p = 3; p < PosicionValues; p++)                         //Desde posicion 3 para quitar INSERT INTO Nombre, hasta VALUES
                        {
                            Columnas[p - 3] = CodigoSeparado[p];                         //Recorre CodigoSeparado para ingresar en Columnas
                        }
                        for (int p = PosicionValues + 1; p < CodigoSeparado.Length; p++) //Desde uno luego de VALUES
                        {
                            As[p - PosicionValues - 1] = CodigoSeparado[p];              //Recorre CodigoSeparado para guardar los asignados
                        }
                        Informacion Datos = new Informacion();                           //Se instancia un dato de tipo informacion para poder guardarlo en arbol
                        Datos.IDregistro = int.Parse(As[0]);                             //Agrega ID

                        /*foreach (var item in As)     //Agrega cada valor en la lista de registros
                         * {
                         *  Datos.Registros.Add(item);
                         * }
                         * DiccionarioArboles[CodigoSeparado[2]].InsertarNodo(DiccionarioArboles[CodigoSeparado[2]].Raiz, Datos);
                         * Ingresados.Add(As);
                         *
                         * Ingresados = Ingresados.OrderBy(o => o[0]).ToList();
                         * ViewBag.Columnas = ArbolNuevo.NombreVariables;
                         * ViewBag.Insertado = Ingresados;*/
                        return(View());
                    }
                }
                else
                {
                    return(RedirectToAction("/error"));
                }
            }
            if (CodigoSeparado[0] == "SELECT")
            {
                int Marcador = 0;       //Posicion de FROM en arreglo CodigoOrdenado
                for (int i = 0; i < CodigoSeparado.Length; i++)
                {
                    if (CodigoSeparado[i] == "FROM") //Desde 1 para quitar el SELECT
                    {
                        Marcador = i;                //Obtiene la posicion de FROM
                    }
                }
                string[] ColumnasSelecionadas = new string[Marcador - 1]; //Cantidad de columnas selecionadas sera la posicion del marcador menos uno
                for (int i = 1; i < ColumnasSelecionadas.Length; i++)
                {
                    ColumnasSelecionadas[i - 1] = CodigoSeparado[i]; //Almacena solo las "categorias" que el usuario escribio para obtener
                }

                return(RedirectToAction("/exito"));
            }
            else if (CodigoSeparado[0] == "DELETE" && CodigoSeparado[1] == "FROM")
            {
                bool        TieneWhere = false;
                Informacion ID         = new Informacion();
                if (DiccionarioArboles.ContainsKey(CodigoSeparado[3]) == true)
                {
                    for (int i = 0; i < CodigoSeparado.Length; i++) //Busca si el codigo tiene "where"
                    {
                        if (CodigoSeparado[i] == "WHERE")
                        {
                            TieneWhere = true;
                        }
                    }

                    if (TieneWhere == false)
                    {
                        DiccionarioArboles[CodigoSeparado[2]].EliminarArbol();
                    }
                    else
                    {
                        ID.IDregistro = Convert.ToInt32(CodigoSeparado[6]);
                        DiccionarioArboles[CodigoSeparado[3]].Eliminar(ID, DiccionarioArboles[CodigoSeparado[3]].Raiz);
                    }
                }
                foreach (var Vector in Ingresados) //Para eliminar de la vista (del viewbag)
                {
                    if (Vector[0] == CodigoSeparado[6])
                    {
                        Ingresados.Remove(Vector);
                    }
                }
                Ingresados = Ingresados.OrderBy(o => o[0]).ToList();
                return(View());
            }
            else if (CodigoSeparado[0] == "DROP")
            {
                if (CodigoSeparado[1] == "TABLE")
                {
                    string NombreTabla = CodigoSeparado[2];
                    if (DiccionarioArboles.ContainsKey(NombreTabla) == true)
                    {
                        DiccionarioArboles.Remove(NombreTabla);
                        Ingresados = null;
                        ArbolNuevo = null;
                        return(View("Inicio"));
                    }
                    else
                    {
                        return(RedirectToAction("/error"));
                    }
                }
                else
                {
                    return(RedirectToAction("/error"));
                }
            }
            else
            {
                return(RedirectToAction("/error"));
            }
        }
コード例 #7
0
        public static void Comprimir(string nombre)
        {
            Directory.CreateDirectory("temp");
            ArbolB <ProductData> .IniciarArbol(nombre, null, null);

            using (var streamReader = new FileStream($"Datos\\{nombre}.txt", FileMode.Open))
            {
                using (var reader = new BinaryReader(streamReader))
                {
                    using (var streamWriter = new FileStream($"temp\\{nombre}.txt", FileMode.OpenOrCreate))
                    {
                        using (var writer = new BinaryWriter(streamWriter))
                        {
                            var DiccionarioLetras = new Dictionary <string, string>();
                            var bufferLength      = 10000;
                            var bytebuffer        = new byte[bufferLength];
                            var stringLetra       = string.Empty;

                            while (reader.BaseStream.Position != reader.BaseStream.Length)
                            {
                                bytebuffer = reader.ReadBytes(bufferLength);

                                for (int i = 0; i < bytebuffer.Count(); i++)
                                {
                                    stringLetra = Convert.ToString(Convert.ToChar(bytebuffer[i]));

                                    if (!DiccionarioLetras.ContainsKey(stringLetra))
                                    {
                                        var stringnum = Convert.ToString(DiccionarioLetras.Count() + 1, 2);
                                        DiccionarioLetras.Add(stringLetra, stringnum);
                                        stringLetra = string.Empty;
                                    }
                                }
                            }

                            writer.Write(Encoding.UTF8.GetBytes(Convert.ToString(DiccionarioLetras.Count).PadLeft(8, '0').ToCharArray()));

                            foreach (var fila in DiccionarioLetras)
                            {
                                writer.Write(Convert.ToByte(Convert.ToChar(fila.Key[0])));
                            }

                            reader.BaseStream.Position = 0;
                            stringLetra = string.Empty;
                            var anterior = string.Empty;

                            var ListaCaracteres = new List <string>();

                            while (reader.BaseStream.Position != reader.BaseStream.Length)
                            {
                                bytebuffer = reader.ReadBytes(bufferLength);

                                for (int i = 0; i < bytebuffer.Count(); i++)
                                {
                                    stringLetra += Convert.ToString(Convert.ToChar(bytebuffer[i]));

                                    if (!DiccionarioLetras.ContainsKey(stringLetra))
                                    {
                                        var stringnum = Convert.ToString(DiccionarioLetras.Count() + 1, 2);
                                        DiccionarioLetras.Add(stringLetra, stringnum);
                                        ListaCaracteres.Add(DiccionarioLetras[anterior]);
                                        anterior    = string.Empty;
                                        anterior   += stringLetra.Last();
                                        stringLetra = anterior;
                                    }
                                    else
                                    {
                                        anterior = stringLetra;
                                    }
                                }
                            }

                            ListaCaracteres.Add(DiccionarioLetras[stringLetra]);

                            var cantMaxBits = Math.Log2((float)DiccionarioLetras.Count);
                            cantMaxBits = cantMaxBits % 1 >= 0.5 ? Convert.ToInt32(cantMaxBits) : Convert.ToInt32(cantMaxBits) + 1;

                            writer.Write(Convert.ToByte(cantMaxBits));

                            for (int i = 0; i < ListaCaracteres.Count; i++)
                            {
                                ListaCaracteres[i] = ListaCaracteres[i].PadLeft(Convert.ToInt32(cantMaxBits), '0');
                            }

                            var bufferEscritura = new List <byte>();

                            var aux = string.Empty;

                            foreach (var item in ListaCaracteres)
                            {
                                aux += item;
                                if (aux.Length >= 8)
                                {
                                    var max = aux.Length / 8;
                                    for (int i = 0; i < max; i++)
                                    {
                                        bufferEscritura.Add(Convert.ToByte(Convert.ToInt32(aux.Substring(0, 8), 2)));
                                        aux = aux.Substring(8);
                                    }
                                }
                            }

                            if (aux.Length != 0)
                            {
                                bufferEscritura.Add(Convert.ToByte(Convert.ToInt32(aux.PadRight(8, '0'), 2)));
                            }

                            writer.Write(bufferEscritura.ToArray());
                        }
                    }
                }
            }
        }