Sí, puede que el título no diga mucho :-[
Hola, Estoy probando las últimas del sistema de niveles de mi juego. Pero me encontré con un problema que, probablemente es muy tonto.
Primero, los niveles se guardan en archivos.
Segundo, quiero que el GMS abra el archivo de X nivel, copie TODO su contenido y lo almacene en una variable.
Cuando uso la función file_text_read_string me veo en un problema: Sólo copia la primera linea del archivo, por ejemplo, si el nivel es asi:
Nivel:
algo
algo
algo
algo
y uso file_text_read_string, la variable sólo me almacena lo que está en el primer "renglón", (Nivel:). Lo que necesito es que almacene en una sola variable TODO el contenido del archivo. ¿Cómo puedo lograr esto?
Ciclos:
Mientras no se alcance el fin de archivo (EOF), guardo en una variable cada línea de texto del archivo y me muevo a la siguiente línea. El manual de hecho incluye ejemplos 99% similares a lo que quieres hacer.
Cita de: penumbra en Diciembre 09, 2015, 09:48:53 PM
Ciclos:
Mientras no se alcance el fin de archivo (EOF), guardo en una variable cada línea de texto del archivo y me muevo a la siguiente línea. El manual de hecho incluye ejemplos 99% similares a lo que quieres hacer.
mmm.....
No entendí. Y no creo encontrar un ejemplo como lo quiero entre miles y miles de ejemplos que trae el manual.
No me vendría mal algo de ayuda más específica...xD
:-[ XD XD
El manual quizás trae miles y miles de ejemplos, pero no desorganizados, sino acordes a la función que se consulta (por ejemplo file_text_read_string)
http://docs.yoyogames.com/source/dadiospice/002_reference/file%20handling/files/file_text_read_string.html
En fin. Ya vendrán almas más piadosas a auxiliarte.
http://docs.yoyogames.com/source/dadiospice/002_reference/file%20handling/files/file_text_read_string.html
[gml]
i=0;
texto ="";//esto lo agregas para guardar el contenido del archivo
file = file_text_open_read(working_directory + "\archivo.txt");
do //en lugar de usar el while usamos el do while, do <statement> until(<expression>) para poder añadir un valor a texto antes de comprobar
{
texto = file_text_read_real(file);//leemos la linea y la guardamos en i
file_text_readln(file);//saltamos la linea para la proxima lectura
i=i+1//aumentamos el valor de i
}
until (texto[(i-1)]="")//repetira hasta que encuentre el final del archivo, aqui puedes meter un caracter especial o dejarlo asi.
file_text_close(file);
[/gml]
este es el ejemplo del link que te pase pero adaptado a tu pregunta, el comando file_text_read_real solo lee la una linea, y el comando file_text_readln salta la linea que se leera.
y como dijo penumbra arriba, deberias de buscar los ejemplos que salen en el manual para cada funcion y entenderlos.
Bueno, bueno... parece que las almas piadosas han venido a auxiliarme... tenías razón, penumbra XD
Pero hay un problema... la variable texto no está definida como array, y cuando lo pruebo me sale el obvio error. Variable Index out of range
No sé cómo arreglo esto :'(
EDITO: ¿Cuando editaste el código que no me di cuenta???
EDITO 2: Supongo que arreglé ese problema. Pero ahora, al momento de probar el juego, simplemente PUM! se bloquea y deja de funcionar XD
solamente concatena las líneas. Al final, todo el texto quedaría guardado en una cadena larga.
[gml]
texto += file_text_read_real(file);
[/gml]
Creo que fue despiste de jmbs, porque al principio la variable está inicializada como una variable simple.
Gracias, pero cómo compribaría el
until?
Cita de: jmbs19 en Diciembre 09, 2015, 10:05:10 PM
[gml]
until (texto[(i-1)]="")//repetira hasta que encuentre el final del archivo, aqui puedes meter un caracter especial o dejarlo asi.
[/gml]
Ya que todo el contenido se almacena en una sola variable, no puedo comprobarlo bien ¿no?
Dicen que hay una función que devuelve si se ha alcanzado el final del archivo (true) o no (false). De ser cierto, eso sería mejor para detener la ejecución del ciclo. (http://ildivomx.crearforo.com/images/smiles/Silbando.gif)
Cita de: penumbra en Diciembre 09, 2015, 10:24:30 PM
solamente concatena las líneas. Al final, todo el texto quedaría guardado en una cadena larga.
[gml]
texto += file_text_read_real(file);
[/gml]
Creo que fue despiste de jmbs, porque al principio la variable está inicializada como una variable simple.
error mio ,penumbra, al declarar la variable. sin embargo si lo estoy guardando en un array, para que el:
[gml]until (texto[(i-1)]="")[/gml]
pueda comprobar con la misma variable, sin embargo si lo va a guardar como un string largo seria necesaria una variable temporal que comparar en esa parte.
pd: no conocia esa funcion penumbra, seria util en este tipo de casos, sin embargo se seguiria usando el do while pero comparando el resultado de esa funcion si es true o false
Cita de: penumbra en Diciembre 09, 2015, 10:30:46 PM
Dicen que hay una función que devuelve si se ha alcanzado el final del archivo (true) o no (false)
Dicen...por ahi...xD Penumbra, eres un troll...xD
Ya la encontré, y logré solucionar el problema, muy sencillo y con un while:
[gml]
f = file_text_open_read("Created_levels/"+string(ID)+".lvl");
while (!file_text_eof(f)) {
LVL += file_text_read_string(f);
file_text_readln(f);
}
[/gml]
Gracias por la ayuda :D
Niuweb que paso?
Cita de: NiuWeb en Diciembre 09, 2015, 10:34:47 PM
Ya la encontré, y logré solucionar el problema, muy sencillo y con un while:
[gml]
f = file_text_open_read("Created_levels/"+string(ID)+".lvl");
while (!file_text_eof(f)) {
LVL += file_text_read_string(f);
file_text_readln(f);
}
[/gml]
Gracias por la ayuda :D
Que es justo lo que enuncié en mi primer mensaje:
Cita de: penumbra en Diciembre 09, 2015, 09:48:53 PM
Mientras no se alcance el fin de archivo (EOF), guardo en una variable cada línea de texto del archivo y me muevo a la siguiente línea.
Eso demuestra que no soy un troll... o ¿sí? [spoiler]
(http://www.sherv.net/cm/emoticons/trollface/devil-troll-smiley-emoticon.png)
[/spoiler]
Tal vez no... O TAL VEZ SÍ 8)
Nunca me dijiste que ese (EOF) era una función. Pensé que hablabas de cosas extrañas, y no entendí :-[
No ves mis mensajes
???
¿En serio?.... Pensé que tenías una super-solución al tema, o cosas por el estilo. No eso :-[
Te recomiendo que no escribas en cualquier tema por ahí, igualmente hubiera visto el mensaje en cualquier momento :-\
PD: El tema trata de otra cosa, no de los mensajes...recuérdalo :D