Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Marth en Septiembre 08, 2019, 09:34:45 PM

Título: Salto de línea al usar file_text_write_string
Publicado por: Marth en Septiembre 08, 2019, 09:34:45 PM
Veran, tengo un SRPG en el que tengo que almacenar los datos de las unidades.
Para ello, tengo este código:

global.j=file_text_open_write("aliados.pmd")
with(Esperador){
   file_text_write_real(global.j,profesion.object_index)
   file_text_write_real(global.j,colour_get_blue(image_blend)) // Necesario para recordar

   file_text_write_real(global.j,defensa)
   for(global.t=0; global.t<3; global.t++){
      file_text_write_real(global.j,credef[global.t])
      file_text_write_real(global.j,def[global.t])
   }

   file_text_write_real(global.j,nivel)
   file_text_write_real(global.j,experiencia)
   file_text_write_string(global.j,nombre+"\n") // El nombre de la unidad. Es la única variable que en vez de un número es un string.
}
file_text_close(global.j)


Si os fijais, en la variable del nombre de la unidad he puesto un salto de línea. Esto es debido a que a diferencia de cuando uso file_text_write_real, no se deja un espacio tras escribir en el fichero, lo que puede dar un error al cargar.
Pero al hacer esto, conforme guardo y cargo la partida varias veces, me sale el error que muestro en la captura de pantalla.
Y cuando cargo la partida, eso hace que los nombres de las unidades ganen "espacios" a su izquierda.
¿Como hacer que se pueda dejar un espacio o salto de linea sin producir este error?

Edito, este es el código de cuando se cargan los datos de las unidades:

global.j=file_text_open_read("aliados.pmd")
repeat(global.total){
   global.w=instance_create_depth(0,0,0,Esperador)
   with(global.w){
      profesion=file_text_read_real(global.j)
      global.azul=file_text_read_real(global.j)
      image_blend=make_color_rgb(global.azul,global.azul,global.azul) // Necesario para recordar

      defensa=file_text_read_real(global.j)
      for(global.t=0; global.t<3; global.t++){
         credef[global.t]=file_text_read_real(global.j)
         def[global.t]=file_text_read_real(global.j)
      }

      nivel=file_text_read_real(global.j)
      experiencia=file_text_read_real(global.j)
      nombre=file_text_read_string(global.j)
      PS=heroe*nivel // La resistencia de los barcos se recuperan con una sencilla formula. El objeto Seguir les dara los ps totales.
      req()
   }
}
file_text_close(global.j)
Título: Re:Salto de línea al usar file_text_write_string
Publicado por: bygdle en Septiembre 08, 2019, 09:50:13 PM
¿Cómo cargas los datos? De primera mano se me ocurre que al momento de cargar la variable nombre estás trayendo también el espacio que está antes, y que es por eso que se van acumulando por cada guardado.
Título: Re:Salto de línea al usar file_text_write_string
Publicado por: Marth en Septiembre 08, 2019, 10:11:45 PM
Cita de: NiuWeb en Septiembre 08, 2019, 09:50:13 PM
¿Cómo cargas los datos? De primera mano se me ocurre que al momento de cargar la variable nombre estás trayendo también el espacio que está antes, y que es por eso que se van acumulando por cada guardado.

He editado para mostrar el código de como se cargan los datos.
Seguramente es eso, al cargar se toma tambien el espacio antes.
Título: Re:Salto de línea al usar file_text_write_string
Publicado por: Marth en Septiembre 08, 2019, 11:59:37 PM
He encontrado una solución provisional.
Este es el código cuando cargue del fichero el nombre de las unidades:
nombre=string_replace_all(file_text_read_string(global.j)," ","")
Esto elimina de la cadena el espacio (" ") que aparece al principio.
Es una chapuza, pero he hecho unas pocas pruebas y ya no me aparece el error, por lo que con esto se ha solucionado mi problema.
Título: Re:Salto de línea al usar file_text_write_string
Publicado por: bygdle en Septiembre 09, 2019, 12:05:19 AM
Cita de: Marth en Septiembre 08, 2019, 11:59:37 PM
He encontrado una solución provisional.
Este es el código cuando cargue del fichero el nombre de las unidades:
nombre=string_replace_all(file_text_read_string(global.j)," ","")
Esto elimina de la cadena el espacio (" ") que aparece al principio.
Es una chapuza, pero he hecho unas pocas pruebas y ya no me aparece el error, por lo que con esto se ha solucionado mi problema.
También podrías hacer algo así:
[gml]
nombre = string_delete( file_text_read_string(global.j), 1, 1 );
[/gml]
Para eliminar solamente el primer caracter de la cadena.
Título: Re:Salto de línea al usar file_text_write_string
Publicado por: BssString en Septiembre 09, 2019, 01:35:43 AM
Qué tal si después de escribir datos usas file_text_writeln? Eso genera un salto de línea.
Luego para cargar correctamente, después de cada lectura normal (string o real) deberás añadir un file_text_readln para leer los saltos de línea y que no interfieran en la data