petit probleme avec mon programme ....

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

petit probleme avec mon programme ....

Message par jbernard13 »

Bonjour
je rencontre un petit probleme
j'arrive a sauvegarder mon fichier text avec toute les lignes
mais impossible de le charger avec toutes les lignes
j'ai lu le tutorial sur les gadget de ce forum
mais qui peux m'expliquer comment lire toutes les lignes d'un gadgetitem
et aussi resoudre mon petit probleme


jbernard13






Code : Tout sélectionner

;Mini Bloc  Note par Jean-bernard -2004 
;Constante de la fenetre principale 
Enumeration
    #Interface_fenetre
EndEnumeration
 
 
;Constante des Gadgets 
Enumeration
    #Document
EndEnumeration

;Constante de la barre outil et du menu 
Enumeration
    #Barre_Nouveau
    #barre_charger
    #barre_sauver
    #barre_Effacer
    #menu_info
   
EndEnumeration    

;les procedure 

Procedure creation_document()
text.s=SaveFileRequester( "sauvegarde d'un fichier texte","","Fichier text|*.txt",0)
If text<> ""
nombre_ligne=CountGadgetItems(#document)
If CreateFile(0,"document.txt")
For n=0 To nombre_ligne-1
text.s=GetGadgetItemText(#document,n,0)
WriteStringN(text)
Next
CloseFile(0)
EndIf
endif
EndProcedure
Procedure charger_document()
text.s=OpenFileRequester( "chargement d'un fichier texte","","Fichier text|*.txt",0)
If text<> ""
If OpenFile(0,text)
nombre_ligne=CountGadgetItems(#document)
For n=0 To nombre_ligne-1
text.s=GetGadgetItemText(#document,n,0)
text.s=ReadString()
AddGadgetItem(#document,-1,text)

Next
CloseFile(0)
EndIf
endif
EndProcedure



;creation de l'interface et de la boucle principale 
; creation de la fenetre 
If OpenWindow(#Interface_fenetre,0,0,600,480,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar| #PB_Window_ScreenCentered ,"Mini Bloc Note ")
;Creation de la barre outil 
If CreateToolBar(0,WindowID())
   ToolBarStandardButton(#barre_nouveau,#pb_toolbaricon_new)
   ToolBarStandardButton(#barre_charger,#pb_toolbaricon_open)
   ToolBarStandardButton(#barre_sauver,#pb_toolbaricon_save)
   ToolBarStandardButton(#barre_effacer, #PB_ToolBarIcon_delete)
   ToolBarToolTip(#barre_nouveau,"Nouveau document ") 
   ToolBarToolTip(#barre_charger,"Ouvrir un fichier ") 
   ToolBarToolTip(#barre_sauver,"Sauvegarder un fichier ") 
   ToolBarToolTip(#barre_effacer,"Effacer le texte ") 

EndIf
;Creation du menu 
If CreateMenu(0,WindowID())
   MenuTitle("Information")
   MenuItem(#menu_info,"A propos de ..")
EndIf
;creation du gadget
If CreateGadgetList(WindowID())
EditorGadget(#document,10,35,580,415)
EndIf
   



EndIf

Repeat
    event= WaitWindowEvent()
   Select event
   Case #pb_EventMenu
  
   
   Select EventMenuID()
   Case#barre_charger:charger_document()

    Case#barre_sauver:creation_document()
    Case #barre_effacer :MessageRequester("Info ", "Effacement du texte ", #MB_OK|#MB_ICONERROR)
    SetGadgetText(#document, "")
   ActivateGadget(#document)
      Case#menu_info:MessageRequester("Info", "Mini Bloc note " + Chr(10) + "par Jean-bernard-2004 ", #MB_OK|#MB_ICONINFORMATION)
   EndSelect
   
    Case #PB_EventCloseWindow
    quitter_fenetre_0=1
   
   EndSelect
  
  
Until quitter_fenetre_0=1
     

 
     
[/list]
Jbernard13
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

Je ne sais pas si ca répond à ta question , vas voir ici : http://www.2dev.org/index.php?mod=artic ... res&id=108
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

j'ai trouver enfin je crois
ca marche en tout cas j'ai rajouter la boucle repeat et until eof(0)

faut'il faire ecrire ça a chaque fois qu'on charge un fichier pour lire toutes les lignes?

merci et dite moi si c'est les bonnes commandes

jbernard13

Code : Tout sélectionner


Procedure charger_document()
text.s=OpenFileRequester( "chargement d'un fichier texte","","Fichier text|*.txt",0)
nombre_ligne=CountGadgetItems(#document)

If text<> ""
If OpenFile(0,text)
Repeat

For n=0 To nombre_ligne-1
text.s=GetGadgetItemText(#document,n,0)
text.s=ReadString()
AddGadgetItem(#document,-1,text)

Next
Until Eof(0)
CloseFile(0)
EndIf
endif
EndProcedure

Jbernard13
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Il suffit de faire ça:

Code : Tout sélectionner

Procedure charger_document() 
  text.s=OpenFileRequester( "chargement d'un fichier texte","","Fichier text|*.txt",0) 
  If text<> "" 
    If OpenFile(0,text)
      Repeat
        AddGadgetItem(#Document,-1,ReadString())
      Until Eof(0)
      CloseFile(0)
    EndIf
  EndIf 
EndProcedure 
GetGadgetItemText ne sert à rien, ici, puisque cette commande récupère la ligne dans l'éditeur.
Et dans le cas ou tu charges le fichier, l'éditeur est vide
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Salut Jbernard13,

voici ton premier code corrigé mais je n'ai pas fait de tests :roll:
je ne comprend pas pourquoi tu utilise le nombre de ligne de l'éditorgadget

ça

Code : Tout sélectionner

;         nombre_ligne = CountGadgetItems(#document)
;         For n = 0 To nombre_ligne - 1
;            text.s = GetGadgetItemText(#document, n, 0)
ça ne sert à rien ;

Tu veux remplir l'editeur avec le contenu du fichier, donc tu dois lire le fichier et ensuite remplir l'éditeur.

N'oublies pas aussi de supprimer toutes les lignes de l'éditeur avant de charger.

Encore une petite explication.

Il ne faut jamais, jamais et jamais lire le contenu d'un fichier avec la boucle repeat until car cette boucle sera obligatoirement effectuée au moins une fois et que se passet-il si on essaye de lire un fichier vide ?

Utilise la boucle While qui va d'abord tester et faire l'action si le test est vrai, c'est la grande différence entre ces 2 boucles et il faut que tu comprenne bien.


j'espère que le code qui suit correspond à ce que tu cherche. J'ai mis en commentaire ce qui ne sert pas.

Et puis aussi, la procedure est courte et tu utlise la même variable pour le nom de fichier et chaque ligne du fichier, ça marche mais ça reste dans de plus longs programmes une source d'erreur. Il vaut mieux utiliser une deuxième variable pour lire chaque ligne du fchier.

Code : Tout sélectionner

Procedure charger_document()
   text.s = OpenFileRequester( "chargement d'un fichier texte", "", "Fichier text|*.txt", 0)
   If text <> ""
      If OpenFile(0, text)
;         nombre_ligne = CountGadgetItems(#document)
;         For n = 0 To nombre_ligne - 1
;            text.s = GetGadgetItemText(#document, n, 0)
            While Eof(0) = 0  ; on lit tant que la fin du fichier n'est pas atteinte
               text.s = ReadString()  ; lecture de la ligne courante dans le fichier
               AddGadgetItem(#document, -1, text) ;écriture de cette même ligne 
            ; on reboucle
            Wend
;         Next
         CloseFile(0)
      EndIf
   EndIf
EndProcedure

Dernière modification par Anonyme2 le jeu. 25/nov./2004 15:40, modifié 1 fois.
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

merci denis

ca marche

dis moi si la procedure de sauvegarde est t'ellle correct

a+
Jbernard13
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

A priori elle me semble correcte. :D
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Denis a écrit :...et que se passet-il si on essaye de lire un fichier vide ?
Rien!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Dans ta procédure de sauvegarde, tu utilises un SaveFileRequester(), et tu ne te sers pas du nom qu'il te retourne.

Code : Tout sélectionner

text.s=SaveFileRequester( "sauvegarde d'un fichier texte","","Fichier text|*.txt",0)

Code : Tout sélectionner

If CreateFile(0,"document.txt")
Il faut mettre

Code : Tout sélectionner

If CreateFile(0,text )
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Fred a bien verrouillé ses procédures de lecture mais ce n'est pas logique de tenter de lire dans un fichier si on ne sait pas s'il est vide ou non.

Je pensais qu'il y aurait un plantage du systeme.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Chris a écrit :Dans ta procédure de sauvegarde, tu utilises un SaveFileRequester(), et tu ne te sers pas du nom qu'il te retourne.

Code : Tout sélectionner

text.s=SaveFileRequester( "sauvegarde d'un fichier texte","","Fichier text|*.txt",0)

Code : Tout sélectionner

If CreateFile(0,"document.txt")
Il faut mettre

Code : Tout sélectionner

If CreateFile(0,text )
J'ai besoin de lunette (c'est con j'en ai déjà) :jesors:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Je ne dis pas que c'est logique, (c'est même tout le contraire), mais sous pure, ça ne pose pas de problème.

Maintenant, c'est vrai qu'il est préférable de prendre l'habitude, soit de tester la taille du fichier, soit d'utiliser une boucle While.

(Moi, je ne sais pas pourquoi, j'ai horreur de cette boucle!) :lol:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

J'ai souvenir de plantage du fait de l'utilisation de repeat à la place d'un while dans la lecture de fichier mais les choses ont bien évoluées.

Bien souvent on commet des erreurs (et moi le premier) en utilisant repeat au lieu d'un while et parfois on le voit plus tard et on ne comprend pas pourquoi tout d'un coup ça marche plus alors que ça allait bien .
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Autre chose, quand tu fais une sauvegarde d'un fichier, il faut toujours vérifier la présence de l'extension.

Essaye ce bout de code avec le debugger, et donne un nom de fichier sans mettre l'extension .txt, et regarde le résultat.

Code : Tout sélectionner

text.s=SaveFileRequester( "sauvegarde d'un fichier texte","","Fichier text|*.txt",0)
Debug text
Il faut ajouter un test, comme ça:

Code : Tout sélectionner

If GetExtensionPart(text)<> "txt"
  text+".txt"
EndIf
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Code : Tout sélectionner

If LCase(GetExtensionPart(text)) <> "txt" 
  text+".txt" 
EndIf
En mettant l'extension en minuscule avant de comparer, c'est mieux car si l'extension est TXT ou lieu de txt, ça marche po :D
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre