コード例 #1
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
        /**Crea cada uno de los nodos de arbol en forma recursiva, asindo un recorrido en preorden
         * y va agranagando todos estos nodos al nuevo archivo*/
        public long generaArbolRec(CArchivo aO, CArchivo aD, int tamBloque, long dirCab)
        {
            CNodo nodoAux, nuevoNodo;
            CBloque bloqueAux,bloqueNuevo;
            long dirNodo = -1;
            int LS;

            if (dirCab != -1)
            {
                nodoAux = aO.leerNodo(dirCab);
                nuevoNodo = creaNodo(aO,aD,nodoAux);
                
                if (nodoAux.getTipoNodo() == HOJA || nodoAux.getTipoNodo() == RAIZHOJA)
                    LS = nodoAux.getNumElemnt();
                else
                    LS = nodoAux.getNumElemnt() + 1;

                for (int i = 0; i < LS; i++)
                    if (nodoAux.getTipoNodo() == HOJA || nodoAux.getTipoNodo() == RAIZHOJA)
                    {
                        bloqueAux = aO.leerBloque(nodoAux.getAtDirNodo(i), tamBloque);
                        bloqueNuevo = new CBloque();
                        bloqueNuevo.setBloque(bloqueAux.getBloque());
                        bloqueNuevo.setTamBlo(tamBloque);
                        bloqueNuevo.setDir(aD.ENDF());
                        aD.EscribeBloque(bloqueNuevo, aD.ENDF());
                        nuevoNodo.setAtDirNodo(i, bloqueNuevo.getDir());
                    }
                    else
                       nuevoNodo.setAtDirNodo(i,generaArbolRec(aO,aD,tamBloque,nodoAux.getAtDirNodo(i)));

               aD.escribeNodo(nuevoNodo);
               dirNodo = nuevoNodo.getDir();
             
            }

            return(dirNodo);   
        }
コード例 #2
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
        private CNodo creaNodo(CArchivo aO, CArchivo aN, CNodo nodoAux)
        {
            CNodo nuevo;

            nuevo = new CNodo(nodoAux.getTipoNodo(), nodoAux.getGrado());

            nuevo.setNumElemnt(nodoAux.getNumElemnt());
            nuevo.setTipoClave(nodoAux.getTipoClave());

            for(int i = 0; i< nodoAux.getNumElemnt(); i++)
            {
                nuevo.setAtDirClaves(i, aN.ENDF());
                nuevo.escribeClave(nodoAux.getAtClave(i), aN.ENDF(), nodoAux.getTipoClave(), aN);
            }

            nuevo.setDir(aN.ENDF());
            aN.escribeNodo(nuevo);

            return (nuevo);

        }
コード例 #3
0
        /**Dobla la tabla, eliminado la mitad de entradas de la tabla hash dinamica
           y actulizando los espejos.
         */
        public void Doblate(CArchivo file)
        {
            CEntrada entAux;
            int ultimaEnt;

            ultimaEnt = (listaEntradas.Count / 2) - 1;
            entAux = getAtEntrada(ultimaEnt);

            entAux.setSigEntrada(-1);
            decPrefAsociacion();

            for (int i = (ultimaEnt * 2) + 1; i > ultimaEnt; i--)
                listaEntradas.Remove(getAtEntrada(i));
            
            file.EscribeEntrada(entAux);
            file.EscribeTablaHashExt(this);
            EstableceEspejos(file);
        }
コード例 #4
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
 /**Función de Mantenimiento para Arboles B+*/
 public void MantenimientoArbolBplus(CArchivo fileOri, CArchivo fileNew, CNodoEntidad ent, CNodoEntidad entC, int tamBloque)
 {
     if (ent.getApCabDatos() != -1)
     {
         entC.setApCabDatos(generaArbolRec(fileOri, fileNew, tamBloque, ent.getApCabDatos()));
         fileNew.escribeEntidad(entC, entC.getDir());
     }
 }
