//Método para inicializar la instancia de secundario public void CreaSec(char t, BinaryWriter bw, long tam, int LD, string atributo) { sec = new Secundario(t, atributo); sec.TamPrin1 = tam; secundarios.Add(sec); sec.CreaPrincipal(bw, LD); }
//Llama al form que mostrará la información de los registros de una entidad private void registroToolStripMenuItem_Click(object sender, EventArgs e) { if (ListNombres.Text == "" || ListNombres.Text == " ") { MessageBox.Show("Selecciona la entidad"); } else { ModEnt.Enabled = ModifAtrib.Enabled = false; //Busca la entidad seleccionada EncuentraEntidad(); Registros reg = new Registros(); //Se crea el nuevo form reg.EntAux1 = EntReg; //Se guarda la entidad que se selecionó reg.CreaRegistro(reg.EntAux1); //Llama al método que crea el archivo //reg.CreaColumnas(); //Crea las columnas dependiendo de los atributos que tiene la entidad reg.ShowDialog(); //Cambia la dirección de datos if (reg.LRegistros1.Count > 0) { EntReg.DD = reg.LRegistros1[0].DR; for (int i = 0; i < EntReg.LAtributo1.Count; i++) { Atributo a = EntReg.LAtributo1[i]; //Checa índice primario if (a.TI == 2) { a.DI = reg.Ind1.TamPrinPrim1; } if (a.TI == 3) { //asignar la dirección de bloque principal for (int j = 0; j < reg.Ind1.Secundarios.Count; j++) { Secundario s = reg.Ind1.Secundarios[j]; if (a.NA == s.NombreAtrib1) { a.DI = s.TamPrin1; } } } if (a.TI == 4) { a.DI = reg.CabAr; } } //AgregaAtribDG(); //AgregaFila(); Actualiza(); } } }
//Método que lee agrega secundarios a la lista de secundarios public void AgregaSec(char t, long tam, int LD, string atributo) { // t es el tipo de dato y atributo es el nombre del atributo sec = new Secundario(t, atributo); sec.TamPrin1 = tam; secundarios.Add(sec); }
/*Asignar en memoria datos del indice secundario*/ //checadoooooo public void asignarMemoriaIndice2() { bool ban = true; bool ban2 = true; object o = new object(); long data = 0; long dir = 0; long temp; Fichero = new FileStream(nombreArchivoIDX, FileMode.Open, FileAccess.Read); binaryReader = new BinaryReader(Fichero); binaryReader.BaseStream.Seek(entidades[pos].atributos[indice2].direccion_Indice, SeekOrigin.Begin); while (ban) { switch (entidades[pos].atributos[indice2].tipo_Dato) { case 'E': o = binaryReader.ReadInt32(); break; case 'C': char[] c = binaryReader.ReadChars(entidades[pos].atributos[indice2].longitud_Tipo); o = new string(c); break; } Secundario s1 = new Secundario(o); entidades[pos].secundarios.Add(s1); data = binaryReader.ReadInt64(); entidades[pos].secundarios.Last().listSecD.Last().getClave = o; entidades[pos].secundarios.Last().listSecD.Last().getDireccion = data; entidades[pos].secundarios.Last().getIteracion += 1; temp = Fichero.Position; if (data != -1) { binaryReader.BaseStream.Seek(data, SeekOrigin.Begin); while (ban2) { dir = binaryReader.ReadInt64(); entidades[pos].secundarios.Last().listSecD.Last().agregarBloquesDirecciones(-1); entidades[pos].secundarios.Last().listSecD.Last().listSecDirs.Last().listIndiceSecundario.Last().getDireccion = dir; entidades[pos].secundarios.Last().listSecD.Last().listSecDirs.Last().getIteracion += 1; for (int i = 1; i < numeroDeIteracion(8); ++i) { dir = binaryReader.ReadInt64(); entidades[pos].secundarios.Last().listSecD.Last().listSecDirs.Last().addIndice(-1); entidades[pos].secundarios.Last().listSecD.Last().listSecDirs.Last().listIndiceSecundario.Last().getDireccion = dir; if (dir != -1) { entidades[pos].secundarios.Last().listSecD.Last().listSecDirs.Last().getIteracion += 1; } } dir = binaryReader.ReadInt64(); entidades[pos].secundarios.Last().listSecD.Last().listSecDirs.Last().getApSiguiente = dir; if (dir == -1) { ban2 = false; } else { binaryReader.BaseStream.Seek(dir, SeekOrigin.Begin); } } } binaryReader.BaseStream.Seek(temp, SeekOrigin.Begin); for (int i = 1; i < numeroDeIteracion(entidades[pos].atributos[indice2].longitud_Tipo); ++i) { switch (entidades[pos].atributos[indice2].tipo_Dato) { case 'E': o = binaryReader.ReadInt32(); break; case 'C': char[] c = binaryReader.ReadChars(entidades[pos].atributos[indice2].longitud_Tipo); o = new string(c); break; } entidades[pos].secundarios.Last().AddIndice(o); data = binaryReader.ReadInt64(); entidades[pos].secundarios.Last().listSecD.Last().getClave = o; entidades[pos].secundarios.Last().listSecD.Last().getDireccion = data; if (data != -1) { entidades[pos].secundarios.Last().getIteracion += 1; } } //binaryReader.BaseStream.Seek(temp, SeekOrigin.Begin); data = binaryReader.ReadInt64(); entidades[pos].secundarios.Last().getApuntadorSig = data; if (data == -1) { ban = false; } else { binaryReader.BaseStream.Seek(data, SeekOrigin.Begin); } } Fichero.Close(); /*MessageBox.Show("El siguiente lugar donde se escribira sera en la posicion"); * MessageBox.Show(entidades[pos].secundarios.Last().GetCajon.ToString());*/ //Leer todas la direcciones por separado for (int i = 1; i < entidades[pos].secundarios.Last().getIteracion; ++i) { Fichero = new FileStream(nombreArchivoIDX, FileMode.Open, FileAccess.Read); binaryReader = new BinaryReader(Fichero); binaryReader.BaseStream.Seek(entidades[pos].secundarios.Last().listSecD[i].getDireccion, SeekOrigin.Begin); for (int j = 0; j < numeroDeIteracion(8); ++j) { dir = binaryReader.ReadInt64(); if (j == 0) { entidades[pos].secundarios.Last().listSecD[i].agregarBloquesDirecciones(-1); entidades[pos].secundarios.Last().listSecD[i].listSecDirs.Last().listIndiceSecundario.Last().getDireccion = dir; entidades[pos].secundarios.Last().listSecD[i].listSecDirs.Last().getIteracion += 1; } else { entidades[pos].secundarios.Last().listSecD[i].listSecDirs.Last().addIndice(-1); entidades[pos].secundarios.Last().listSecD[i].listSecDirs.Last().listIndiceSecundario.Last().getDireccion = dir; if (dir != -1) { entidades[pos].secundarios.Last().listSecD[i].listSecDirs.Last().getIteracion += 1; } } } dir = binaryReader.ReadInt64(); Fichero.Close(); } }
/************************AQUI EMPIEZA HASH*******************************************/ /*Asignar memoria al indice hash*/ public void asignarMemoriaIndiceHash() { object o = new object(); long data = 0; long dir = 0; int clave = 0; long temp; Fichero = new FileStream(nombreArchivoIDX, FileMode.Open, FileAccess.Read); binaryReader = new BinaryReader(Fichero); binaryReader.BaseStream.Seek(entidades[pos].atributos[indice2].direccion_Indice, SeekOrigin.Begin); ///Creo los primeros 7 cajones Secundario s1 = new Secundario(-1); entidades[pos].hash.Add(s1); for (int i = 1; i < 7; ++i) { entidades[pos].hash.Last().AddIndice(-1); } ///Leo las 7 direcciones for (int i = 0; i < 7; ++i) { data = binaryReader.ReadInt64(); entidades[pos].hash.Last().listSecD[i].getDireccion = data; } Fichero.Close(); ///Despues leemos los bloques de clave y direccion recorriendo el diccionario for (int i = 0; i < 7; i++) { if (entidades[pos].hash.Last().listSecD[i].getDireccion != -1) { Fichero = new FileStream(nombreArchivoIDX, FileMode.Open, FileAccess.Read); binaryReader = new BinaryReader(Fichero); binaryReader.BaseStream.Seek(entidades[pos].hash.Last().listSecD[i].getDireccion, SeekOrigin.Begin); int cant = numeroDeIteracion(entidades[pos].atributos[indice2].longitud_Tipo); entidades[pos].hash.Last().listSecD[i].agregarBloquesDirecciones(-1); for (int j = 1; j < cant; j++) { entidades[pos].hash.Last().listSecD[i].listSecDirs.Last().addIndice(-1); } for (int j = 0; j < cant; j++) { clave = binaryReader.ReadInt32(); entidades[pos].hash.Last().listSecD[i].listSecDirs.Last().listIndiceSecundario[j].getClave = clave; data = binaryReader.ReadInt64(); entidades[pos].hash.Last().listSecD[i].listSecDirs.Last().listIndiceSecundario[j].getDireccion = data; if (data != -1) { entidades[pos].hash.Last().listSecD[i].listSecDirs.Last().getIteracion += 1; } } data = binaryReader.ReadInt64(); entidades[pos].hash.Last().listSecD[i].listSecDirs.Last().getApSiguiente = data; Fichero.Close(); } } }