예제 #1
0
            public void EscribirMetaData()
            {
                var meta = $"{(IdPAdre).ToString().PadLeft(3, '0')}" +
                           $"|{Grado.ToString().PadLeft(3, '0')}|{Siguiente.ToString().PadLeft(3, '0')}" +
                           $"|{LargoPadre.ToString().PadLeft(3, '0')}|{LargoHijo.ToString().PadLeft(3, '0')}";
                var escritor = new FileStream(GlobalPath, FileMode.Open);

                escritor.Write(Encoding.ASCII.GetBytes(meta), 0, (meta).Length);
                escritor.Close();
            }
예제 #2
0
            public void PrimeraSeparacion(NodoSF Actual, Relacion Nuevo)
            {
                var lista = new List <Relacion>();

                foreach (var item in Actual.Datos)
                {
                    lista.Add(item);
                }
                lista.Add(Nuevo);

                // escribir en el archivo todos los nodos disponibles del padre e hijos
                var hijo1 = new NodoSF(Grado, true)
                {
                    Grado = Grado
                };

                hijo1.id = IdPAdre;
                var indice = 0;

                for (int i = 0; i < lista.Count / 2; i++)
                {
                    hijo1.Datos[indice] = lista[i];
                    indice++;
                }


                indice = 0;
                var hijo2 = new NodoSF(Grado, true);

                hijo2.id = Siguiente;
                Siguiente++;
                for (int i = (lista.Count / 2) + 1; i < lista.Count; i++)
                {
                    hijo2.Datos[indice] = lista[i];
                    indice++;
                }
                var raiznueva = new NodoSF(Grado, false)
                {
                    id = Siguiente
                };

                lista.Sort((x, y) => x.Nombre.CompareTo(y.Nombre));
                raiznueva.Datos[0] = lista[(lista.Count / 2) + 1];
                IdPAdre            = Siguiente;
                raiznueva.Hijos[0] = hijo1.id;
                raiznueva.Hijos[1] = hijo2.id;
                hijo1.Padre        = raiznueva.id;
                hijo2.Padre        = raiznueva.id;
                Siguiente++;
                SortDatos(raiznueva.Datos);
                SortDatos(hijo1.Datos);
                SortDatos(hijo2.Datos);

                var escritor = new StreamWriter(GlobalPath);

                //metadata
                escritor.WriteLine($"{(IdPAdre).ToString().PadLeft(3, '0')}" +
                                   $"|{Grado.ToString().PadLeft(3, '0')}|{Siguiente.ToString().PadLeft(3, '0')}" +
                                   $"|{LargoPadre.ToString().PadLeft(3, '0')}|{LargoHijo.ToString().PadLeft(3, '0')}|");
                // nodos
                escritor.WriteLine(hijo1.WriteNodo());
                escritor.WriteLine(hijo2.WriteNodo());
                escritor.WriteLine(raiznueva.WriteNodo());
                escritor.Close();
            }
예제 #3
0
            public void Insertar(Relacion Nuevo)
            {
                var FILE   = new FileStream(GlobalPath, FileMode.Open);
                var lector = new StreamReader(FILE);

                if (IdPAdre == 1 && !primeraSeparecion) // aun no se parte
                {
                    var linea = lector.ReadLine();
                    linea = lector.ReadLine();
                    FILE.Close();
                    Raiz = Raiz.ReadNodo(linea);
                    var contador = 0;
                    for (int i = 0; i <= Raiz.Datos.Length; i++)
                    {
                        if (i == Raiz.Datos.Length)
                        {
                            PrimeraSeparacion(Raiz, Nuevo);
                            break;
                        }
                        //insertando en la raiz
                        if (Raiz.Datos[i] == null)
                        {
                            Raiz.Datos[contador] = Nuevo;
                            SortDatos(Raiz.Datos);

                            var escritor = new StreamWriter(GlobalPath);
                            escritor.WriteLine($"{(IdPAdre).ToString().PadLeft(3, '0')}" +
                                               $"|{Grado.ToString().PadLeft(3, '0')}|{Siguiente.ToString().PadLeft(3, '0')}" +
                                               $"|{LargoPadre.ToString().PadLeft(3, '0')}|{LargoHijo.ToString().PadLeft(3, '0')}");
                            escritor.WriteLine(Raiz.WriteNodo());
                            escritor.Close();
                            break;
                        }
                        else
                        {
                            contador++;
                        }
                    }
                }
                else
                {
                    FILE.Close();
                    InsertarEnHoja(SeekPadre(IdPAdre), Nuevo);
                }
            }