コード例 #5
0
        private void menuArchNuevo_Click(object sender, EventArgs e)
        {
            string name;
            SaveFileDialog nuevoDic = new SaveFileDialog();

            nuevoDic.Title = "Crear nuevo Diccionario";
            nuevoDic.Filter = "Archivo |.*dic";
            nuevoDic.FileName = "Nombre";

            if (nuevoDic.ShowDialog() == DialogResult.OK)
            {
                name = nuevoDic.FileName+".dic";
                archivo = new CArchivo(name);
                btAddEntidad.Enabled = true;
                btDeleteEnt.Enabled = false;
                btEditarEntidad.Enabled = false;
                btAgregarAtri.Enabled = false;
                btEditaAtributo.Enabled = false;
                btElimarAtri.Enabled = false;
                tablaEntidades.Rows.Clear();
                TablaDeAtributos.Rows.Clear();
            }
        }
コード例 #6
0
ファイル: CNodo.cs プロジェクト: miguellgt/file-structures
        /**\brief Inseta una clave en el nodo en forma ordenada*/
        public void insClaveOrd(Object clave, CBloque bloque, CArchivo file, int posClave)
        {
            //Movimiento de claves, dirClaves y dirNodos
            for (int i = getNumElemnt(); i > posClave; i--)
            {
                claves[i] = claves[i - 1];
                dirClaves[i] = dirClaves[i - 1];
                
                if (getTipoNodo() == 1 || getTipoNodo() == 4)//Si la clave a insertar es diferente a una hoja
                    dirNodos[i+1] = dirNodos[i];
                else
                    dirNodos[i] = dirNodos[i - 1];
            }

            if (getTipoNodo() == 2 || getTipoNodo() == 3)//La clave se va a insertar en una hoja o en la raizHoja
            {
                dirNodos[posClave] = file.ENDF();
                file.EscribeBloque(bloque, file.ENDF());
            }

            claves[posClave] = clave;
            incNumElem();

            if (getTipoNodo() == 2 || getTipoNodo() == 3)//Si la clave a insertar es diferente a una raiz o pagima
            {
                dirClaves[posClave] = file.ENDF();
                escribeClave(clave, file.ENDF(), bloque.getTipoCA(), file);
            }
        }
コード例 #7
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
        private void FormOrg_FormClosed(object sender, FormClosedEventArgs e)
        {
            CNodoEntidad entidadAux, entCopia;
            CArchivo aO, aD;
            string nameFileO, nameFileN;
            int despCE, tipoD, tamCE, tamBloq, despCB, tipoCB, tamCB; ;

            despCE = tipoD = tamCE = tamBloq = despCB = tipoCB = tamCB = 0;

            aO = getArchivo();
            aD = new CArchivo("Copia");//Se crea el nuevo archivo y se almacena en un directorio temporal
            
            nameFileO = aO.getNameFile();//Se obtienen la ruta de la organizacion de trabajo
            nameFileN = aD.getNameFile();//Se Obtiene la ruta del donde se hara el mantenimiento

            creaCopia(aO, aD);//Se caraga el diccionario de datos que utilizo en la organiacion
            aO.AbrirArchivo();//Abrir los flujos de archivos para operar en ellos
            aD.AbrirArchivo();

            entidadAux = aO.getListaEntidad().getCabListEnt();
            entCopia = aD.getListaEntidad().getCabListEnt();

            while (entidadAux != null)//Se visitan todas las entidades de la organizacion
            {
                if (entidadAux.getApCabDatos() != -1)
                {
                    DameCE(entidadAux, ref despCE, ref tipoD, ref tamCE, ref tamBloq, ref despCB, ref tipoCB, ref tamCB, null);
                 
                    switch(getTipoOrg())
                    {
                        case 1://Mantenimiento en Organizacion Secuencial
                            MantenimientoSec(aO, aD, entidadAux, entCopia, tamBloq);
                        break;
                        case 2://Manteniemito en Organizacion Secuencial Indexada
                            MantenimientoSecInd(aO, aD, entidadAux, entCopia, tamBloq);
                        break;
                        case 3://Mantenimiento en Arboles B+
                            MantenimientoArbolBplus(aO, aD, entidadAux, entCopia, tamBloque);
                        break;
                        case 4://Mantenimiento en Hash Estática
                            MantenimientoHashEstatica(aO, aD, entidadAux, entCopia, tamBloque);
                        break;
                        case 5://Mantenimiento en hash Dinámica
                            MantenimientoHashDinamica(aO, aD, entidadAux, entCopia, tamBloque);
                        break;
                    }
                }
                entidadAux = entidadAux.getSigEnt();
                entCopia = entCopia.getSigEnt();
            }

            aO.CerrarArchivo();
            aD.CerrarArchivo();

            File.Delete(nameFileO);//Se elimina la organizacion a la que se le hizo mantenimiento
            File.Move(nameFileN,nameFileO);//Se mueve el archivo creado a la ruta de la orgnizacion que fue mantenida
            //Se conserva el mismo nombre de archivo
        }
