コード例 #1
0
        /*Lee los archivos y crea las entidades y atributos con sus respectivos datos*/
        private bool asignarMemoria()
        {
            long dat = 0;

            Fichero      = new FileStream(nombreArchivo, FileMode.Open, FileAccess.Read);
            binaryReader = new BinaryReader(Fichero);
            binaryReader.BaseStream.Seek(cab, SeekOrigin.Begin);//cabecera

            while (leeArchivo)
            {
                byte[] id = new byte[5];               //para el id
                id = binaryReader.ReadBytes(5);        //la madre de el id
                char[] c = binaryReader.ReadChars(35); //Obtiene la cadena de la entidad
                entidad = new Entidad(c, id);
                entidades.Add(entidad);
                dat = binaryReader.ReadInt64(); //Obtiene la direccion de la entidad
                entidades.Last().direccion_Entidad = dat;
                dat = binaryReader.ReadInt64(); //Obtiene la direccion del 1.er atributo
                entidades.Last().direccion_Atributo = dat;
                long temp = Fichero.Position;   //Obtiene la ultima posicion desde donde se leyo

                if (entidades.Last().direccion_Atributo != -1)
                {
                    char c2;
                    long aux;
                    int  i;

                    binaryReader.BaseStream.Seek(entidades.Last().direccion_Atributo, SeekOrigin.Begin);
                    while (leeArchAux)
                    {
                        byte[] id2 = new byte[5];        //para el id
                        id2 = binaryReader.ReadBytes(5); //la madre de el id
                        char[] caux = binaryReader.ReadChars(35);
                        c2 = binaryReader.ReadChar();    // no puede leeer mas-----------------------------
                        i  = binaryReader.ReadInt32();

                        //Se crea el atributo
                        atributo = new Atributo(id2, caux, c2, i);
                        entidades.Last().agregarAtributo(atributo);
                        aux = binaryReader.ReadInt64(); //Obtiene la direccion del atributo
                        entidades.Last().atributos.Last().direccion_Atributo = aux;
                        i = binaryReader.ReadInt32();   //Obtiene el tipo de indice
                        entidades.Last().atributos.Last().tipo_Indice = i;
                        aux = binaryReader.ReadInt64(); //Obtiene la direccion del indice
                        entidades.Last().atributos.Last().direccion_Indice = aux;
                        aux = binaryReader.ReadInt64(); //Obtiene la direccion del siguiente atributo
                        entidades.Last().atributos.Last().direccion_sigAtributo = aux;
                        if (aux == -1)
                        {
                            leeArchAux = false;
                        }
                        if (entidades.Last().atributos.Last().direccion_sigAtributo != -1)
                        {
                            binaryReader.BaseStream.Seek(aux, SeekOrigin.Begin);
                        }
                    }
                }
                leeArchAux = true;
                binaryReader.BaseStream.Seek(temp, SeekOrigin.Begin); ///posiciona la lectura desde antes de entrar a los atributos
                dat = binaryReader.ReadInt64();                       ///Obtiene la direccion de los registros
                entidades.Last().direccion_Dato = dat;
                dat = binaryReader.ReadInt64();                       ///Obtiene la direccion de la siguiente entidad
                entidades.Last().direccion_Siguiente = dat;
                if (dat == -1)                                        //Si el ultimo es un -1 deja de leer las entidades
                {
                    leeArchivo = false;
                }
                if (entidades.Last().direccion_Siguiente != -1)
                {
                    binaryReader.BaseStream.Seek(entidades.Last().direccion_Siguiente, SeekOrigin.Begin); //Se posiciona en apuntar siguiente de la siguiente entidad
                }
            }
            Fichero.Close();
            return(true);
        }
