/* 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); }
/**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); }
/**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()); }