Goto (special dédicace à SPH)

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Goto (special dédicace à SPH)

Message par Ar-S »

Salut les codeurs.
Je me suis replongé dans PB (ça faisait un moment) pour bosser sur un projet perso.

On a souvent rigolé face à l'utilisation à goto heuuu à gogo de la fonction goto un peu oldschool.
Cependant je suis dans un cas ou je la trouve relativement probante.

En gros j'initialise un fichier PREF. Si celui-ci n'existe pas je le créé.
Dans un autre soft j'avais fait un truc un peu lourd genre :

Code : Tout sélectionner

Procedure InitPref(fichierPref$)
    If OpenPreferences(fichierPref$)
        Debug "ouvert"
        ; je lis ma ribambelle de readprefstring ici
        ; $paramettre1 = readprefstring (.....) etc
        ClosePreferences()
    Else
        Debug "Le fichier n'existe pas ou n'est pas lisible"
        Debug "Création du fichier"
        CreatePreferences(pref$,#PB_Preference_NoSpace|#PB_Preference_GroupSeparator)
        ; je créais ma ribambelle de writeprefstring ici
        ClosePreferences()
        
        ; ---------!> puis je me réécrivais le pavé <!-----------
        If OpenPreferences(fichierPref$)
            Debug "ouvert"
            ; je lis ma ribambelle de readprefstring ici
            ; $paramettre1 = readprefstring (.....) etc
            ClosePreferences()
        EndIf
    EndProcedure
donc je me suis dit que le goto ici peut être bien pratique.

Code : Tout sélectionner

Procedure InitPref(fichierPref$)
	gogogo:
    If OpenPreferences(fichierPref$)
        Debug "ouvert"
        ; je lis ma ribambelle de readprefstring ici
        ; $paramettre1 = readprefstring (.....) etc
        ClosePreferences()
    Else
        Debug "Le fichier n'existe pas ou n'est pas lisible"
        Debug "Création du fichier"
        CreatePreferences(pref$,#PB_Preference_NoSpace|#PB_Preference_GroupSeparator)
        ; je créait ma ribambelle de writeprefstring ici
        ClosePreferences()
        goto gogogo:
        EndIf
    EndProcedure
Avez vous une autre méthode ou est-ce que cela vous paraît adéquat ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Goto (special dédicace à SPH)

Message par Marc56 »

En testant avant ?

Code : Tout sélectionner

Procedure InitPref(fichierPref$)
    If Not OpenPreferences(fichierPref$)
        Debug "Le fichier n'existe pas ou n'est pas lisible"
        Debug "Création du fichier"
        If CreatePreferences(fichierPref$, #PB_Preference_NoSpace|#PB_Preference_GroupSeparator)
            ; ...
            ClosePreferences()
        Else
            Debug "Ne peut créer le fichier " + fichierPref$
        EndIf
    Else 
        If OpenPreferences(fichierPref$)
            Debug "ouvert"
            ; ...
            ClosePreferences()
        Else
            Debug "Problème d'ouverture du fichier " + fichierPref$
        EndIf
    EndIf
EndProcedure
PS. C'est normal que tu mettes une fois pref$ et fichierPref$ ?
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Goto (special dédicace à SPH)

Message par Ar-S »

PS. C'est normal que tu mettes une fois pref$ et fichierPref$ ?
Oui j'ai ecris à la volée un peu à l'arrache.. :twisted:

Dans ton exemple, le soucis est que quand tu fais ton CreatePreferences(fichierPref$) tu n'initialise pas tes variables donc tu dois relancer l'InitPref(fichierPref$) non ? C'est le thème du sujet en fait.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Goto (special dédicace à SPH)

Message par Marc56 »

D'habitude je fais ceci:

Code : Tout sélectionner

    If FileSize(fichierPref$) = -1 
        CreatePreferences() 
        ; Écritures
    Else
        OpenPreferences(
        ; Lectures
    EndIf
    ClosePreferences()
:wink:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Goto (special dédicace à SPH)

Message par Ar-S »

Certes mais ça ne veut pas dire que lorsque tu crées tu as le même contenu que dans ton openpref ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Goto (special dédicace à SPH)

Message par boddhi »

Salut Ar-S

Le risque, avec ton code tel qu'il est là, est qu'il tourne en boucle s'il y un problème lors de la création du fichier de prefs.
Pour ma part, je me sers principalement du Goto notamment lors de l'appel aux commandes xxxxFileRequester() lorsque l'utilisateur ne sélectionne pas de fichier pour lui permettre de resélectionner un fichier ou lorsque ce dernier n'est pas valide.

Code : Tout sélectionner

RequeteNomFichier:
Fichier.s=SaveFileRequester("Sauvegarde","Fichier.txt","Fichiers texte|*.txt",0)
If Fichier=""
  If MessageRequester("Titre","Aucun fichier sélectionné ! Annuler ?",#PB_MessageRequester_YesNo)=#PB_MessageRequester_No
    Goto RequeteNomFichier
  EndIf
EndIf
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Goto (special dédicace à SPH)

Message par Ar-S »

Oui j'avais prévu un compteur histoire d'éviter cela.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre