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