示例#1
0
        public void creaRegistro(string nameArch, CRegistro REG, CEntidad ENTIDAD)
        {
            try
            {
                using (BinaryWriter escribe = new BinaryWriter(new FileStream(nameArch, FileMode.OpenOrCreate)))
                {
                    escribe.Seek(0, SeekOrigin.Begin);
                    escribe.Write(REG.Reg_dir);
                    int i = 0;
                    foreach (CAtributo ATR in ENTIDAD.Lista_Atrb)
                    {
                        switch (ATR.Tipo)
                        {
                        case 'I':    //INT
                            int datoI = Convert.ToInt32(REG.Lista_Atributos[i]);
                            escribe.Write(datoI);
                            i++;
                            break;

                        case 'S':    //String
                            string datoS = REG.Lista_Atributos[i].ToString();
                            escribe.Write(datoS);
                            i++;
                            break;
                        }
                    }
                    escribe.Write(REG.Reg_sig);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
示例#2
0
        public void InsertaRegOnIdxS(CEntidad ENT, CRegistro REG)
        {
            int    pos       = 0;
            string nombreIdx = NombreIdx(ENT.Nombre);

            for (int j = 0; j < ENT.Lista_Atrb.Count(); j++)
            {
                if (ENT.Lista_Atrb[j].Indice == 3)
                {
                    pos = j;
                    break;
                }
            }
            for (int i = 0; i < 50; i++)
            {
                string registro = REG.Lista_Atributos[pos].ToString();
                string compara  = "";
                for (int k = 0; k < ENT.Lista_Atrb[pos].Tamaño - 1; k++)
                {
                    compara += ENT.Lista_Indices[i + 27].Indice[k];
                }
                if (registro == compara)
                {
                    //MessageBox.Show("Ya existe el bloque" + "   Tamaño del bloque = " + ENT.Lista_Indices[i + 27].Lista_IndexP.Count());
                    foreach (CIndexP idxS in ENT.Lista_Indices[i + 27].Lista_IndexP)
                    {
                        if (idxS.DirRegistros == -1)
                        {
                            //MessageBox.Show("Direcion del bloque " + ENT.Lista_Indices[i + 27].DirRegistros.ToString());
                            idxS.DirRegistros = REG.Reg_dir;
                            archivo.modifica_IndiceS(idxS.DirIndice, nombreIdx, idxS);
                            break;
                        }
                    }
                    break;
                }
                else
                {
                    if (ENT.Lista_Indices[i + 27].Indice[0].ToString() == " ")
                    {
                        ENT.Lista_Indices[i + 27].Indice       = registro;
                        ENT.Lista_Indices[i + 27].DirRegistros = dimeTamArch(nombreIdx);
                        archivo.modifica_Indice(ENT.Lista_Indices[i + 27].DirIndice, nombreIdx, ENT.Lista_Indices[i + 27], ENT.Lista_Atrb[pos].Tamaño);
                        for (int j = 0; j < 50; j++)
                        {
                            CIndexP indice = new CIndexP();
                            indice.DirIndice    = dimeTamArch(nombreIdx);
                            indice.DirRegistros = -1;
                            ENT.Lista_Indices[i + 27].Lista_IndexP.Add(indice);
                            archivo.agregaidxS(nombreIdx, indice);
                        }
                        InsertaRegOnIdxS(ENT, REG);
                        break;
                    }
                }
            }
        }
示例#3
0
        public void leeRegistros(long dir_apuntador, string nameArch, CEntidad ENTIDAD)
        {
            Console.Write(dir_apuntador + " Esta es la direccion del apuntador\n");
            if (dir_apuntador != -1)
            {
                try
                {
                    FileStream file = new FileStream(nameArch, FileMode.Open, FileAccess.Read);
                    //Console.Write(dir_apuntador + " Esta es la direccion ya de busqueda\n");
                    file.Seek(dir_apuntador, SeekOrigin.Current);
                    using (BinaryReader leer = new BinaryReader(file))
                    {
                        CRegistro REG = new CRegistro();

                        REG.Reg_dir = leer.ReadInt64();
                        foreach (CAtributo ATR in ENTIDAD.Lista_Atrb)
                        {
                            switch (ATR.Tipo)
                            {
                            case 'I':    //INT
                                int datoI = leer.ReadInt32();
                                REG.Lista_Atributos.Add(datoI);
                                break;

                            case 'S':    //String
                                string datoS = leer.ReadString();;
                                REG.Lista_Atributos.Add(datoS);
                                break;
                            }
                        }
                        REG.Reg_sig = leer.ReadInt64();



                        ENTIDAD.Lista_Registros.Add(REG);

                        leeRegistros(REG.Reg_sig, nameArch, ENTIDAD);
                    }
                    file.Close();
                }
                catch (Exception ex)
                {
                    //MessageBox.Show();
                }
            }
        }
示例#4
0
        public void Elimina_Registro(CRegistro reg, CEntidad Ent)
        {
            string nombre = NombreReg(Ent.Nombre);

            Console.Write("Registro a eliminar... " + nombre + "\n");

            if (Ent.Ptr_datos == reg.Reg_dir)
            {
                Ent.Ptr_datos = reg.Reg_sig;
                archivo.modifica_ent_sig(Ent.Ptr_entidad, name, Ent);

                foreach (CRegistro auxreg in Ent.Lista_Registros)
                {
                    if (auxreg.Reg_dir == reg.Reg_dir)
                    {
                        Ent.Lista_Registros.Remove(auxreg);
                        break;
                    }
                }


                /// QUE PASA!!!

                Console.Write("Exito caso 1\n");
            }
            else
            {
                foreach (CRegistro auxreg in Ent.Lista_Registros)
                {
                    if (auxreg.Reg_dir == reg.Reg_dir)
                    {
                        int position = Ent.Lista_Registros.IndexOf(auxreg);
                        Ent.Lista_Registros[position - 1].Reg_sig = auxreg.Reg_sig;
                        archivo.modifica_reg_sig(Ent.Lista_Registros[position - 1].Reg_dir, nombre, Ent, Ent.Lista_Registros[position - 1]);
                        Ent.Lista_Registros.Remove(auxreg);
                        Console.Write("Exito caso 2\n");
                        break;
                    }
                }
            }
        }
示例#5
0
 public void Modifica_Registro(CEntidad Ent, CRegistro Reg, CRegistro Reg_mod)
 {
     /*foreach (CAtributo Atr in Ent.Lista_Atrb)
      * {
      *  if (Atr.Nombre == ATRI_MOD.Nombre)
      *  {
      *      Atr.Nombre = ATRI.Nombre;
      *      Atr.Tipo = ATRI.Tipo;
      *      Atr.Tamaño = ATRI.Tamaño;
      *      Atr.Indice = ATRI.Indice;
      *      Archivo.modifica_atri_sig(Atr.Direccion, Name, Atr);
      *      break;
      *  }
      * }
      *
      * int pos = Ent.Lista_Registros.IndexOf(Reg);
      *
      * Ent.Lista_Registros[pos].Reg_dir = Reg_mod.Reg_dir;
      * foreach(CAtributo ATR in Ent.Lista_Atrb)
      * {
      *  Reg.Lista_Atributos[i] = Reg
      * }*/
 }
示例#6
0
        public CRegistro leeRegistro(long dir_apuntador, string nameArch, CEntidad ENTIDAD)
        {
            try
            {
                FileStream file = new FileStream(nameArch, FileMode.Open, FileAccess.Read);
                CRegistro  REG  = new CRegistro();
                file.Seek(dir_apuntador, SeekOrigin.Current);
                using (BinaryReader leer = new BinaryReader(file))
                {
                    REG.Reg_dir = leer.ReadInt64();
                    foreach (CAtributo ATR in ENTIDAD.Lista_Atrb)
                    {
                        switch (ATR.Tipo)
                        {
                        case 'I':    //INT
                            int datoI = leer.ReadInt32();
                            REG.Lista_Atributos.Add(datoI);
                            break;

                        case 'S':    //String
                            string datoS = leer.ReadString();;
                            REG.Lista_Atributos.Add(datoS);
                            break;
                        }
                    }
                    REG.Reg_sig = leer.ReadInt64();
                }
                file.Close();
                return(REG);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return(null);
            }
        }
示例#7
0
        public void InsertaRegOnIdx(CEntidad ENT, CRegistro REG)
        {
            int    pos       = 0;
            string nombreIdx = NombreIdx(ENT.Nombre);

            for (int j = 0; j < ENT.Lista_Atrb.Count(); j++)
            {
                if (ENT.Lista_Atrb[j].Indice == 2)
                {
                    pos = j;
                    break;
                }
            }
            for (int i = 0; i < 27; i++)
            {
                string registro  = REG.Lista_Atributos[pos].ToString();
                string mayuscula = registro[0].ToString().ToUpper();
                if (mayuscula == ENT.Lista_Indices[i].Indice)
                {
                    //MessageBox.Show(ENT.Lista_Indices[i].Indice.ToString() + "  " + ENT.Lista_Indices[i].DirRegistros.ToString());
                    if (ENT.Lista_Indices[i].DirRegistros == -1)
                    {
                        for (int j = 0; j < 100; j++)
                        {
                            CIndexP indice = new CIndexP();
                            long    tam    = dimeTamArch(nombreIdx);
                            indice.DirIndice = tam;
                            if (j == 0)
                            {
                                ENT.Lista_Indices[i].DirRegistros = tam;
                                char abc = ENT.Lista_Indices[i].Indice[0];
                                Archivo.modifica_IndiceP(ENT.Lista_Indices[i].DirIndice, nombreIdx, ENT.Lista_Indices[i], abc);
                            }
                            string cadena = stringVacio(ENT.Lista_Atrb[pos].Tamaño);
                            indice.Indice       = cadena;
                            tam                 = -1;
                            indice.DirRegistros = tam;
                            ENT.Lista_Indices[i].Lista_IndexP.Add(indice);
                            Archivo.agregaidxPB(nombreIdx, indice, ENT.Lista_Atrb[pos].Tamaño);
                        }
                        //MessageBox.Show("Se creo correctamente el bloque del indice " + ENT.Lista_Indices[i].Indice);
                        InsertaRegOnIdx(ENT, REG);
                    }
                    else
                    {
                        //MessageBox.Show("Ya existe el bloque, ahora se agregara este elemento en el");
                        foreach (CIndexP indP in ENT.Lista_Indices[i].Lista_IndexP)
                        {
                            if (indP.Indice[0].ToString() == " ")
                            {
                                indP.Indice       = registro;
                                indP.DirRegistros = REG.Reg_dir;
                                archivo.modifica_Indice(indP.DirIndice, nombreIdx, indP, ENT.Lista_Atrb[pos].Tamaño);
                                break;
                            }
                        }
                    }
                    break;
                }
            }
        }
示例#8
0
        public void Inserta_Registro2(CRegistro REG, CEntidad EN, string Name_Reg, int modifica)
        {
            string aux = EN.Nombre;

            EN.Nombre = rellenaString(aux);

            string nombre = NombreReg(Name_Reg);

            if (EN.Ptr_datos > 0 && EN.Lista_Registros.Count == 0)
            {
                EN.Lista_Registros.Add(REG);
                EN.Ptr_datos = 0;
            }
            else
            {
                if (EN.Ptr_datos == 0 && EN.Lista_Registros.Count == 0)
                {
                    //MessageBox.Show("caso 0");
                    EN.Lista_Registros.Add(REG);
                    EN.Ptr_datos = 0;
                    REG.Reg_dir  = 0;
                    REG.Reg_sig  = -1;
                    archivo.creaRegistro(nombre, REG, EN);
                    archivo.modifica_ent_sig(EN.Ptr_entidad, name, EN);
                }

                ///
                else
                {
                    ///metodo para saber como ordenar

                    int pos = 0;

                    for (int i2 = 0; i2 < EN.Lista_Atrb.Count; i2++)
                    {
                        if (EN.Lista_Atrb[i2].Indice == 1 || EN.Lista_Atrb[i2].Indice == 2 || EN.Lista_Atrb[i2].Indice == 3)
                        {
                            pos = i2;
                            break;
                        }
                    }


                    int index = 0;
                    int band  = 0;
                    foreach (CRegistro reg in EN.Lista_Registros)
                    {
                        Int32 val = 0;
                        if (EN.Lista_Atrb[pos].Tipo == 'S')
                        {
                            val = string.Compare(REG.Lista_Atributos[pos].ToString(), reg.Lista_Atributos[pos].ToString());
                        }
                        if (EN.Lista_Atrb[pos].Tipo == 'I')
                        {
                            if (Convert.ToInt32(REG.Lista_Atributos[pos]) < Convert.ToInt32(reg.Lista_Atributos[pos]))
                            {
                                val = -1;
                            }
                            if (Convert.ToInt32(REG.Lista_Atributos[pos]) > Convert.ToInt32(reg.Lista_Atributos[pos]))
                            {
                                val = 1;
                            }
                        }
                        if (val < 0)
                        {
                            if (EN.Lista_Registros.Count < 2)
                            {
                                REG.Reg_sig = EN.Lista_Registros[index].Reg_dir;


                                EN.Ptr_datos = dimeTamArch(nombre);



                                foreach (CEntidad ent in lista_Ent)
                                {
                                    if (EN.Nombre == ent.Nombre)
                                    {
                                        ent.Prt_ent_sig = EN.Prt_ent_sig;
                                        break;
                                    }
                                }

                                archivo.modifica_ent_sig(EN.Ptr_entidad, name, EN);
                                index++;
                                EN.Lista_Registros.Insert(index - 1, REG);

                                if (modifica == 1)
                                {
                                    archivo.modifica_reg_sig(REG.Reg_dir, nombre, EN, REG);
                                }
                                else
                                {
                                    archivo.insertaRegistro(REG, nombre, EN);
                                }



                                archivo.modifica_reg_sig(REG.Reg_dir, nombre, EN, REG);
                                band = 1;

                                //MessageBox.Show("caso 1");
                            }
                            else
                            {
                                if (index < 1)
                                {
                                    EN.Ptr_datos = REG.Reg_dir;
                                    REG.Reg_sig  = EN.Lista_Registros[0].Reg_dir;

                                    archivo.modifica_ent_sig(EN.Ptr_entidad, Name, EN);

                                    if (modifica == 1)
                                    {
                                        archivo.modifica_reg_sig(REG.Reg_dir, nombre, EN, REG);
                                    }
                                    else
                                    {
                                        archivo.insertaRegistro(REG, nombre, EN);
                                    }

                                    archivo.modifica_reg_sig(REG.Reg_dir, nombre, EN, REG);
                                    EN.Lista_Registros.Insert(0, REG);
                                    band = 1;

                                    //MessageBox.Show("caso 2");
                                }
                                else
                                {
                                    REG.Reg_sig = EN.Lista_Registros[index].Reg_dir;
                                    EN.Lista_Registros[index - 1].Reg_sig = REG.Reg_dir;
                                    index++;

                                    if (modifica == 1)
                                    {
                                        EN.Lista_Registros.Insert(index - 1, REG);
                                    }
                                    else
                                    {
                                        EN.Lista_Registros.Insert(index - 1, REG);
                                        archivo.insertaRegistro(REG, nombre, EN);
                                    }



                                    archivo.modifica_reg_sig(REG.Reg_dir, nombre, EN, REG);
                                    archivo.modifica_reg_sig(EN.Lista_Registros[index - 2].Reg_dir, nombre, EN, EN.Lista_Registros[index - 2]);
                                    band = 1;

                                    //MessageBox.Show("caso 3");
                                }
                            }
                            break;
                        }
                        index++;
                    }
                    if (band == 0)
                    {
                        int count = EN.Lista_Registros.Count();

                        EN.Lista_Registros[count - 1].Reg_sig = REG.Reg_dir;
                        EN.Lista_Registros.Add(REG);

                        if (modifica == 1)
                        {
                            archivo.modifica_reg_sig(REG.Reg_dir, nombre, EN, REG);
                        }
                        else
                        {
                            archivo.insertaRegistro(REG, nombre, EN);
                            archivo.modifica_reg_sig(REG.Reg_dir, nombre, EN, REG);
                            archivo.modifica_reg_sig(EN.Lista_Registros[count - 1].Reg_dir, nombre, EN, EN.Lista_Registros[count - 1]);
                        }

                        //MessageBox.Show("caso 4");
                    }
                }
            }
        }