Septiembre 08, 2019, 09:34:45 PM Ultima modificación: Septiembre 08, 2019, 10:09:31 PM por Marth
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)

¿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.
alaberga regué el café.

BA:STFW&RTFM

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.

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.

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.
alaberga regué el café.

BA:STFW&RTFM

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