Page 1 sur 1

Enregistrement Fichier txt ligne par ligne

Publié : dim. 17/juin/2007 15:01
par MetalOS
Salut tous le monde, voila un petit moment que je galère pour enregistrer dans un fichier texte le contenue d'un EditorGadget. Je m'explique.

Dans mon test j'ai un "EditorGadget" et un "boutton Ajouter", ce que je cherche à faire est tres simple. D que je clique sur le bouton Ajouter, un texte par default apparait dans l'EditorGadget et en même temp s'enregistre dans un fichier txt (jusque la tous va bien), mais une fais que je reclic sur le bouton Ajouter, le texte par default ne s'ajoute pas à la ligne dans l'EditorGadget et ni dans le fichier txt, et la je ne vois vrément pas comment faire. Si quelqu'un peut m'aider, voici mon exemple. Merci.

Code : Tout sélectionner

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Editor_0
  #Button_0
EndEnumeration


Procedure Enregistrer()
 If OpenFile(1, "Historique.txt") 
      length = Lof(1)                       
      FileSeek(1, length - 10)
      file$ = GetGadgetText(#Editor_0) 
      WriteStringN(1, file$ , #PB_Ascii)
  EndIf
EndProcedure

  If OpenWindow(#Window_0, 216, 0, 297, 252, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_BorderLess | #PB_Window_ScreenCentered | #PB_Window_WindowCentered )
    If CreateGadgetList(WindowID(#Window_0))
      EditorGadget(#Editor_0, 5, 10, 285, 195)
      ButtonGadget(#Button_0, 165, 215, 125, 25, "Ajouter")
      
    EndIf
  EndIf

Repeat 
  
  Event = WaitWindowEvent() 
  
  WindowID = EventWindow() 
  
  GadgetID = EventGadget() 
  
  EventType = EventType() 
  
  If Event = #PB_Event_Gadget
    
    If GadgetID = #Editor_0
      
    ElseIf GadgetID = #Button_0
      SetGadgetText(#Editor_0, "Test")
      Enregistrer()
    EndIf
    
  EndIf
  
Until Event = #PB_Event_CloseWindow 

End

Publié : dim. 17/juin/2007 16:12
par wolfjeremy
Il me semble que pour qu'il y ai un retour à la ligne, il faut mettre à la fin de cette chaine : Chr(13) + Chr(10)

Publié : dim. 17/juin/2007 17:38
par Jacobus
C'est pas très compliqué. Il faut seulement utiliser la bonne instruction.

Dans ta boucle d'évènements :

Code : Tout sélectionner

ElseIf GadgetID = #Button_0 
     ; SetGadgetText(#Editor_0, "Test") ;<----- remplace tout le texte
      AddGadgetItem(#Editor_0, -1, "Test") ;<----- ajoute un élément et le met à la suite si -1 est le paramètre de position.
      Enregistrer() 
    EndIf 

Publié : lun. 18/juin/2007 7:21
par brossden
Est ce que ton code modifié ainsi te convient ?

J'ai supprimé la procedure enregistrer car une seule ligne suffit ici !

" WriteStringN(1, GetGadgetText(#Editor_0) , #PB_Ascii) "

Deplus j'ai supposé comme le nom du fichier est historique que tu voulais conserver les anciennes lignes quand tu lance à nouveau e programme !

Code : Tout sélectionner

Enumeration
  #Window_0
  #Editor_0
  #Button_0
EndEnumeration


If OpenWindow(#Window_0, 216, 0, 297, 252, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_BorderLess | #PB_Window_ScreenCentered | #PB_Window_WindowCentered )
  If CreateGadgetList(WindowID(#Window_0))
    EditorGadget(#Editor_0, 5, 10, 285, 195)
    ButtonGadget(#Button_0, 165, 215, 125, 25, "Ajouter")
  EndIf
EndIf

OpenFile(1, "Historique.txt")
FileSeek(1,Lof(1))

Repeat
  Event = WaitWindowEvent()
  GadgetID = EventGadget()
  If Event = #PB_Event_Gadget
    If GadgetID =#Button_0
      AddGadgetItem(#Editor_0, -1, "Test")
      WriteStringN(1, GetGadgetText(#Editor_0) , #PB_Ascii)
    EndIf
  EndIf
Until Event = #PB_Event_CloseWindow
CloseFile(1)
End

Publié : mar. 19/juin/2007 22:31
par MetalOS
oui mais le probleme c que si je clic 4 fois sur le boutton ajouter ca va m'enregistrer 8 ou 10 fois le texte au lieu de 4.

Publié : jeu. 21/juin/2007 19:10
par MetalOS
Alors la je vois vraiment pas.

Publié : jeu. 21/juin/2007 20:11
par Flype
c'est normal :D

GetGadgetText(#Editor_0) prend tout le texte (toutes les lignes) donc si tu colles tout le texte à tout le fichier il finit par grossir plus que la normale c'est sur.

il y a 2 solutions

1/
tu ajoutes une ligne à la fin du fichier (avec FileSeek) à chaque enregistrement.
ce qui implique que tu ne prennes que la dernière ligne du gadget texte grace à GetGadgetItemText(gadget, ligne).

2/
tu écrases ton fichier totalement à chaque fois (sans FileSeek) avec le texte complet du gadget texte grace à GetGadgetText(gadget). c'est le plus simple et à moins d'avoir une bonne raison d'utiliser 1/ prefere la solution 2/.

mais pas un mix des deux :wink:

Publié : ven. 22/juin/2007 11:55
par brossden
Metalos

Tous est possible, si tu nous explique clairement ce que tu veux on te donera certainement la solution, mais donne ton cahier des charge sans rien omettre !

Si on appuye sur le bouton je veux que ....
Est ce que je conserve l'historique antérieur ? etc ...

Publié : ven. 22/juin/2007 18:56
par MetalOS
Oui désoler, effectivement il faut que je conserve l'historique antérieur et que le texte soit inscrit directement dans le fichier historique, car pour le moment le texte s'ecrit dans le fichier historique qu'après avoir arreter l'execution du programme. Il faudrais que je puisse visualiser les modification de mon fichier texte en directe.

pour info je visualise mon fichier "Historique.txt" avec cette commande:

Code : Tout sélectionner

RunProgram(Historique.txt)
Merci pour vos réponses.

Publié : sam. 23/juin/2007 16:53
par brossden
Désolé Metalos mais ton cahier des charges est incomplet !
Quand veux tu enregistrer les evenements, que faire en appuyant sur le bouton ?

Prise tout, ce n'est peut être pas le plus simple !