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.