/// <summary> /// Obtiene la parte .format de un comando SQL /// </summary> private string GetFormatArguments(List <string> arguments) { string result = string.Empty; TableVariableModel variables = Context.Actual.GetVariablesRecursive(); // Sólo hay un formato si realmente hay argumentos if (arguments.Count > 0) { // Añade el inicio del comando format result += ".format("; // Añade los argumentos for (int index = 0; index < arguments.Count; index++) { // Separador if (index > 0) { result += ", "; } // Argumento: si está en la tabla de variables, se pone la variable, si no está en la tabla de variables // es un getArgument if (variables.Exists(arguments[index])) { result += arguments[index]; } else { result += $"getArgument('{arguments[index]}')"; } } // Añade el fin del comando format result += ")"; } // Devuelve el resultado return(result); }
/// <summary> /// Obtiene los parámetros a partir de una tabla de variables /// </summary> private Dictionary <string, object> GetParameters(TableVariableModel tableVariable) { Dictionary <string, object> parameters = new Dictionary <string, object>(); // Transforma los parámetros foreach (KeyValuePair <string, VariableModel> variable in tableVariable.GetAll()) { parameters.Add(variable.Value.Name, variable.Value.Value); } // Devuelve los parámetros return(parameters); }
/// <summary> /// Convierte un texto con el contenido de las variables /// </summary> public string EvaluateText(ContextModel context, string text, out string error) { TableVariableModel variables = context.GetVariablesRecursive(); string result = ""; // Inicializa los argumentos de salida error = string.Empty; // Mientras quede algo de texto por interpretar ... while (!string.IsNullOrWhiteSpace(text) && string.IsNullOrEmpty(error)) { int start = text.IndexOf(StartVariable); // Interpreta la variable if (start >= 0) { int end; // Añade el inicio al resultado result += text.Left(start); // Quita el token de inicio de la variable del texto text = text.From(start + EndVariable.Length); // Obtiene el índice de la parte final de la variable end = text.IndexOf(EndVariable); // Si se ha encontrado un nombre de variable if (end >= 0) { string variable = text.Left(end); string format = GetFormat(variable); VariableModel symbol; // Quita el nombre de la variable del texto text = text.From(end + EndVariable.Length); // Si se ha encontrado un formato se quita del nombre de la cadena if (!format.IsEmpty()) { variable = variable.Left(variable.Length - format.Length - 1); } // Interpreta la cadena symbol = variables.Get(variable); // Si se ha encontrado, se añade el mismo valor al resultando if (symbol == null) { error = $"Can't find the variable {variable}"; } else { result += ConvertStringValue(symbol.Value, format); } } else //... no hay cadena de fin de variable se añade al resultado el comienzo de variable { result += StartVariable; } } else { result += text; text = ""; } } // Devuelve el contenido return(result); }