Concatenación de cadenas
La concatenación de cadenas es probablemente la operación de cadena más común. En MQL5, se puede hacer utilizando los operadores '+' o '+='. El primer operador concatena dos cadenas (los operandos a izquierda y derecha del signo '+') y crea una cadena concatenada temporal que puede asignarse a una variable de destino o pasarse a otra parte de una expresión (como una llamada a función). El segundo operador añade la cadena situada a la derecha del operador '+=' a la cadena (variable) situada a la izquierda de este operador.
Además, la API de MQL5 proporciona un par de funciones para componer cadenas a partir de otras cadenas o elementos de otros tipos.
En el script StringAdd.mq5, que se considera después de su descripción, se ofrecen ejemplos de utilización de las funciones.
bool StringAdd(string &variable, const string addition)
La función añade la cadena addition especificada al final de una variable de cadena variable. Siempre que sea posible, el sistema utiliza el búfer disponible de la cadena variable (si su tamaño es suficiente para el resultado combinado) sin reasignar memoria ni copiar cadenas.
La función es equivalente al operador variable += addition. Los costes de tiempo y el consumo de memoria son prácticamente los mismos.
La función devuelve true en caso de éxito y false en caso de error.
int StringConcatenate(string &variable, void argument1, void argument2 [, void argumentI...])
La función convierte dos o más argumentos de tipos integrados a una representación de cadena y las concatena en la cadena variable. Los argumentos se pasan empezando por el segundo parámetro de la función. No se admiten como argumentos arrays, estructuras, objetos ni punteros.
El número de argumentos debe estar comprendido entre 2 y 63.
Los argumentos de cadena se añaden a la variable resultante tal cual.
Los argumentos de tipo double se convierten con la máxima precisión (hasta 16 dígitos significativos) y puede elegirse la notación científica con exponente si resulta más compacta. Los argumentos de tipo float se muestran con 5 caracteres.
Los valores del tipo datetime se convierten en una cadena con todos los campos de fecha y hora («AAAA.MM.DD hh:mm:ss»).
Las enumeraciones y los caracteres de uno y dos bytes se emiten como números enteros.
Los valores del tipo color se muestran como un trío de componentes «R,G,B» o un nombre de color (si está disponible en la lista de colores web estándar).
Al convertir el tipo bool se utilizan las cadenas «true» o «false».
La función StringConcatenate devuelve la longitud de la cadena resultante.
StringConcatenate ha sido diseñada para construir una cadena a partir de otras fuentes (variables, expresiones) distintas de la variable receptora. No se recomienda utilizar StringConcatenate para concatenar nuevos trozos de datos en la misma fila llamando a StringConcatenate(variable, variable, ...). Esta llamada a la función no está optimizada y es extremadamente lenta en comparación con el operador '+' y StringAdd.
Las funciones StringAdd y StringConcatenate se prueban en la secuencia de comandos StringAdd.mq5, que utiliza la macro PRTE y la función de ayuda StrOut de la sección anterior.
void OnStart()
|
Como resultado de su ejecución, se muestran las siguientes líneas en el registro:
'message' [7] 0
|
El script también incluye el archivo de encabezado StringBenchmark.mqh con la clase benchmark. Proporciona un marco para que las clases derivadas implementadas en el script midan el rendimiento de varios métodos de adición de cadenas. En concreto, se aseguran de que la suma de cadenas mediante el operador '+' y la función StringAdd sean comparables. Este material se deja para el estudio independiente.
Además, el libro viene con el script StringReserve.mq5: hace una comparación visual de la velocidad de adición de cadenas dependiendo del uso o no del búfer (StringReserve).