コード例 #2
0
        public void crearArbol(Atributo a, List <int> llego, Dictionary <int, long> sal)
        {
            ArbolB.Clear();
            a.DirIndice = currentDir;
            int nodoAct = 0;

            ArbolB.Add(new nodoArbol(a.DirIndice));
            ArbolB[0].Tipo = 'E';
            currentDir    += 65;
            List <int> enteros = new List <int>();

            foreach (int i in llego)
            {
                enteros.Add(i);
            }
            foreach (int ent in llego)
            {
                if (ArbolB[0].valores.Count < 4)
                {
                    ArbolB[0].insertarDato(ent);
                    enteros.Remove(ent);
                }
                else
                {
                    break;
                }
            }
            foreach (int ent in enteros)
            {
                while (true)
                {
                    if (ArbolB[nodoAct].valores.Count < 4 && ArbolB[nodoAct].Tipo == 'H')
                    {
                        ArbolB[nodoAct].insertarDato(ent);
                        nodoAct = buscarRaiz();
                        break;
                    }
                    else
                    {
                        long nuevaDirec = ArbolB[nodoAct].buscarPosicion(ent);
                        //Caso donde el nodo a dividir es la raiz
                        if (nuevaDirec == -1)
                        {
                            if (ArbolB[nodoAct].Tipo == 'E')
                            {
                                casoEspecial(nodoAct, ent);
                                nodoAct = buscarRaiz();
                                break;
                            }
                            if (ArbolB[nodoAct].Tipo == 'H')
                            {
                                casoHoja(nodoAct, ent);
                                nodoAct = buscarRaiz();
                                break;
                            }
                        }
                        else
                        {
                            nodoAct = buscarIndiceNodo(nuevaDirec);
                        }
                    }
                }
            }
        }
コード例 #3
0
ファイル: Entidad.cs プロジェクト: karenmtz3/ProyectoArchivos
 public void AgregaAtributo(Atributo a)
 {
     LAtributo.Add(a);
 }
コード例 #4
0
ファイル: Entidad.cs プロジェクト: MarioMacias/Archivos
 /*Añadir atributos a la lista*/
 public void agregarAtributo(Atributo atribut)
 {
     atributos.Add(atribut);
 }
コード例 #5
0
ファイル: Archivo.cs プロジェクト: YouKiddingD/Archivos
        //Metodo para leer las entidades que hay en el archivo segun las direcciones, para posteriormente llamar al metodo que leera los atributos y generar la estructura del archivo
        public void LeerArchivo()
        {
            List <Entidad> entidades = new List <Entidad>();

            actualSize = new System.IO.FileInfo(sRuta).Length;
            using (BinaryReader reader = new BinaryReader(new FileStream(sRuta, FileMode.Open)))
            {
                byte[] cabBytes = new byte[8];
                long   cab;
                long   currentDir;
                reader.Read(cabBytes, 0, 8);
                cab           = BitConverter.ToInt64(cabBytes, 0);
                this.Cabecera = cab;
                currentDir    = cab;
                //Cada elemento se va a leer del archivo y se guardara en una variable
                while (currentDir >= 0)
                {
                    byte[] entBytes = new byte[62];
                    reader.BaseStream.Seek(currentDir, SeekOrigin.Begin);
                    reader.Read(entBytes, 0, 62);

                    byte[] entBytesNobre = new byte[29];
                    entBytesNobre = entBytes.Take(29).ToArray();
                    string nombre = BinaryToString(entBytesNobre);

                    byte[] entBytesDirRec = new byte[8];
                    entBytesDirRec = entBytes.Skip(29).Take(8).ToArray();
                    long direc = BitConverter.ToInt64(entBytesDirRec, 0);

                    byte[] entBytesDirAtr = new byte[8];
                    entBytesDirAtr = entBytes.Skip(37).Take(8).ToArray();
                    long dirAtr = BitConverter.ToInt64(entBytesDirAtr, 0);

                    byte[] entBytesDirDat = new byte[8];
                    entBytesDirDat = entBytes.Skip(45).Take(8).ToArray();
                    long dirRegDat = BitConverter.ToInt64(entBytesDirDat, 0);

                    byte[] entBytesDirSig = new byte[8];
                    entBytesDirSig = entBytes.Skip(53).Take(8).ToArray();
                    long dirSigEnt = BitConverter.ToInt64(entBytesDirSig, 0);
                    currentDir = dirSigEnt;

                    //Se crea una entidad nueva con las variables leidas del archivo para su utilizacion en el programa
                    Entidad Ent = new Entidad(nombre, direc, dirAtr, dirRegDat, dirSigEnt);
                    entidades.Add(Ent);
                }
                reader.Close();
            }
            //Se lee cada atributo de cada una de las entidades con la direccion del primer atributo de este
            foreach (Entidad e in entidades)
            {
                long            dirAux  = e.DireccionAtr;
                List <Atributo> agregar = new List <Atributo>();
                while (dirAux >= 0)
                {
                    Atributo auxiliar = LeerAtributo(dirAux);
                    agregar.Add(auxiliar);
                    dirAux = auxiliar.DirSigAtributo;
                }
                //Una vez obtenida la entidad y la lista de atributos que le corresponde, se incorpora al diccionario de datos.
                this.DD.Add(e, agregar);
            }
        }
