Comunidad Game Maker

Ayuda => Desarrollo de Scripts => Mensaje iniciado por: bygdle en Abril 28, 2017, 10:00:41 PM

Título: Concatenar cadenas con los parámetros dados
Publicado por: bygdle en Abril 28, 2017, 10:00:41 PM
Bueno. Como ya sabrán, con todo esto del foro se borraron muchísimos posts, y entre ellos varios de los scripts que yo había posteado aquí. Al igual que con mis artículos, no guardé copia de ninguno y pues pasa lo que pasa :v. Con el tiempo iré resubiendo todos los scripts que se perdieron; éste el primero.

Autor: NiuWeb.
Versión de GM utilizada: Studio 1.4.
Descripción: Reemplaza una serie de plantillas dentro de una cadena original por los argumentos (cadenas o reales) que se le den.
Código:
[gml]
///sprintf(string, [arg1, ..., arg15])
var text  = argument[0];
var argn  = argument_count - 1;
var txtln = string_length(text);

for(var i = argn; i >= 1; i--)
{
    var mark  = "$"+string(i);
    var mrkln = string_length(mark);
    for(var j = 1; j <= txtln; j++)
    {
        var test = string_copy(text, j, mrkln);
        if(test == mark)
        {
            if(string_char_at(text, j - 1) <> "\")
            {
                var part;
                part[0] = string_copy(text, 1, j - 1);
                part[1] = string_copy(text, j + mrkln, 1+txtln - (j + mrkln));
                text    = part[0] + string(argument) + part[1];
                txtln   = string_length(text);
            }
        }
    }
}
for(var i = argn; i >= 1; i--)
{
    var mark = "$"+string(i);
    text = string_replace_all(text, "\"+mark, mark);
}
return text;
[/gml]
string: Este argumento es la cadena original a modificar. Las plantillas se escriben con un signo '$', seguido del índice del argumento por el que se quiere reemplazar, por ejemplo '$3' se reemplazará por el tercer argumento (La cadena original no cuenta, así que en realidad sería el cuarto). Para evitar que una plantilla se reemplace, utiliza una barra invertida así: '\$3' en caso de que el número esté dentro de los argumentos a usar, de lo contrario no hay que modificar nada pues simplemente no se tomará en cuenta.

[arg1, ..., arg15]: Los diferentes argumentos que se le quieran añadir (opcionales).

Ejemplo
[gml]
text = sprintf("Hoy es: $1/$2/$3", 28, "04", 2017); //Devuelve "Hoy es: 28/04/2017"
text = sprintf("¡Hola, $1 $2! Este elemento cuesta \$2", "Pedrito", "Pérez"); //Devuelve "¡Hola, Pedrito Pérez! Este elemento cuesta $2"
[/gml]

Como siempre, cualquier duda o fallo en el programa, agradecería lo comentasen.