コード例 #8
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
        /**Función de Mantenimiento para la Hash Dinamica*/
        private void MantenimientoHashDinamica(CArchivo fileOri, CArchivo fileNew, CNodoEntidad ent, CNodoEntidad entC, int tamBloque)
        {
            CTablaHashExt tH, nuevaTH;
            List<CCubeta> listCub;
            List<int> lE;
            CCubeta nuevaCub;
            long cabDatos;

            cabDatos = ent.getApCabDatos();

            if (cabDatos != -1)
            {
                tH = fileOri.LeerTablaHashExt(cabDatos);
                nuevaTH = creaTabla(tH);

                listCub = dameCubetas(tH);
                foreach (CCubeta c in listCub)
                {
                    lE = buscaEntradas(tH, c);
                    nuevaCub = creaCubeta(c, fileNew, fileOri);

                    foreach (int i in lE)
                        nuevaTH.getAtEntrada(i).setCubeta(nuevaCub);
                }

                foreach (CEntrada e in nuevaTH.getListEntradas())
                {
                    e.setDir(fileNew.ENDF());
                    fileNew.EscribeEntrada(e);
                }

                for (int i = 0; i < nuevaTH.getListEntradas().Count - 1; i++)
                {
                    nuevaTH.getAtEntrada(i).setSigEntrada(nuevaTH.getAtEntrada(i + 1).getDir());
                    fileNew.EscribeEntrada(nuevaTH.getAtEntrada(i));
                }

                nuevaTH.setCabEntradas(nuevaTH.getAtEntrada(0).getDir());
                nuevaTH.setDir(fileNew.ENDF());
                fileNew.EscribeTablaHashExt(nuevaTH);
                entC.setApCabDatos(nuevaTH.getDir());
                fileNew.escribeEntidad(entC,entC.getDir());
            }
        }
コード例 #9
0
ファイル: Form1.cs プロジェクト: miguellgt/file-structures
        private void OANueva_Click(object sender, EventArgs e)
        {
            FormOrganizacion dlgOrg = new FormOrganizacion();
            FormOrganizacionSec orgSec;
            FormOrgSecInd orgSecInd;
            ArbolBplus arbol;
            FOrgHashEstatica orgHashEstatica;
            FOrgHashDinamica orgHashDinamica;
            CArchivo aO, aC;
            
            aO = aC = null;

            if (dlgOrg.ShowDialog() == DialogResult.OK)
            {
                aO = new CArchivo(dlgOrg.tbNameDicc.Text);
                aC = new CArchivo(dlgOrg.tbNameDiccOrg.Text);
               
                creaCopia(aO, aC);
               
                switch (dlgOrg.getTipoOrg())
                {
                    case 0://Organizacion secuencial
                        orgSec = new FormOrganizacionSec();
                        orgSec.setArchivo(aC);
                        orgSec.setTipoOrg(1);
                        orgSec.Text = "Organizacion " + (string)dlgOrg.cbOrg.SelectedItem;
                        orgSec.MdiParent = this;
                        orgSec.Show();
                    break;
                    case 1://Organizacion secuencial indexada
                        orgSecInd = new FormOrgSecInd();
                        orgSecInd.MdiParent = this;
                        orgSecInd.setArchivo(aC);
                        orgSecInd.setTipoOrg(2);
                        orgSecInd.Text = "Organizacion " + (string)dlgOrg.cbOrg.SelectedItem;
                        orgSecInd.Show();
                    break;
                    case 2://Organizacion Secuencial indexada implementada con Arboles B+
                        arbol = new ArbolBplus();
                        arbol.MdiParent = this;
                        arbol.setArchivo(aC);
                        arbol.setTipoOrg(3);
                        arbol.Text = "Organizacion " + (string)dlgOrg.cbOrg.SelectedItem;
                        arbol.Show();
                    break;
                    case 3://Oganizacion Hash Estatica
                        orgHashEstatica = new FOrgHashEstatica();
                        orgHashEstatica.MdiParent = this;
                        orgHashEstatica.setArchivo(aC);
                        orgHashEstatica.setTipoOrg(4);
                        orgHashEstatica.Text = "Organizacion " + (string)dlgOrg.cbOrg.SelectedItem;
                        orgHashEstatica.Show();
                    break;
                    case 4://Organizacion Hash Dinámica
                        orgHashDinamica = new FOrgHashDinamica();
                        orgHashDinamica.MdiParent = this;
                        orgHashDinamica.setArchivo(aC);
                        orgHashDinamica.setTipoOrg(5);
                        orgHashDinamica.Text = "Organizacion " + (string)dlgOrg.cbOrg.SelectedItem;
                        orgHashDinamica.Show();
                    break;
                }
            }
        }
