https://foro.gambas-es.org/viewtopic.php?f=1&t=1561
-----------------------------------
kotonfree
Sabado, 16 Abril 2011, 21:57

Autoguardado
-----------------------------------
Bien, no se como andará la cosa, pero mi caso es el siguiente:
Tengo creado un documento de texto en la carpeta datos del programa que estoy haciendo, bien, pues quiero que automáticamente cada "x" tiempo se autoguarde el contenido de un ListBox en ese documento de texto. ¿Como puedo hacerlo?


-----------------------------------
Invitado
Domingo, 17 Abril 2011, 00:13

Re: Autoguardado
-----------------------------------
Si no me equivoco (uso Gambas3), en Gambas2 tienes, en todos los arrays, la propiedad Write:

[code linenumbers=false syntax=gambas]Public Procedure WriteArray()
  
  Dim vStr As String, archivo As File
  
  ListBox1.List
  
  archivo = Open "path to file" For Write Create
  For Each vStr In ListBox1.List
    Print #archivo, vStr
  Next
  Close #archivo

End[/code]

En caso contrario...

[code linenumbers=false syntax=gambas]Public Procedure WriteArray()
  
  Dim archivo As File
  
  archivo = Open "path to file" For Write Create
  Listbox1.List.Write(archivo)
  Close #archivo

End[/code]

Saludos.


-----------------------------------
soplo
Domingo, 17 Abril 2011, 03:57

Re: Autoguardado
-----------------------------------
No veo necesario el bucle. Si lo que quieres es guardar la lista para poder recuperarla despues yo veo mejor utilizar join y split

[code linenumbers=false syntax=gambas]file.save("path_archivo", listbox.list.join("#"))[/code]
Eso graba un archivo de una sola línea donde cada item del listbox está separado del siguiente por #

Y para recuperarlo
[code linenumbers=false syntax=gambas]listbox.list=Split(File.Load("path_archivo"), "#")[/code]
Eso lee el archivo y el contenido lo separa por # y cada item lo mete en el listbox

 :mryellow:


-----------------------------------
kotonfree
Domingo, 17 Abril 2011, 11:23

Re: Autoguardado
-----------------------------------
Gracias tios, pero estoy hecho un lío... :shock: Ayortano, me puedes explicar tu código (todo, lo que necesito saber para que al abrir el programa se empiece a guardar, y se cargue el archivo)?
y soplo, lo de file.save ... no me va, me pone "acceso prohibido".
Y otra cosa como pongo lo de cada "x" tiempo?


-----------------------------------
jguardon
Domingo, 17 Abril 2011, 11:25

Re: Autoguardado
-----------------------------------
[quote user="kotonfree" post="9058"]... pues quiero que automáticamente cada "x" tiempo se autoguarde ...[/quote]

Para el autoguardado cada 'x' tiempo te remito a tu post anterior sobre la actualización de fecha y hora en tiempo real:

http://foro.gambas-es.org/viewtopic.php?p=9064#p9064


Saludos


-----------------------------------
soplo
Domingo, 17 Abril 2011, 14:29

Re: Autoguardado
-----------------------------------
file.save solo guarda un archivo pero evidentemente no lo harás si en ese sitio no tienes permisos para ello. Prueba a guardarlo en tu home por ejemplo o en el temp.

fle.save(user.home &/ "nombrefichero",listbox.list.join("#"))


-----------------------------------
kotonfree
Domingo, 17 Abril 2011, 14:41

Re: Autoguardado
-----------------------------------
Gracias, muchas gracias a todos


-----------------------------------
kotonfree
Martes, 19 Abril 2011, 20:31

Re: Autoguardado
-----------------------------------
Por favor ayudaaaaaaa!!!!. Me hace cosas raras, haber, quiero que se cree un archivo :
[code linenumbers=false syntax=gambas]PUBLIC PROCEDURE WriteArray()
  
DIM archivo AS File
  
  archivo = OPEN (User.Home &/ ".data(notas)") FOR WRITE CREATE
  Listbox1.List.Write(archivo)
  CLOSE #archivo