コード例 #6
0
        /*Crear un nuevo atributo*/
        private void btn_Aceptar_Click(object sender, EventArgs e)
        {
            if (nombreRepetido(tb_Nombre.Text))
            {
                MessageBox.Show("El nombre esta repetido, no se agregara.");
                return;
            }

            if (atributoForanea != null)
            {
                if (atributoForanea.string_Nombre == "ERR")
                {
                    MessageBox.Show("ERR atributo");
                    return;
                }
            }

            if (Convert.ToInt16(cb_Indice.Text) == 8)
            {
                atributo            = new Atributo(tb_Nombre.Text, atributoForanea.tipo_Dato, atributoForanea.longitud_Tipo, Convert.ToInt16(cb_Indice.Text));
                fa.dirIndiceForanea = entidades[posForanea].direccion_Entidad;

                entidades.ElementAt(pos).agregarAtributo(atributo); //Agregamos la entidad seleccionada.
                                                                    //MessageBox.Show(entidades.ElementAt(pos).atributos.Count.ToString());

                if (fa.agregaAtributoArchivo(nombreArchivo, pos, entidades))
                {
                    llenaDataG();
                }
                else
                {
                    MessageBox.Show("Ocurrio un error");
                }
            }
            else if (tb_Nombre != null || tb_Nombre.Text != "")
            {
                if (cb_TipoDato.Text != "")
                {
                    atributo = new Atributo(tb_Nombre.Text,
                                            Convert.ToChar(cb_TipoDato.Text),
                                            Convert.ToInt16(tb_Longitud.Text),
                                            Convert.ToInt16(cb_Indice.Text));

                    entidades.ElementAt(pos).agregarAtributo(atributo); //Agregamos la entidad seleccionada.
                    //MessageBox.Show(entidades.ElementAt(pos).atributos.Count.ToString());
                    if (fa.agregaAtributoArchivo(nombreArchivo, pos, entidades))
                    {
                        llenaDataG();
                    }
                    else
                    {
                        MessageBox.Show("Ocurrio un error");
                    }
                }
                else
                {
                    MessageBox.Show("Verifica si los campos estan completos.");
                }
            }
            else
            {
                MessageBox.Show("Verifica si los campos estan completos.");
            }

            botonesVisibles(true);
            tb_Nombre.Text   = "";
            tb_Longitud.Text = "";
            cb_Indice.Text   = "";
            cb_TipoDato.Text = "";
        }