コード例 #10
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
        /**Crea un nuevo archivo a partir de alguna organiacion de archivos
          *En el archivo destino, carga todo el diccionario de datos, sin datos*/
        public void creaCopia(CArchivo aO, CArchivo aC)
        {
            CNodoAtributo auxAtri, nuevo = null;
            CNodoEntidad auxEnt, auxEntRel;

            auxEnt = aO.getListaEntidad().getCabListEnt();
            //Copiar las entidades
            while (auxEnt != null)
            {
                aC.AltaEntidad(new CNodoEntidad(auxEnt.getNombre()));
                auxEnt = auxEnt.getSigEnt();
            }

            //Copiar los atributos y sus relaciones de clave foranea
            auxEnt = aO.getListaEntidad().getCabListEnt();
            while (auxEnt != null)
            {
                auxAtri = auxEnt.getCabListAtri();
                while (auxAtri != null)
                {
                    nuevo = new CNodoAtributo();
                    nuevo.setClavePrimaria(auxAtri.getClave());
                    nuevo.setNombre(auxAtri.getNombre());
                    nuevo.setTipo(auxAtri.getTipo());
                    nuevo.setTamaño(auxAtri.getTamaño());
                    nuevo.setEntRel(null);

                    if (auxAtri.getEntRel() != null)
                    {
                        string entRel = auxAtri.getEntRel().getNombre();
                        auxEntRel = aC.getListaEntidad().getCabListEnt();

                        for (; auxEntRel != null; auxEntRel = auxEntRel.getSigEnt())
                            if (auxEntRel.getNombre().CompareTo(entRel) == 0)
                                break;

                        nuevo.setEntRel(auxEntRel);
                        nuevo.setApEntRel(auxEntRel.getDir());
                    }

                    aC.AltaAtributo(nuevo, auxEnt.getNombre());
                    auxAtri = auxAtri.getSigAtri();
                }
                auxEnt = auxEnt.getSigEnt();
            }
        }