END
[/code]
Y en 
[code linenumbers=false syntax=gambas]PUBLIC SUB Form_Open()

ListBox1.list = Split(File.Load(user.home &/ ".data(notas)"), "#")

END[/code]

Me iba bien, pero el problema es que dice que no encuentra el directorio o archivo. Cuando me iba no se que hice, y antes me ha ido, se me ha creado el archivo, pero, pero sin alterar el código he borrado el archivo y otra vez el mismo error  :sad:   :cry:  :cry: 
Necesito ayuda...


-----------------------------------
jguardon
Martes, 19 Abril 2011, 20:53

Re: Autoguardado
-----------------------------------
[code linenumbers=false syntax=gambas]PUBLIC PROCEDURE WriteArray()
 
DIM ruta AS String

  ruta =  User.Home &/ ".data(notas)" 
  File.Save(ruta, Listbox1.list.join("#"))
  
END[/code]


-----------------------------------
kotonfree
Martes, 19 Abril 2011, 21:32

Re: Autoguardado
-----------------------------------
Me sigue mostrando el mismo error... Tengo: 
[code linenumbers=false syntax=gambas]PUBLIC SUB Form_Open()

ListBox1.list = Split(File.Load(user.home &/ ".data(notas)"), "#")

'ListBox1.Background = Split(File.Load(user.Home &/ "base/color1"), "#")
ColorChooser1.SelectedColor = (&HC9FF97&)
ColorChooser2.SelectedColor = (&HFFFFFF&)

END


PUBLIC PROCEDURE WriteArray()
  
  'file.save(user.Home &/ ".data(notas)", ListBox1.list.join("#"))
 ' DIM archivo AS File
  'DIM color1 AS File
  
  'archivo = OPEN (User.Home &/ ".data(notas)") FOR WRITE CREATE
  'Listbox1.List.Write(archivo)
  'CLOSE #archivo
  'color1 = OPEN "base/color1" FOR WRITE CREATE 
 ' ListBox1.Background(color1)
 ' CLOSE #color1
'file.save(user.home &/ ".data(notas)", listbox.list.join("#"))


 
DIM ruta AS String

  ruta = User.Home &/ ".data(notas)" 
  File.Save(ruta, Listbox1.list.join("#"))
  


END[/code]
Igual es una tontería, quien sabe ...


-----------------------------------
jguardon
Martes, 19 Abril 2011, 22:17

Re: Autoguardado
-----------------------------------
Está claro: estás intentando leer un fichero que no existe en el form_open().

Debes chequear primero si existe y cargarlo y si no existe pues no haces nada:

[code linenumbers=false syntax=gambas]PUBLIC SUB Form_Open()

IF Exist(user.home &/ ".data(notas)") THEN ListBox1.list = Split(File.Load(User.Home &/ ".data(notas)"), "#")

' etc

END[/code]

Saludos


-----------------------------------
kotonfree
Martes, 19 Abril 2011, 23:40

Re: Autoguardado
-----------------------------------
Te lo agradezco jguardon, pero, me podrías poner el código completo de lo que necesito?
Porque así no se me crear un archivo:
[code linenumbers=false syntax=gambas]PUBLIC PROCEDURE WriteArray()
  
  'file.save(user.Home &/ ".data(notas)", ListBox1.list.join("#"))
  DIM archivo AS File
  'DIM color1 AS File
  
  archivo = OPEN ".data(notas)" FOR WRITE CREATE WATCH 
  Listbox1.List.Write(archivo)
  CLOSE #archivo
  'color1 = OPEN "base/color1" FOR WRITE CREATE 
 ' ListBox1.Background(color1)
 ' CLOSE #color1
'file.save(user.home &/ ".data(notas)", listbox.list.join("#"))


 
'DIM ruta AS String

  'ruta = User.Home &/ ".data(notas)" 
 ' File.Save(ruta, Listbox1.list.join("#"))
  

END[/code]
Y otra cosa... en [i]OPEN ".data(notas)"[/i] lo pongo así o así [i]OPEN User.Home & / ".data(notas)"[/i]?


-----------------------------------
jguardon
Miercoles, 20 Abril 2011, 16:36