コード例 #7
0
ファイル: Form1.cs プロジェクト: karenmtz3/ProyectoArchivos
        //Se abrirá un nuevo archivo y la información se mostrará en los datagrid
        private void abrirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LEntidades.Clear();                               //Se limpia la lista de entidades
            long aux = 0;                                     //Auxiliar de la cabecera

            long aux2 = 0;                                    //Auxiliar que guarda la dirección del siguiente atributo

            abrir.Filter = "Diccionario de Datos(*.dd)|*.dd"; //Filtro de la extensión del archivo
            //Condición para saber si el usuario abrió un archivo
            if (abrir.ShowDialog() == DialogResult.OK)
            {
                //abrir.FileName es el nombre del archivo seleccionado
                fs = new FileStream(abrir.FileName, FileMode.Open); //Se abre el archivo
                fs.Seek(0, SeekOrigin.Begin);                       //Se posiciona al inicio del archivo
                //Se crea un BinaryReader y un BinaryWriter
                br = new BinaryReader(fs);
                bw = new BinaryWriter(fs);
                //Se leen los primero 8 bytes del archivo, los cuales representan a la cabecera
                cabecera = br.ReadInt64();
                aux      = cabecera; //Se guarda el valor de la cabecera en un auxiliar
                NomArch  = abrir.FileName;
                //Ciclo para leer el archivo usando la dirección de las siguientes entidades
                while (aux != -1)
                {
                    string nomb = "";                 //Auxiliar del nombre de la entidad
                    fs.Seek(aux, SeekOrigin.Begin);   //Se posiciona en la dirección de la cabecera
                    char[] nombre = br.ReadChars(30); //Se guarda el nombre de la entidad
                    //Ciclo para concatenar el nombre y guardarlo en un string
                    foreach (char n in nombre)
                    {
                        if (char.IsLetter(n))
                        {
                            nomb += n;
                        }
                    }
                    long DirEnt   = br.ReadInt64();                               //Se guarda la dirección de la entidad
                    long DirAtrib = br.ReadInt64();                               //Se guarda la dirección del atributo
                    long DirDatos = br.ReadInt64();                               //Se guarda la dirección de datos
                    long DSE      = br.ReadInt64();                               //Se guarda la dirección de la siguiente entidad
                    aux = DSE;                                                    //El auxiliar se iguala al valor de la dirección de la siguiente entidad

                    entidad = new Entidad(nomb, DirEnt, DirAtrib, DirDatos, DSE); //Se crea la entidad
                    LEntidades.Add(entidad);                                      //Se agrega la entidad a la lista
                }
                //Ciclo para acceder a la lista de entidades
                foreach (Entidad entidad in LEntidades)
                {
                    //El auxiliar se iguala a la dirección de atributo que tiene la entidad
                    aux2 = entidad.DA;
                    //Ciclo para leer los atributos de una entidad
                    while (aux2 != -1)
                    {
                        string nomb = "";                //Auxiliar del nombre de la entidad
                        fs.Seek(aux2, SeekOrigin.Begin); //Se posiciona en la dirección del atributo
                        //Variables auxiliares para leer la información que pertenecen al atributo
                        char[] nombreA = br.ReadChars(30);
                        //Ciclo para concatenear el nombre y guardarlo en un string
                        foreach (char n in nombreA)
                        {
                            if (char.IsLetter(n))
                            {
                                nomb += n;
                            }
                        }
                        long DirA   = br.ReadInt64();
                        char TipD   = br.ReadChar();
                        int  LongD  = br.ReadInt32();
                        int  TipInd = br.ReadInt32();
                        long DirInd = br.ReadInt64();
                        long DirSA  = br.ReadInt64();
                        //Se iguala el auxiliar a la dirección de siguiente atributo
                        aux2     = DirSA;
                        atributo = new Atributo(nomb, DirA, TipD, LongD, TipInd, DirInd, DirSA); //Se crea un nuevo atributo
                        entidad.AgregaAtributo(atributo);                                        //Se agrega el atributo a la lista de atributos de la entidad
                    }
                }
                fs.Close(); //Se cierra el archivo
                Actualiza();
                //Se muestran los datos del archivo en los DataGrid
                AgregaFila();
                AgregaAtribDG();
            }

            //Se habilitan los bontones de agregar, modificar y eliminar de enitidades y atributos
            EntNueva.Enabled     = NuevoAtrib.Enabled = NomNuevo.Enabled = txtTDato.Enabled = true;
            AgregaEnt.Enabled    = ModEnt.Enabled = EliminaEnt.Enabled = true;
            AgregarAtrib.Enabled = ModifAtrib.Enabled = ElimAtrib.Enabled = true;
            ListNombres.Enabled  = ListaAtributos.Enabled = CBDatos.Enabled = CBIndice.Enabled = true;
        }