コード例 #11
0
ファイル: Form1.cs プロジェクト: miguellgt/file-structures
        private void OA_Abrir_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFile = new OpenFileDialog();
            FormOrganizacionSec orgSec;
            FormOrgSecInd orgSecInd;
            ArbolBplus arbol;
            FOrgHashEstatica orgHashStatic;
            FOrgHashDinamica orgHashDinamica;
            CArchivo archivo;
            string name;

            openFile.Filter = "Organizacion secuencial|*.sec|"+
                              "Secuencial Indexada|*.osi|"+
                              "Arbol B+|*.bPlus|"+
                              "Hash Estatica|*.hashe|"+
                              "Hash Dinámica|*.hashd";
            
            if( openFile.ShowDialog() == DialogResult.OK)
            {
                name = openFile.FileName;

                switch (openFile.FilterIndex)
                {
                    case 1: //Organizacion secuecial
                        archivo = new CArchivo(name);
                        orgSec = new FormOrganizacionSec();
                        orgSec.setArchivo(archivo);
                        orgSec.setTipoOrg(1);
                        orgSec.Text = "Organizacion Secuencial - " + openFile.SafeFileName.Substring(0,openFile.SafeFileName.Length-4);
                        orgSec.MdiParent = this;
                        orgSec.Show();
                    break;
                    case 2: //Organizacion secuencial indexada
                        archivo = new CArchivo(name);
                        orgSecInd = new FormOrgSecInd();
                        orgSecInd.setArchivo(archivo);
                        orgSecInd.setTipoOrg(2);
                        orgSecInd.Text = "Organizacion Secuencial Idexada - " + openFile.SafeFileName.Substring(0, openFile.SafeFileName.Length - 4); ;
                        orgSecInd.MdiParent = this;
                        orgSecInd.Show();
                    break;
                    case 3://Organizacion Secuencial Indexada con Arboles B+
                        archivo = new CArchivo(name);
                        arbol = new ArbolBplus();
                        arbol.setArchivo(archivo);
                        arbol.setTipoOrg(3);
                        arbol.Text = "Organizacion Secuencial Idexada con Arboles B+ - " + openFile.SafeFileName.Substring(0, openFile.SafeFileName.Length - 6);
                        arbol.MdiParent = this;
                        arbol.Show();
                    break;
                    case 4:
                        archivo = new CArchivo(name);
                        orgHashStatic = new FOrgHashEstatica();
                        orgHashStatic.setArchivo(archivo);
                        orgHashStatic.setTipoOrg(4);
                        orgHashStatic.Text = "Organizacion Hash Estatica - " + openFile.SafeFileName.Substring(0, openFile.SafeFileName.Length - 6);
                        orgHashStatic.MdiParent = this;
                        orgHashStatic.Show();
                    break;
                    case 5:
                        archivo = new CArchivo(name);
                        orgHashDinamica = new FOrgHashDinamica();
                        orgHashDinamica.setArchivo(archivo);
                        orgHashDinamica.setTipoOrg(5);
                        orgHashDinamica.Text = "Organizacion Hash Dinamica - " + openFile.SafeFileName.Substring(0, openFile.SafeFileName.Length - 6);
                        orgHashDinamica.MdiParent = this;
                        orgHashDinamica.Show();
                    break;
                }
            }
         }
コード例 #12
0
        /**Se establcen los espejos de cada entrada*/
        public void EstableceEspejos(CArchivo file)
        {
            int m, tam,i;

            tam = listaEntradas.Count;
            m = tam / 2;

            for (i = 0; i < m; i++)
            {
                listaEntradas[i].setEspejo(m+i);
                listaEntradas[m+i].setEspejo(i);
                file.EscribeEntrada(listaEntradas[i]);
                file.EscribeEntrada(listaEntradas[m+i]);
            }
        }
コード例 #13
0
 /**Se incrementa la tabla de direccionesa 2(i)*/
 public void Incrementate(CArchivo file)
 { 
     CEntrada nueva, aux, aux2;
     int numEntradas, idAux;
     
     numEntradas = listaEntradas.Count;
  
     for (int i = 0; i < numEntradas; i++)
     {
         aux = getAtEntrada(i);
         idAux = aux.getID();
         nueva = new CEntrada(aux.getCubeta(), getAtEntrada(getListEntradas().Count - 1).getID() + 1, file.ENDF());
         insEntrada(nueva);
         file.EscribeEntrada(nueva);
         aux2 = getAtEntrada(getListEntradas().Count - 2);
         aux2.setSigEntrada(nueva.getDir());
         file.EscribeEntrada(aux2);
     }
     
     EstableceEspejos(file);//Se actulizan los espejos
     file.EscribeTablaHashExt(this);
 }
コード例 #14
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
        /**Función de Mantenimiento para la Hash Estatica*/
        private void MantenimientoHashEstatica(CArchivo fileOri, CArchivo fileNew, CNodoEntidad ent, CNodoEntidad entC, int tamBloque)
        {
            CHash tablaHash, nuevaTablaHash;
            long cabTabla;

            cabTabla = ent.getApCabDatos();

            if (cabTabla != -1)
            {
                tablaHash = fileOri.LeerTablaHash(cabTabla);
                nuevaTablaHash = new CHash(fileNew.ENDF(), tablaHash.getTamaño());
                nuevaTablaHash.setNumCubetas(tablaHash.getNumCubetas());

                fileNew.EscribeTablaHash(nuevaTablaHash);

                for (int i = 0; i < tablaHash.getTamaño(); i++)
                    nuevaTablaHash.setAtDirCubeta(i, CopiarListaCubetasRec(tablaHash.getAtDirCubeta(i), fileOri, fileNew, tamBloque));

                fileNew.EscribeTablaHash(nuevaTablaHash);

                entC.setApCabDatos(nuevaTablaHash.getDir());
                fileNew.escribeEntidad(entC, entC.getDir());
            }
        }
