Juste une question ce bout de code svp....

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

Juste une question ce bout de code svp....

Message par jbernard13 »

Bonjour, j'ai une petite question :
voilà je voudrais que mes 2 champs sois enregistrer dans un fichier ligne par ligne , pour se faire j'ai écris 2 fois la commande WriteStringN et cela marche , mais j'en suis sur qu'il y a une astuce en mettant une seule commande WriteStringN et un saut de ligne mais là je me rappelle plus .

Code : Tout sélectionner

*** Test de sauvegarde***


;***Constante de la fenetre et des gadgets***
Enumeration
  #Fenetre_0
  #String_1
  #String_2
  #Bouton_sauver
  #Fichier
EndEnumeration

;*** Procedure ***
Procedure sauver()
  CreateFile(#Fichier,"Data")
  Champ1$=GetGadgetText(#String_1)
  Champ2$=GetGadgetText(#String_2)
  WriteStringN(#Fichier,Champ1$)
  WriteStringN(#Fichier,Champ2$)
  MessageRequester("Infos","Les champs sont  sauvegarder",#MB_OK)
  CloseFile(#Fichier)
EndProcedure

;*** Creation de la fenetre et des gadgets ***
If OpenWindow(#Fenetre_0,0,0,300,120,"Fenetre de test",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
  StringGadget(#String_1,10,20,200,20,"")
  StringGadget(#String_2,10,50,200,20,"")
  ButtonGadget(#Bouton_sauver,20,90,100,20,"Sauver")
EndIf


;*** Boucle du programme ***
Repeat  
  Select WaitWindowEvent()
    Case #PB_Event_Gadget ;** Gestion des gadgets 
      Select EventGadget()
        Case #Bouton_sauver : sauver()
          
      EndSelect
    Case #PB_Event_CloseWindow;** Gestion de la fermeture de la fenetre 
       Quitter = #True  
    EndSelect
    Until Quitter
   End 
  
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

Code : Tout sélectionner

  WriteString(#Fichier,Champ1$)  ; 1er champ [sans retour à la ligne]
  WriteString(#Fichier,",")      ; séparateur [sans retour à la ligne]
  WriteStringN(#Fichier,Champ2$) ; 2e champ [avec retour à la ligne]
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

Merci Gnozal
donc si je mets 2 fois WriteStringN c'est pas bon alors ?
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

jbernard13 a écrit :Merci Gnozal
donc si je mets 2 fois WriteStringN c'est pas bon alors ?
Ben non, pas si tu veux les données sur une même ligne.
Purebasic.chm a écrit :WriteString(#File, Text$ [, Flags])   : write a string in the #File.
WriteStringN(#File, Text$ [, Flags]) : write a string in the #File and add the 'end of line' character
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

Je crois que ce qu'il veux c'est enregistrer ces deux champs sur 2 lignes mais avec une seulle commande : WriteString(#Fichier, Champ1$ + chr(13) + chr(10) + Champ2$)
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

cederavic a écrit :Je crois que ce qu'il veux c'est enregistrer ces deux champs sur 2 lignes mais avec une seulle commande : WriteString(#Fichier, Champ1$ + chr(13) + chr(10) + Champ2$)
Ah bon, pt'êt ben ...
Il faut ajouter un CrLf à la fin alors :

Code : Tout sélectionner

WriteString(#Fichier, Champ1$ + #CrLf$ + Champ2$ + #CrLf$)
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Message par case »

cederavic a écrit :Je crois que ce qu'il veux c'est enregistrer ces deux champs sur 2 lignes mais avec une seulle commande : WriteString(#Fichier, Champ1$ + chr(13) + chr(10) + Champ2$)
il vaudrais mieux qu'il utilise tout de même writestringN() sinon la suite vas s'ajouter sur la même ligne il me semble.

WriteStringN(#Fichier, Champ1$ + chr(13) + chr(10) + Champ2$)

ou bien il faut ajouter les caracteres de fin de ligne aussi a la fin de champ2$


WriteString(#Fichier, Champ1$ + chr(13) + chr(10) + Champ2$+ chr(13) + chr(10) )

alors ce post me fais me poser une question d'optimisation.

écrire plusieurs ligne en une seule ligne réduit le nombre d'accès disque.

donc peut être que dans un souci d'optimisation il vaudrais mieux concaténer les chaines a écrire dans un tampon en mémoire et écrire celui ci quand il est plein au lieu de faire des accès disque pour écrire chaque ligne ?

bien sur le souci c'est qu'en cas de fin inopinée du programme on perd les données non encore enregistrées

et le temps gagné en accès disque est-il plus grand que celui perdu en remplissant le buffer...

je vais essayer de tester ca :)
ImageImage
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

merci case

j'ai fait comme tu as dis jai rejouter la lecture du fichier malheureusement seule la premiere est prise en compte pas la deuxieme
en faites au chargement il ecris dans les 2 champs la meme ligne..

Code : Tout sélectionner

*** Test de sauvegarde***


;***Constante de la fenetre et des gadgets***
Enumeration
  #Fenetre_0
  #String_1
  #String_2
  #Bouton_sauver
  #Fichier
EndEnumeration

;*** Procedure ***
Procedure sauver()
  CreateFile(#Fichier,"Data")
  Champ1$=GetGadgetText(#String_1)
  Champ2$=GetGadgetText(#String_2)
  ;WriteString(#Fichier,Champ1$)
 ;WriteString(#Fichier,",")
  ;WriteStringN(#Fichier,Champ2$)
  WriteStringN(#Fichier, Champ1$ + Chr(13) + Chr(10) + Champ2$) 
  MessageRequester("Infos","Les champs sont  sauvegarder",#MB_OK)
  CloseFile(#Fichier)
EndProcedure
Procedure charger()
  OpenFile(#Fichier,"Data")
  ReadFile(#Fichier,"Data")
  Lire$=ReadString(#Fichier)
  SetGadgetText(#String_1,Lire$)
  SetGadgetText(#String_2,Lire$)
  CloseFile(#Fichier)
  
  
 
EndProcedure
;*** Creation de la fenetre et des gadgets ***
If OpenWindow(#Fenetre_0,0,0,300,120,"Fenetre de test",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
  StringGadget(#String_1,10,20,200,20,"")
  StringGadget(#String_2,10,50,200,20,"")
  ButtonGadget(#Bouton_sauver,20,90,100,20,"Sauver")
EndIf
charger()

;*** Boucle du programme ***
Repeat  
  Select WaitWindowEvent()
    Case #PB_Event_Gadget ;** Gestion des gadgets 
      Select EventGadget()
        Case #Bouton_sauver : sauver()
          
      EndSelect
    Case #PB_Event_CloseWindow;** Gestion de la fermeture de la fenetre 
       Quitter = #True  
    EndSelect
    Until Quitter
   End 
  
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

Code : Tout sélectionner

  ; OpenFile(#Fichier,"Data") 
  ReadFile(#Fichier,"Data")
  Lire$=ReadString(#Fichier)  ; <-- lire 1er champ
  SetGadgetText(#String_1,Lire$) 
  Lire$=ReadString(#Fichier)  ; <-- lire 2e champ
  SetGadgetText(#String_2,Lire$)
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

Merci Gnozal
Répondre