コード例 #8
0
ファイル: Form1.cs プロジェクト: karenmtz3/ProyectoArchivos
        //Se agrega un nuevo atributo a la entidad seleccionada
        private void AgregarAtrib_Click(object sender, EventArgs e)
        {
            //Se abre el archivo seleccionado
            fs      = File.Open(NomArch, FileMode.Open, FileAccess.Write);
            TamArch = fs.Length;                           //Auxiliar que guarda el tamaño del archivo
            //int TamAtrib = EntModificar.LAtributo1.Count;
            TamArch = fs.Length;                           //Variable que guarda el tamaño del archivo
            EncuentraEntidad();                            //Método que encuentrá la variable a la que se le asignarán los atributos
            char TDato   = Convert.ToChar(CBDatos.Text);   //auxiliar que guarda el tipo de dato
            int  TIndice = Convert.ToInt32(CBIndice.Text); //auxiliar qie guarda el tipo de indice
            int  LDato   = Convert.ToInt32(txtTDato.Text); //auxiliar que guarda la logitud de dato

            //validación para que el nombre del atributo no este vacio
            if (NuevoAtrib.Text != "" || NuevoAtrib.Text != " ")
            {
                //auxiliar que convierte el nombre en arreglo de char
                char[] aux = NuevoAtrib.Text.ToCharArray();
                //Validación del nombre del atributo, que sea menor o igual a 30 caracteres
                if (aux.Length <= 30)
                {
                    //Se posiciona al final del archivo
                    fs.Seek(TamArch, SeekOrigin.Begin);
                    bw = new BinaryWriter(fs); //Se crea un binarywriter
                                               //Se crea un nuevo atributo
                    atributo = new Atributo(NuevoAtrib.Text, TamArch, TDato, LDato, TIndice, -1, -1);
                    bool EncAtrib = EntModificar.EncuentraAtributo(atributo.NA);
                    if (EncAtrib == true)
                    {
                        MessageBox.Show("No pueden existir dos atributos con el mismo nombre");
                        fs.Close();
                    }
                    else
                    {
                        //Se convierte el nombre del atributo en arreglo de char
                        atributo.ConvierteChar();
                        EntModificar.AgregaAtributo(atributo);           //Se agrega el atributo a la lista de atributos de la entidad
                        EntModificar.DA = EntModificar.LAtributo1[0].DA; //Se asigna la dirección del atributo al campo de dirección de atributo de la entidad
                        atributo.EscribeAtributo(bw);                    //se escribe los datos del atributo en el archivo
                        fs.Close();                                      //Se cierra el archivo
                        AgregaAtribDG();                                 //Se muestra la información del atributo en el DatGrid
                    }
                }
                else
                {
                    MessageBox.Show("El nombre del atributo no debe de superar los 30 caracteres");
                }
            }
            else
            {
                MessageBox.Show("Escribe el nombre del nuevo atributo");
            }
            //Método que actualiza la información del archivo
            Actualiza();
            //Método que agrega los nombres de los atributos al combo box
            ComboAtributo();
            //Se limpian los campos que se rellenan con la información del atributo
            ListNombres.Text = "";
            CBDatos.Text     = "";
            CBIndice.Text    = "";
            NuevoAtrib.Clear();
            txtTDato.Clear();
        }