Re: Autoguardado
-----------------------------------
Podría ponerte el código, pero prefiero que seas tú el que finalmente entiendas esos códigos y aprendas a utilizarlos correctamente. Es cuestión de saber qué hace exactamente cada fragmento, o al menos intentar deducirlo por uno mismo. La solución la tienes ya entre los post anteriores. Aplica la lógica y limpia esos comentarios que te distraen (pero cuidado, puede que dentro de los comentarios esté parte de la solución).

Créeme, luego lo agradecerás.

Saludos


-----------------------------------
kotonfree
Miercoles, 20 Abril 2011, 16:51

Re: Autoguardado
-----------------------------------
Mmm.. vale, ya se que te lo agradeceré, esto ya empieza a parecer un juego de enigmas...


-----------------------------------
kotonfree
Miercoles, 20 Abril 2011, 21:58

Re: Autoguardado
-----------------------------------
Nada, no lo consigo  :cry: 
Eso sí, dime una cosa: Esto tiene algo que ver?:
(notas:8539): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -5 and height 0
Creo que no, pero no está de más asegurarse.


-----------------------------------
kotonfree
Jueves, 21 Abril 2011, 00:01

Re: Autoguardado
-----------------------------------
Bien después de un largo tiempo volviéndome loco, he dado con la solución, lo más fácil del mundo; pero bueno la felicidad supera a la rabia  :mrgreen:  :razz: 
Esto es lo que he hecho:
[code linenumbers=false syntax=gambas]PUBLIC SUB Form_Open()

TRY ListBox1.list = Split(File.Load(User.Home &/ ".data(notas)"), "#")

END

PUBLIC SUB Timer2_Timer()

  file.save(User.Home &/ ".data(notas)", ListBox1.List.Join("#"))

END[/code]
Saludos  ;-)   :cool:


-----------------------------------
kotonfree
Jueves, 21 Abril 2011, 18:44

Re: Autoguardado
-----------------------------------
Me iba bien pero de repente, me he dado cuenta de que al cerrar el programa, se borra el contenido del listbox (o del archivo .notas/data)
[code linenumbers=false syntax=gambas]PUBLIC SUB Form_Open()

  TRY ListBox1.list = Split(File.Load(User.Home &/ ".notas/data"), "#") 'Carga el archivo del ListBox, si no está sigue ejecutandose
  TRY ListBox1.Background = File.Load(User.Home &/ ".notas/colorlist") 'carga el archivo de color del listbox1
  TRY FMain.Background = File.Load(User.Home &/ ".notas/colorfmain") 'carga el archivo de color de FMain
  'TextBox2.Text = Format(Now, "d/m/yy" "; " "h:n:s")
  ColorChooser1.SelectedColor = ListBox1.Background
  ColorChooser2.SelectedColor = FMain.Background
'ColorChooser1.SelectedColor = (&HC9FF97&)
'ColorChooser2.SelectedColor = (&HFFFFFF&)

END

PUBLIC SUB Timer2_Timer()

  IF NOT Exist(User.Home &/ ".notas") THEN 'si no exite la carpeta, .notas se crea
  MKDIR (User.Home &/ ".notas")
  ENDIF 
  file.save(User.Home &/ ".notas/data", ListBox1.List.Join("#")) 'se crea el archivo del contenido del ListBox y cada 1 segundo se autoguarda
  File.Save(User.Home &/ ".notas/colorlist", ListBox1.Background) 'se crea el archivo del color del ListBox y cada 1 segundo se autoguarda
  File.Save(User.Home &/ ".notas/colorfmain", FMain.Background) 'se crea el archivo del color de FMain y cada 1 segundo se autoguarda

END[/code]
¿Por qué?
Creo haber encontrado la solución al problema, como el programa cuando se le da la orden "CLOSE" se minimiza en un TrayIcon, se me quedó un programa abierto que guardaba otra cosa, que se superponía a la que yo quería guardar.
Pero ¿por qué el tray icon funciona mal? es decir a veces, cuando le doy al menú del TrayIcon, no se muestra, y entonces no lo puedo cerrar.


