private void aplicarAumento() { foreach(var key in mapaAtributos.Keys){ Atributo attr = mapaAtributos[key]; String attrAumentado=""; foreach (Atributo hijo in attr.getDependientes()) { if (attrAumentado.Contains(hijo.getValor().value())) continue; if (hijo != attr.getDependientes().First()) { attrAumentado += ","+hijo.getValor(); } else { attrAumentado += hijo.getValor(); } } KString llave = new KString(attrAumentado); //System.Diagnostics.Debug.WriteLine(attr.getValor() + ">" + attrAumentado + (mapaAtributos.ContainsKey(llave) ? " esta en mapa " : " no esta en mapa")); if (mapaAtributos.ContainsKey(llave)) { mapaAtributos[llave].addDeterminante(attr); //System.Diagnostics.Debug.WriteLine("AGREAGDO: " + attr.getValor() + ">" + attrAumentado); } } aplicarReflexividad(); aplicarTransitividad(); //determinarLlavesCandidatas(); //determinarClavePrimaria(); }
protected override string GetSQLCondition(string pattern) { string val = new KString(Value).SqlEscaped.Trim(); return(pattern + " LIKE '" + Replacer.ReplaceRusLat(val) + "%' OR " + pattern + "Reverse LIKE '" + Env.ReverseString(Replacer.ReplaceRusLat(val)) + "%'"); }
public Atributo(String valor) { this.esAttrMultivaluado = (valor.ToUpper().IndexOf("<M>") != -1); this.esAtConjunto = (valor.IndexOf(",") != -1); this.valor = new KString(esAttrMultivaluado ? valor.Remove(valor.IndexOf('<')) : valor); //System.Diagnostics.Debug.WriteLine(this.valor); peso = 1; if (esAtConjunto) { peso = valor.Split(',').Count(); } this.determina = new List<Atributo>(); this.depende = new List<Atributo>(); }
public Atributo(KString kvalue) { this.valor = kvalue; String val = kvalue.value(); this.esAttrMultivaluado = (val.ToUpper().IndexOf("<M>") != -1); this.esAtConjunto = (val.IndexOf(",") != -1); //System.Diagnostics.Debug.WriteLine(this.valor); peso = 1; if (esAtConjunto) { peso = val.Split(',').Count(); } this.determina = new List<Atributo>(); this.depende = new List<Atributo>(); }
public void setValor(KString val) { this.valor = val; }
private void testKstring() { KString str1 = new KString("A,B,C,D"); KString str2 = new KString("C,F,G,W"); KString str3 = new KString("A,B,P,Q"); KString str4 = new KString("D,B,A,C"); //String lalal = "A"; System.Diagnostics.Debug.WriteLine("A,B,C,D - C,F,G,W = " + (str1 - str2).value() + "\n" + "A,B,C,D + A,B,P,Q = " + (str1 + str3).value() + "\nA,B,C,D == D,B,A,C" + (str1 == str4 ? " True": " FALSE") ); System.Diagnostics.Debug.WriteLine(str1 + " equals " + str4 + " =" + (str1.Equals(str4) ? " true" : " false")); }
private void crearConjuntos() { int cantidadOriginales = mapaAtributos.Count; List<KString> unitarios = new List<KString>(); /*TODOS*/ String nuevo = ""; foreach (var key in mapaAtributos.Keys) { Atributo attr = mapaAtributos[key]; if (!attr.esConjunto() && !attr.esMultivaluado()) { nuevo += (nuevo == "") ? attr.getValor().value() : "," + attr.getValor(); unitarios.Add(attr.getValor()); } } Atributo atributoConj = new Atributo(nuevo); if (!mapaAtributos.ContainsKey(atributoConj.getValor())) { mapaAtributos.Add(atributoConj.getValor(), atributoConj); System.Diagnostics.Debug.WriteLine("Agregado: " + nuevo); } /*Subconjuntos pequeños*/ KString TODOS = new KString(nuevo); for (int i = 2; i < cantidadOriginales - 1; i++) { List<KString> nuevos = combinacion(unitarios, i); foreach (KString nuevoCon in nuevos) { if (!mapaAtributos.ContainsKey(nuevoCon)) { mapaAtributos.Add(nuevoCon, new Atributo(nuevoCon)); } } } /* List<String> nuevos = new List<String>(); foreach (var atributoAQuitar in mapaAtributos.Keys) { nuevo = ""; foreach (var key in mapaAtributos.Keys) { if (atributoAQuitar == key) continue; Atributo attr = mapaAtributos[key]; if (!attr.esConjunto() && !attr.esMultivaluado()) { nuevo += (nuevo == "") ? attr.getValor().value() : "," + attr.getValor(); } } nuevos.Add(nuevo); } foreach (String val in nuevos) { Atributo atributoSubConj = new Atributo(val); if (!mapaAtributos.ContainsKey(atributoSubConj.getValor())) { mapaAtributos.Add(atributoSubConj.getValor(), atributoSubConj); System.Diagnostics.Debug.WriteLine("Agregado: " + val); } }*/ }
private List<KString> combinacion(List<KString> lista, int orden) { if (orden == 1) return lista; List<KString> listaSalida = new List<KString>(); List<KString> nodosComb = new List<KString>(); String nuevo = ""; foreach (KString nodo in lista) { nodosComb.Add(nodo); for (int j = 0; j < lista.Count - 1; j++) { nuevo = nodo.value(); for (int i = 0; i < orden-1; i++) { KString nod = getNodoACombinar(lista, nodosComb); if ((Object)nod == null) break; nodosComb.Add(nod); nuevo += "," + nod.value(); } if (!(nuevo.IndexOf(',') == -1)) { KString nuevoValor = new KString(nuevo); if (!listaSalida.Contains(nuevoValor)) listaSalida.Add(nuevoValor); } } nodosComb.Clear(); } return listaSalida; }
private void button1_Click_1(object sender, EventArgs e) { String entrada = tf_entrada.Text.ToUpper(); switch (cb_tipo.SelectedIndex) { //Agregar Relacion case 0: { if (relacionValida(entrada)) { listaRelaciones.Items.Add(entrada); String[] elementos = entrada.Split(','); confPB(elementos.Length); foreach (String elem in elementos) { Atributo attr = new Atributo(elem); mapaAtributos.Add(attr.getValor(), attr); barra_progreso.PerformStep(); } crearConjuntos(); barra_progreso.Value = 0; cb_tipo.SelectedIndex = 1; tf_entrada.Text = ""; etiqueta_estado.Text = "Esperando Dependencia..."; } else { MessageBox.Show("Datos invalidos, porfavor revise: "+entrada+"\nFormato válido: X,Y<m>,Z,W<m>"); } break; } //Agregar Dependencia case 1: { if (dependenciaValida(entrada)) { String[] deps = entrada.Split('/'); foreach (String entradaD in deps) { listaDependencias.Items.Add(entradaD); String[] partes = entradaD.Split('>'); KString determinantes = new KString(partes[0]); KString dependientes = new KString(partes[1]); Atributo attrDeterminate; Atributo attrDependiente; if (mapaAtributos.ContainsKey(determinantes)) { attrDeterminate = mapaAtributos[determinantes]; } else { attrDeterminate = new Atributo(determinantes); mapaAtributos.Add(determinantes, attrDeterminate); } if (mapaAtributos.ContainsKey(dependientes)) { attrDependiente = mapaAtributos[dependientes]; } else { attrDependiente = new Atributo(dependientes); mapaAtributos.Add(dependientes, attrDependiente); } /*al agregar un determinante a un atributo internamente se agrega al atributo como dependiente. */ attrDependiente.addDeterminante(attrDeterminate); } tf_entrada.Text = ""; etiqueta_estado.Text = "Listo"; btn_ejecutar.Enabled = true; } else { MessageBox.Show("Datos invalidos, porfavor revise: " + entrada + "\nFormato válido: X,Y>W,Z[/Q,P>R,S]"); } break; } }//FIn Switch }