コード例 #15
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
 public void setArchivo(CArchivo a)
 {
     archivo = a;
 }
コード例 #16
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
        private long CopiarListaCubetasRec(long dirCub, CArchivo aO, CArchivo aN, int tamBloque)
        {
            Cubeta cubAux, nuevaCub = null;
            CBloque bloqAux;
            long sigCub = -1;

            if( dirCub != -1)
            {
                cubAux = aO.LeerCubetaHashEstatica(dirCub);
                sigCub = CopiarListaCubetasRec(cubAux.getSigCubeta(), aO, aN, tamBloque);

                nuevaCub = new Cubeta(aN.ENDF(), cubAux.getTamaño());

                nuevaCub.setNumDirBloques(cubAux.getNumDirBloques());

                for (int i = 0; i < cubAux.getTamaño(); i++)
                    if ((bloqAux = aO.leerBloque(cubAux.getAtDirBloque(i), tamBloque)) != null)
                    {
                        bloqAux.setTamBlo(tamBloque);
                        nuevaCub.setAtDirBloque(i, aN.ENDF());
                        aN.EscribeBloque(bloqAux, aN.ENDF());
                    }

                nuevaCub.setDir(aN.ENDF());
                nuevaCub.setSigCubeta(sigCub);
                aN.EscribeCubetaHashEstatia(nuevaCub);
                sigCub = nuevaCub.getDir();
            }

            return (sigCub);
        }
コード例 #17
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
        /**Funcionde Matenimiento para  la Organizacion Secuencial*/
        public void MantenimientoSec(CArchivo fileOri, CArchivo fileNew, CNodoEntidad ent, CNodoEntidad entC, int tamBloque)
        {
            List<CBloque> listBloque;

            listBloque = new List<CBloque>();
          
            CopiarSec(fileOri, fileNew, ent.getApCabDatos(), tamBloque, ref listBloque);
            
            entC.setApCabDatos(listBloque[0].getDir());
            fileNew.escribeEntidad(entC, ent.getDir());
        }
コード例 #18
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
        private CCubeta creaCubeta(CCubeta c, CArchivo aN, CArchivo aO)
        {
            CCubeta nuevaCub;
            CBloque bloqAux;

            nuevaCub = new CCubeta(aN.ENDF(), c.getTamaño());

            nuevaCub.setNumDirBloques(c.getNumDirBloques());
            nuevaCub.setPrefAsoc(c.getPrefAsoc());

            for (int i = 0; i < c.getTamaño(); i++)
                if ((bloqAux = aO.leerBloque(c.getAtDirBloque(i), tamBloque)) != null)
                {
                    bloqAux.setTamBlo(tamBloque);
                    nuevaCub.setAtDirBloque(i, aN.ENDF());
                    aN.EscribeBloque(bloqAux, aN.ENDF());
                }

            nuevaCub.setDir(aN.ENDF());
            aN.EscribeCubeta(nuevaCub);

            return (nuevaCub);
        }
コード例 #19
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
        /**Copia toda la lista de bloques al nuevo archivo*/
        public void CopiarSec(CArchivo fileOri, CArchivo fileNew, long dirEnt, int tamBloque, ref List<CBloque> listBloque)
        {
            CBloque bloqueAux, bloqueNuevo;
            
            while (dirEnt != -1)
            {
                bloqueAux = fileOri.leerBloque(dirEnt, tamBloque);
                bloqueNuevo = new CBloque();
                bloqueNuevo.setBloque(bloqueAux.getBloque());
                bloqueNuevo.setTamBlo(tamBloque);
                bloqueNuevo.setDir(fileNew.ENDF());
                fileNew.EscribeBloque(bloqueNuevo, fileNew.ENDF());
                listBloque.Add(bloqueNuevo);
                dirEnt = bloqueAux.getSigBlo();
            }

            for (int i = 0; i < listBloque.Count - 1; i++)
            {
                listBloque[i].setSigBlo(listBloque[i + 1].getDir());
                fileNew.EscribeBloque(listBloque[i], listBloque[i].getDir());
            }
        }
