Declare Generator

Programmation d'applications complexes
Avatar de l’utilisateur
Ar-S
Messages : 9471
Inscription : dim. 09/oct./2005 16:51
Contact :

Declare Generator

Message par Ar-S »

L'ami Micoute a fait un petit soft pour créer déclarer automatiquement les procédures dans un programme. => ici

Je eu envie de me faire une version plus simple et concise que j'appelle, une fois compilée, via les outils de l'IDE. Il ne gère pas les fichiers, seulement ce qui se trouve en presse papier.
Voilà le code et les instructions.
EnJoYeZ :P

Code : Tout sélectionner

; =======================================================
; =======================================================
; Nom : ~ Declare Generator ~
; Déclaration automatique des procédures
; Code : Ar-S // PB 5.7x // Avril 2021
; Regex : Marc56 alias Regex Man :)
; Instructions
; Copier votre code dans le presse papier
; Exécutez Declare Generator
; Faites un coller en début de votre code.. 
; That's all falk !
; =======================================================


Global t$ = GetClipboardText()

EnableExplicit

Define D$
Define Clip$ = GetClipboardText()

If Clip$ = "" 
     MessageRequester("Oouups","Vous devez copier un code dans le presse papier",#MB_ICONEXCLAMATION)
    End 
EndIf

Define RegEx$ = "\sprocedure(\.?[a-zA-Z]?\s\w+\(.*?\))"

If Not CreateRegularExpression(0, RegEx$, #PB_RegularExpression_NoCase)
    MessageRequester("Erreur", "L'expression régulière n'est pas valide")
    End
EndIf

If ExamineRegularExpression(0, Clip$)
    While NextRegularExpressionMatch(0)
        D$ + "Declare" + RegularExpressionGroup(0, 1)+#LF$
    Wend
    D$ + ";EnJoY your time"+#LF$
    
    ;Stockage du résultat dans le presse papier..
    SetClipboardText (D$)
    MessageRequester("OK","Vous pouvez maintenant coller le résultat au début de votre code.",#MB_ICONINFORMATION)
    ; Ne vous reste plus qu'à coller en début de code.
    
Else
    MessageRequester("Désolé", "Le presse-papier ne conscient pas de procédures")
EndIf



~~~~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 : 2145
Inscription : sam. 08/févr./2014 15:19

Re: Declare Generator

Message par Marc56 »

C'est intéressant comme idée :D
Par contre il en ramasse un peu trop: si on passe sur ton code, il trouve:

Code : Tout sélectionner

Declare "), NP2 = CountString(t$,"Declare.")
Declare ",StartP)
Declare Recupe()
Declare RecupeDot()
Declare.")
Declare.",StartP)
;EnJoY your time
Il faudrait vérifier à gauche.

Il est aussi possible d'utiliser une RegEx
Au plus simple:

Code : Tout sélectionner

^Procedure .+?\)$
(mais ne fonctionne que si Procedure est en début de ligne)

Celle-ci est un peu mieux:

Code : Tout sélectionner

\sprocedure(\.?[a-zA-Z]?\s\w+\(.*?\))
Elle capture aussi le type de valeur de retour.
Mais elle ramasse aussi celle qui se trouve dans un commentaire.

Un petit bout de code RegEx qui semble fonctionner

Code : Tout sélectionner

EnableExplicit

Define Clip$ = GetClipboardText()

If Clip$ = "" 
    MessageRequester("Erreur", "Le presse-papier est vide") 
    End 
EndIf

Define RegEx$ = "\sprocedure(\.?[a-zA-Z]?\s\w+\(.*?\))"

If Not CreateRegularExpression(0, RegEx$, #PB_RegularExpression_NoCase)
    MessageRequester("Erreur", "L'expression régulière n'est pas valide")
    End
EndIf

If ExamineRegularExpression(0, Clip$)
    While NextRegularExpressionMatch(0)
        Debug "Declare" + RegularExpressionGroup(0, 1)
    Wend
Else
    MessageRequester("Désolé", "Le presse-papier ne conscient pas de procédures")
EndIf

End
Sur ton code (auquel j'ai ajouté quelques autres procédure pour tester), il trouve et créé bien

Code : Tout sélectionner

Declare Recupe()
Declare.i Recupe2()
Declare.i Recupe3(Hello, World.s)
Declare RecupeDot()
:wink:
Avatar de l’utilisateur
Guillot
Messages : 516
Inscription : jeu. 25/juin/2015 16:18

Re: Declare Generator

Message par Guillot »

bon, j'arrive apres la bataille

moi, pour l'analyse de code je fais ça
(mais je devrai peut etre me mettre aux expressions régulires...)

Code : Tout sélectionner

Procedure.s codefiltre(txt.s)
    Protected i,n,ch,co,  c.w
    
    n=Len(txt)
    Dim t.w(n-1)
    CopyMemory(@ txt,@ t(0),n*2)
    For i=0 To n-1
        c=t(i)
        Select c
            Case 34:ch=~ch	; guillemet
            Case 59:co=1	; point virgule
            Case 13:co=0	; me souviens plus pourquoi j'ai fais ça (mais doit y avoir une bonne raison...)
        EndSelect      
        If ch:c=34 :EndIf
        If co:c=59:EndIf
        t(i)=c
    Next
    CopyMemory(@ t(0),@ txt,n*2)
    ProcedureReturn txt
EndProcedure

g.s=Chr(34)
t.s="Global NP = CountString(t$,"+g+"Procedure "+g+"), NP2 = CountString(t$,"+g+"Procedure."+g+") ;commentaire"
tt.s=codefiltre(t)
Debug t
Debug tt
je fait la recherche sur le code filtré, et les modifs sur le code d'origine

une petite question marc56:
t'es le marc_256 du forum anglais ?
Avatar de l’utilisateur
Ar-S
Messages : 9471
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Declare Generator

Message par Ar-S »

@Marc56 Effectivement j'avais testé de sur de gros codes mais sans avoir songé que le mot Procedure pouvait être en comment ou dans une variable.
J'ai modifié le code au 1er topic pour y ajouter ton regex. Merci :P
~~~~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 : 2145
Inscription : sam. 08/févr./2014 15:19

Re: Declare Generator

Message par Marc56 »

Nouvelle version qui prend en compte plus de possibilités et ignore les procédures en commentaire.

Code : Tout sélectionner

^[^;]*?Procedure(\$?(?:\.[A-Za-z])?\h[A-Za-z_0-9]+\h?\((?:[A-Za-z0-9.,$ ]*)?\))
Exemple fonctionnel avec quelques lignes pour tester (on peut ainsi en ajouter)

Code : Tout sélectionner

EnableExplicit

Define Clip$ = "Procedure Hello_World()"                    + #CRLF$ +
               "Procedure Hello_World_00()"                 + #CRLF$ +
               "Procedure$ Hello_World_00()"                + #CRLF$ +
               "Procedure Hello_World_01(Hi$)"              + #CRLF$ +
               "Procedure Hello_World_01(Hi.s)"             + #CRLF$ +
               "Procedure.i Hello_World_01(Hi.s)"           + #CRLF$ +
               "Procedure$ Hello_World_01(Hi.s)"            + #CRLF$ +
               "Procedure 01_OK()              "            + #CRLF$ +
               "  Procedure 02_OK()            "            + #CRLF$ +
               "    Procedure 03_OK_()     "                + #CRLF$ +
               "a=0 : Procedure.b 04_OK()        "          + #CRLF$ +
               "Procedure 05_OK(param)         "            + #CRLF$ +
               "Procedure 06_OK (param, Parm2) "            + #CRLF$ +
               "Procedure.i 07_OK()   "                     + #CRLF$ +
               "Procedure.i 08_OK()"                        + #CRLF$ +
               "Procedure test() : a=1 : EndProcedure  "    + #CRLF$ +
               "EndProcedure         "                      + #CRLF$ +  ; No
               ";Procedure 20_KO()             "            + #CRLF$ +  ; No
               "; Procedure 21_KO()           "             + #CRLF$ +  ; No
               "a=0 : ; Procedure 22_KO()    "              + #CRLF$ +  ; No
               ";  Procedure 23_KO()             "          + #CRLF$ +  ; No
               ";   Procedure 24_KO()        "              + #CRLF$ +  ; No
               "a=0 : ;     Procedure 25_KO()"              + #CRLF$ +  ; No
               "a=0 : ;     Procedure   26_KO()"                        ; No

Define RegEx$ = "^[^;]*?Procedure(\$?(?:\.[A-Za-z])?\h[A-Za-z_0-9]+\h?\((?:[A-Za-z0-9.,$ ]*)?\))"

If Not CreateRegularExpression(0, RegEx$, #PB_RegularExpression_NoCase | 
                                          #PB_RegularExpression_Extended | 
                                          #PB_RegularExpression_MultiLine | 
                                          #PB_RegularExpression_AnyNewLine)
    MessageRequester("Error", "RegEx Not valid")
    End
EndIf

Define i
If ExamineRegularExpression(0, Clip$)
    While NextRegularExpressionMatch(0)
        i + 1
        Debug "Declare" + RegularExpressionGroup(0, 1)
    Wend
EndIf
FreeRegularExpression(0)
Debug #CRLF$ + "Found: " + i

End
:wink:
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Declare Generator

Message par Zorro »

Marc56 a écrit : ven. 23/avr./2021 9:28 C'est intéressant comme idée :D


Merci :) ;)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
grendizer
Messages : 59
Inscription : mer. 29/mai/2019 6:29

Re: Declare Generator

Message par grendizer »

Trés bonne idée

au passge un énorme Coucou à Zorro
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Declare Generator

Message par Zorro »

grendizer a écrit : jeu. 29/avr./2021 17:23 Trés bonne idée

au passge un énorme Coucou à Zorro

yo , ;)


je disais Merci pour l'idée , parceque c'est présent depuis le début dans EPB ;)

je vois que le forum a changé ... de look ...

bon ,je retourne sur Blender (ben oui, je suis devenu un "pro" de Blender :D )
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Declare Generator

Message par Micoute »

Bonjour Zorro. C'est normal, avec l'âge, les goûts changent.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Declare Generator

Message par venom »

Zorro a écrit : dim. 02/mai/2021 9:24 bon ,je retourne sur Blender (ben oui, je suis devenu un "pro" de Blender :D )
Ouep j'ai vue ça sur youtube :wink: J'ai d'ailleurs poster un message à une de tes vidéos :D







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Declare Generator

Message par Zorro »

Merci :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Répondre