예제 #1
0
        /* Crea el indice primario correspondiente al bloque*/
        public CIndice generaIndPri(CBloque nuevoB)
        {
            CIndice nuevo = new CIndice();
            byte[] indAux = null;
            int num, tamInd = 0;
            long num2;

            switch (nuevoB.getTipoCA())
            {
                case 3://Clave Primaria de Tipo entera
                    num = BitConverter.ToInt32(nuevoB.dameClave(), 0);
                    indAux = BitConverter.GetBytes((num / 10) * 10);
                    tamInd = 4;
                break;
                case 5://Clave primaria de tipo Long
                    num2 = BitConverter.ToInt64(nuevoB.dameClave(), 0);
                    indAux = BitConverter.GetBytes((num2 / 10) * 10);
                    tamInd = 8;
                break;
                case 7://Clave Primaria de Tipo Cadena
                    indAux = new byte[1];//Se saca el primer caracter
                    indAux[0] = nuevoB.dameClave()[0];
                    tamInd = 1;
                break;
            }

            nuevo.setTipoInd(nuevoB.getTipoCA());
            nuevo.setTamIndPri(tamInd);
            nuevo.setIndPrim(indAux);
       
            return (nuevo);
        }
예제 #2
0
        /**Se lee del archivo de trabajo un objeto de la clase CIndice, que sera utilzado
         * en la organización secuencial indexada*/
        public CIndice LeerIndicePrimario(long pos)
        {
            BinaryReader br;
            CIndice indPri = new CIndice();

            br = getBr();

            br.BaseStream.Seek(pos, SeekOrigin.Begin);

            indPri.setTipoInd(br.ReadInt32());
            indPri.setTamIndPri(br.ReadInt32());
            indPri.setIndPrim(br.ReadBytes(indPri.getTamIndPri()));
            indPri.setSigInd(br.ReadInt64());
            indPri.setCabBloques(br.ReadInt64());
            indPri.setDirInd(br.ReadInt64());

            return (indPri);
        }
예제 #3
0
        /**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());
        }