Page 1 sur 1

Petit probleme avec mon code ...

Publié : mer. 22/avr./2009 8:43
par jbernard13
bonjour,je rencontre un probleme avec ce code , si je sauvegarde le fichier , et que je le recharge , il ya rien d'écris dans le fichier .
si quelq'un peux m'aider svp . Merci

Code : Tout sélectionner

*;*** Test de blocnote ***
;**** Par jbernard13****

;**** Constantes de la fenetre 
Enumeration
  #Fenetre_Main
EndEnumeration

;**** Constantes de la barre de menu ****
Enumeration
  #menu_charger
  #menu_sauver
  #menu_quitter
EndEnumeration
;**** Constantes des gadgets ****
Enumeration
  #Editeur_texte
  #fichier_sauver
EndEnumeration
;**** Procedures pour la chargement et la sauvegarde d'un fichier ****
;**** Procedure de chargement d'un fichier ****
Procedure Chargement()
  ClearGadgetItems(#Editeur_texte)
  
    text.s=OpenFileRequester( "chargement d'un fichier texte","","Fichier text|*.txt",0)
    If text<> ""
      If OpenFile(0,text)
        Repeat
          AddGadgetItem(#Editeur_texte,-1,ReadString(0))
        Until Eof(0)
        CloseFile(0)
      EndIf
    EndIf
  EndProcedure 
 


;**** Procedure de sauvegarde d'un fichier **** 
Procedure Sauvegarde()
  Sauver.s =SaveFileRequester("Sauvegarde  d'un fichier","","Fichier.texte|*.txt",0)
  If LCase(GetExtensionPart(Sauver)) <> "text"
    Sauver.s+".txt"
    
    CreateFile(#fichier_sauver ,Sauver)
    For nb_ligne = 0 To CountGadgetItems(#Editeur_texte ) 
      texte_ligne$=GetGadgetItemText(#Editeur_texte , nb_ligne,0) 
      WriteStringN(#fichier_sauver ,texte_ligne$) 
    Next 
  EndIf
  
  
EndProcedure





;**** Creation de la fenetre, de la barre de menu et du gadget ****
If OpenWindow(#Fenetre_Main,0,0,560,480,"BlocNote demo",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
  If CreateMenu(0,WindowID(#Fenetre_Main))
    MenuTitle("Fichier")
    MenuItem(#menu_charger,"Charger un fichier")
    MenuItem(#menu_sauver,"Sauver un fichier")
    MenuBar()
    MenuItem(#menu_quitter,"Quitter")
    EndIf
 EditorGadget(#Editeur_texte,10,20,540,380)
EndIf



;****Boucle du programme ****
Repeat 
  Select WaitWindowEvent()
    Case #PB_Event_Menu
      Select EventMenu()
        Case #menu_charger : Chargement()
        Case #menu_sauver : Sauvegarde()
          Case #menu_quitter
          MessageRequester("information","Au revoir")
          CloseWindow(#Fenetre_Main)
      EndSelect
      Case #PB_Event_CloseWindow
      Fermer_fenetre =#True
  EndSelect
Until Fermer_fenetre
End



Publié : mer. 22/avr./2009 12:18
par Atomo
Tu as oublié de fermer ton fichier après une sauvegarde, il suffit d'ajouter un CloseFile(#fichier_sauver) dans ta procédure sauvegarde() à la fin de l'écriture dans le fichier texte.

Code : Tout sélectionner

Procedure Sauvegarde() 
  Sauver.s =SaveFileRequester("Sauvegarde  d'un fichier","","Fichier.texte|*.txt",0) 
  If LCase(GetExtensionPart(Sauver)) <> "text" 
    Sauver.s+".txt" 
    
    CreateFile(#fichier_sauver ,Sauver) 
    For nb_ligne = 0 To CountGadgetItems(#Editeur_texte ) 
      texte_ligne$=GetGadgetItemText(#Editeur_texte , nb_ligne,0) 
      WriteStringN(#fichier_sauver ,texte_ligne$) 
    Next
    CloseFile(#fichier_sauver)
  EndIf 
EndProcedure 

Publié : mer. 22/avr./2009 13:25
par jbernard13
merci beaucoup

Publié : mer. 22/avr./2009 18:30
par Le Soldat Inconnu
je complète

il y a déjà une erreur sur l'ajout de l'extension.

Ensuite j'ai ajouter un test pour savoir si le nom de fichier est correct

et je demande, si le fichier existe, si il faut l'écraser ou non.

Code : Tout sélectionner

Procedure Sauvegarde()
  Sauver.s =SaveFileRequester("Sauvegarde  d'un fichier","","Fichier.texte|*.txt",0)
  If LCase(GetExtensionPart(Sauver)) <> "txt" ; Si il manque l'extension, on l'ajoute
    Sauver+".txt"
  EndIf
  If CheckFilename(GetFilePart(Sauver)) ; On vérifie que le nom de fichier est correct
    If FileSize(Sauver) >= 0 ; Si le fichier existe, on demande si on doit l'écraser
      If MessageRequester("Sauvegarde", "Ecraser le fichier existant ?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_No
        ; Si on ne veut pas écraser le fichier, on sort de la procedure
        ProcedureReturn
      EndIf
    EndIf
    CreateFile(#fichier_sauver ,Sauver)
    For nb_ligne = 0 To CountGadgetItems(#Editeur_texte )
      texte_ligne$=GetGadgetItemText(#Editeur_texte , nb_ligne,0)
      WriteStringN(#fichier_sauver ,texte_ligne$)
    Next
    CloseFile(#fichier_sauver)
  Else
    ; message d'erreur, nom de fichier incorrect
    MessageRequester("Erreur", "Le nom de fichier est incorrect")
  EndIf
EndProcedure

Publié : jeu. 23/avr./2009 8:40
par jbernard13
Merci Régis

pour ton cours

Publié : jeu. 23/avr./2009 9:31
par gnozal
Le Soldat Inconnu a écrit :je complète
Encore plus complet :wink:
jbernard13, il faut toujours vérifier le succès d'une fonction, sinon on s'expose à des plantages ...
Dans ce cas, il faut vérifier que le fichier a pu être ouvert en écriture.
Exemple :

Code : Tout sélectionner

Procedure Sauvegarde() 
  Sauver.s =SaveFileRequester("Sauvegarde  d'un fichier","","Fichier.texte|*.txt",0) 
  If LCase(GetExtensionPart(Sauver)) <> "txt" ; Si il manque l'extension, on l'ajoute 
    Sauver+".txt" 
  EndIf 
  If CheckFilename(GetFilePart(Sauver)) ; On vérifie que le nom de fichier est correct 
    If FileSize(Sauver) >= 0 ; Si le fichier existe, on demande si on doit l'écraser 
      If MessageRequester("Sauvegarde", "Ecraser le fichier existant ?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_No 
        ; Si on ne veut pas écraser le fichier, on sort de la procedure 
        ProcedureReturn 
      EndIf 
    EndIf 
    If CreateFile(#fichier_sauver ,Sauver) 
      For nb_ligne = 0 To CountGadgetItems(#Editeur_texte ) 
        texte_ligne$=GetGadgetItemText(#Editeur_texte , nb_ligne,0) 
        WriteStringN(#fichier_sauver ,texte_ligne$) 
      Next 
      CloseFile(#fichier_sauver) 
    Else
      MessageRequester("Erreur", "Impossible de créer le fichier !") 
    EndIf
  Else 
    ; message d'erreur, nom de fichier incorrect 
    MessageRequester("Erreur", "Le nom de fichier est incorrect") 
  EndIf 
EndProcedure

Publié : jeu. 23/avr./2009 10:23
par jbernard13
merci Gnozal
et pour charger le fichier on écris la meme procedure?

Publié : jeu. 23/avr./2009 10:35
par gnozal
jbernard13 a écrit :merci Gnozal
et pour charger le fichier on écris la meme procedure?
En gros, oui.
Il faut remplacer CreateFile() par ReadFile() et WriteStringN() par ReadString().