/* * Metodo que se encarga de transformar la cadena inicial, * remplaza todas las variables de la cadena a valores * que se pasan por una lista */ public string transformarCadena(List <string> varval, Coleccion coleccion) { int indexOfVar = 0; string[] cadenaTrans = varval.ToArray(); //Se recorre el arreglo de la cadena principal for (int x = 0; x < cadenaTrans.Length; x++) { //Si una variable de la cadena principal esta en la lista de variables indexOfVar = coleccion.IndexOf(cadenaTrans[x]); if (indexOfVar >= 0) { //Buscamos que no este entre comillas dobles, ya que entonces se trata de una constante cadena if ((x - 1) >= 0 && (x + 1) < cadenaTrans.Length && cadenaTrans[x - 1] == "\"" && cadenaTrans[x + 1] == "\"") { continue; } //Si esta entre comilla simple entonces debe ser una variable de tipo String if ((x - 1) >= 0 && (x + 1) < cadenaTrans.Length && cadenaTrans[x - 1] == "'" && cadenaTrans[x + 1] == "'") { cadenaTrans[x] = coleccion.ObtenerCadena(cadenaTrans[x]); } //Si no entonces es una variable de tipo numerico else { cadenaTrans[x] = coleccion.ObtenerEntero(cadenaTrans[x]).ToString(); } } else { Debug.WriteLine("No existe valor para una variable"); } } return(String.Join("", cadenaTrans)); }
static void Main(string[] args) { string trans = ""; string cadena = ""; //cadena = "var1-var2+\"var2\"-\"var1\"*54/'var6'"; //cadena = "fav2+fav3/34+xcv23*rev1+rev1+xc-rev1fav3"; //cadena = "(x = 1 + 21 * y / 3000) / (variable + variable)"; //cadena = "52+\"var2\""; cadena = "var1 = var2 + var3"; //cadena = "var1 = var2 + 'var2'"; //cadena = "xx=65&&(variable1+variable2)=x/y"; //cadena = "(xx23v+var2/34)||(65&&(variable1+variable1/23*ram243)=(x/y))"; //cadena = "SELECT * \"FROM\" 'tabla' WHERE 'idTabla' = 'valor'+24-32/var2-\"var2\" * 'var2'"; //cadena = "'var1 ' + 57 "; List <String> varval = new List <string>(); //List<string> variables = new List<string>(); Coleccion variables = new Coleccion(); List <string> remplazos = new List <string>(); Cadena classCadena = new Cadena(cadena); Console.WriteLine("Cadena inicial: \n" + cadena + "\n"); //Separa la cadena en variables, valores y operadores varval = classCadena.splitVariablesOperadores(); //Separa las variables del resto de la cadena variables = classCadena.comprobarVariableValor(varval); variables.InsertarEntero("var1", 1); variables.InsertarEntero("var2", 2); variables.InsertarEntero("var2", 3); Console.WriteLine("\n"); //Retorna la cadena transformada trans = classCadena.transformarCadena(varval, variables); Console.WriteLine("Cadena Transformada"); Console.WriteLine(trans); Console.ReadKey(); }
/* * Metodo que recibe una lista y compara cada elemento para conocer si es una variable o un valor * para despues guardar cada una de las variables en una nueva lista. */ public Coleccion comprobarVariableValor(List <string> varval) { Coleccion coleccion = new Coleccion(); int num = 0; string cad = ""; List <string> variables = new List <string>(); for (int x = 0; x < varval.Count; x++) { if (varval[x] != "(" && varval[x] != ")" && varval[x] != " " && varval[x] != "'" && varval[x] != "\"" && varval[x] != "+" && varval[x] != "-" && varval[x] != "*" && varval[x] != "/" && varval[x] != "=" && varval[x] != "&&" && varval[x] != "||") { if (!int.TryParse(varval[x], out num)) { //si no es el ultimo valor de la lista if ((x + 1) < varval.Count && (x - 1) >= 0) { //Si esta entre comillas entonces no es una variable, es una cadena if (varval.ElementAt(x - 1) == "\"" && varval.ElementAt(x + 1) == "\"") { continue; } //Si esta entre comillas simples, entonces es una variable de tipo string else if (varval.ElementAt(x - 1) == "'" && varval.ElementAt(x + 1) == "'") { coleccion.Agregar(varval[x], cad.GetType()); continue; } } //No es un numero entonces es una cadena(variable) que tampoco esta entre comillas simple, entonces //es una variable de tipo numerico coleccion.Agregar(varval[x], num.GetType()); } } } return(coleccion); }