コード例 #20
0
        private void mArchAbrir_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlgAbrir = new OpenFileDialog();
            string name;

            dlgAbrir.Filter = "Archivos |*.dic";
    
            if (dlgAbrir.ShowDialog() == DialogResult.OK)
            {
               name = dlgAbrir.FileName;
               archivo = new CArchivo(name);
               btAddEntidad.Enabled = true;
               btDeleteEnt.Enabled = false;
               btEditarEntidad.Enabled = false;
               btAgregarAtri.Enabled = false;
               btEditaAtributo.Enabled = false;
               btElimarAtri.Enabled = false;
               TablaDeAtributos.Rows.Clear();
               tablaEntidades.Rows.Clear();

               if (archivo.getListaEntidad().getCabListEnt() != null)
               {
                   btDeleteEnt.Enabled = true;
                   btEditarEntidad.Enabled = true;
                   imprimeEntidades();
               }
            }
        }
コード例 #21
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
        /**Función de Mantenimiento para la Organizacion Secuencial indexada*/
        public void MantenimientoSecInd(CArchivo fileOri, CArchivo fileNew, CNodoEntidad ent, CNodoEntidad entC, int tamBloque)
        {
            List<CBloque> listBloque;
            List<CIndice> listaInd;
            CIndice indPri,nuevoInd;
            long aux;
            
            listaInd = new List<CIndice>();
            
            aux = ent.getApCabDatos();
            
            while (aux != -1)
            {
                indPri = fileOri.LeerIndicePrimario(aux);
                nuevoInd = new CIndice();

                nuevoInd.setIndPrim(indPri.getIndPrim());
                nuevoInd.setTamIndPri(indPri.getTamIndPri());
                nuevoInd.setTipoInd(indPri.getTipoInd());

                listBloque = new List<CBloque>();
                
                CopiarSec(fileOri, fileNew, indPri.getCabBloques(), tamBloque, ref listBloque);
                
                nuevoInd.setDirInd(fileNew.ENDF());
                nuevoInd.setCabBloques(listBloque[0].getDir());
                fileNew.EscribeIndicePrimario(nuevoInd);
                
                listaInd.Add(nuevoInd);
                
                aux = indPri.getSigInd();
            }

            for (int i = 0; i < listaInd.Count - 1; i++)
            {
                listaInd[i].setSigInd(listaInd[i + 1].getDirInd());
                fileNew.EscribeIndicePrimario((listaInd[i]));
            }
            
            entC.setApCabDatos(listaInd[0].getDirInd());
            fileNew.escribeEntidad(entC, ent.getDir());
        }
コード例 #22
0
ファイル: CNodo.cs プロジェクト: miguellgt/file-structures
        public void escribeClave(Object clave, long pos, int tipoClave, CArchivo file)
        {
            BinaryWriter bW;

            bW = file.getBw();
            bW.BaseStream.Seek(pos, SeekOrigin.Begin);

            switch (tipoClave)
            {
                case 2://Short
                    bW.Write((short)clave);
                break;
                case 3://Int
                    bW.Write((int)clave);
                break;
                case 4://Float
                    bW.Write((float)clave);
                break;
                case 5://Long 
                    bW.Write((long)clave);
                break;
                case 6://Double
                    bW.Write((double)clave);
                break;
                case 7://Cadena
                    bW.Write((string)clave);
                break;
            }
        }
コード例 #23
0
ファイル: CCubeta.cs プロジェクト: miguellgt/file-structures
        public bool eliminaClave(int pos, CBloque b, CArchivo file)
        {
            CBloque bAux;
            bool res = false;

            if (getNumDirBloques() == 0)
                return (true);

            for (; ; )
            {
                bAux = file.leerBloque(getAtDirBloque(pos), b.getTamBlo());

                if (bAux != null && (b.ComparateTo(bAux) == 0))
                {
                    setAtDirBloque(pos, -1);
                    decNumDirBloques();

                    if (getNumDirBloques() == 0)
                        res = true;

                    break;
                }
                else
                    if (++pos == getTamaño())
                        pos = 0;
            }

            return (res);
        }