Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: kostra en Noviembre 07, 2015, 12:03:54 PM

Título: [Solucionado] string_lettersdigits con espacios?
Publicado por: kostra en Noviembre 07, 2015, 12:03:54 PM
hmmm tengo algo así...

mapname = string_lettersdigits(get_string("Map name: ",""));

y lo que quiero es que solo pueda el usuario poner letras y numeros... y espacios... es decir, si escribe "[[[joselito66 el chulo!!]]]" con esa función me saldrá "joselito66elchulo", pero quiero que salga "joselito66 el chulo"

eso se puede? no encuentro función en la lista de "string_"

:/
Título: Re:string_lettersdigits con espacios?
Publicado por: Arcadian en Noviembre 07, 2015, 04:18:44 PM
Sí, yo te recomendaría que obtengas la longitud de la string introducida, metas un ciclo for y que el programa "inspeccione" cada caracter de la cadena, en caso de que sea una letra o espacio le dices que no haga nada pero si es otra cosa que sustituya ese caracter inspeccionado por "" (con string_replace), de esa forma la cadena resultante quedará limpia de polvo y paja ;)

EDIT: Te dejo un ejemplo de código que debería funcionar, se puede mejorar claro está ;)

cadena_base=""  // Definimos algunas variables que utilizaremos
long=0
caracter=""
cadena_final=""

cadena_base=get_string("Dime lo que quieras que yo te lo traduzco:","")
long=string_length(cadena_base)  //  Tomamos la longitud de la cadena
for(i=1;i<=long;i=i+1)  // Inspeccionamos cada caracter de la cadena
{
caracter=string_ord_at(cadena_base,i)  // Número del caracter
if caracter=32{cadena_final=cadena_final+string_char_at(cadena_base,i)}  //  Si es un espacio, nos interesa, lo añadimos
if caracter>47 and caracter<58{cadena_final=cadena_final+string_char_at(cadena_base,i)}  //  Si es un número, nos interesa, la añadimos
if caracter>64 and caracter<91{cadena_final=cadena_final+string_char_at(cadena_base,i)}  //  Si es letra mayúscula, nos interesa, lo añadimos
if caracter>96 and caracter<123{cadena_final=cadena_final+string_char_at(cadena_base,i)}  //  Si es letra minúscula, nos interesa, la añadimos
}
show_message("La cadena ya traducida es: "+cadena_final)
Título: Re:string_lettersdigits con espacios?
Publicado por: kostra en Noviembre 07, 2015, 04:46:41 PM
okay, tengo esto... pero no sé si voy bien, además de que no sé cómo se detecta si el char es una letra o espacio :/
mapname = get_string("Map name: ","");
    for (i=1;i<string_length(mapname);i++)
    {
        char = string_char_at(mapname,i);
        if char != ????
            string_replace(mapname,char,"");
    }
Título: Re:string_lettersdigits con espacios?
Publicado por: Arcadian en Noviembre 07, 2015, 04:56:50 PM
Acabo de añadir mi código de ejemplo también, a ver si te vale.
Título: Re:string_lettersdigits con espacios?
Publicado por: kostra en Noviembre 07, 2015, 05:38:44 PM
De qué calidad quieres el jamón!!? muchísimas gracias, es ABSOLUTAMENTE P-E-R-F-E-C-T-O

bueno salvo el detalle de mi propio orden, todos tenemos manias jejeje, que agusto me he quedado acomodándolo a mi manera :B
mapname = "";
    mname = get_string("Map name: ","");
    for(i=1;i<=string_length(mname);i++)
    {
        char = string_ord_at(mname,i)
        if char == 32
            mapname = mapname+string_char_at(mname,i);
        if char > 47
        and char < 58
            mapname = mapname+string_char_at(mname,i);
        if char > 64
        and char < 91
            mapname = mapname+string_char_at(mname,i);
        if char > 96
        and char < 123
            mapname = mapname+string_char_at(mname,i);
    }



:B
Título: Re:[Solucionado] string_lettersdigits con espacios?
Publicado por: Arcadian en Noviembre 07, 2015, 05:43:06 PM
Falta añadirle que detecte ñ minuscula , mayúscula y letras con acentos. Esos casos no creo que los detecte pero es sólo añadir esos códigos ASCII y listo ;)
Título: Re:[Solucionado] string_lettersdigits con espacios?
Publicado por: kostra en Noviembre 07, 2015, 05:52:45 PM
tienes razón, si te apetece ponerlo eres libre jaja, pero en mi caso, no lo necesito, también quiero que se evadan, alfabeto internacional normalito jajaja