Enregistrement Fichier txt ligne par ligne

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Enregistrement Fichier txt ligne par ligne

Message 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
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message 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)
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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 
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message 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
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Message 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.
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Message par MetalOS »

Alors la je vois vraiment pas.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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:
Image
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message 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 ...
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Message 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.
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message 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 !
Denis

Bonne Jounée à tous
Répondre