Page 1 sur 1

Goto (special dédicace à SPH)

Publié : mar. 19/sept./2023 10:51
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 ?

Re: Goto (special dédicace à SPH)

Publié : mar. 19/sept./2023 12:50
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$ ?

Re: Goto (special dédicace à SPH)

Publié : mar. 19/sept./2023 13:37
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.

Re: Goto (special dédicace à SPH)

Publié : mar. 19/sept./2023 13:52
par Marc56
D'habitude je fais ceci:

Code : Tout sélectionner

    If FileSize(fichierPref$) = -1 
        CreatePreferences() 
        ; Écritures
    Else
        OpenPreferences(
        ; Lectures
    EndIf
    ClosePreferences()
:wink:

Re: Goto (special dédicace à SPH)

Publié : mar. 19/sept./2023 15:01
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 ?

Re: Goto (special dédicace à SPH)

Publié : mar. 19/sept./2023 16:20
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

Re: Goto (special dédicace à SPH)

Publié : mar. 19/sept./2023 16:53
par Ar-S
Oui j'avais prévu un compteur histoire d'éviter cela.