Page 1 sur 1
Declare Generator
Publié : jeu. 22/avr./2021 23:41
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
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
Re: Declare Generator
Publié : ven. 23/avr./2021 9:28
par Marc56
C'est intéressant comme idée
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:
(mais ne fonctionne que si Procedure est en début de ligne)
Celle-ci est un peu mieux:
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()

Re: Declare Generator
Publié : ven. 23/avr./2021 11:54
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 ?
Re: Declare Generator
Publié : sam. 24/avr./2021 12:36
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

Re: Declare Generator
Publié : lun. 26/avr./2021 13:42
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

Re: Declare Generator
Publié : jeu. 29/avr./2021 9:08
par Zorro
Marc56 a écrit : ven. 23/avr./2021 9:28
C'est intéressant comme idée
Merci

Re: Declare Generator
Publié : jeu. 29/avr./2021 17:23
par grendizer
Trés bonne idée
au passge un énorme Coucou à Zorro
Re: Declare Generator
Publié : dim. 02/mai/2021 9:24
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

)
Re: Declare Generator
Publié : dim. 02/mai/2021 9:40
par Micoute
Bonjour Zorro. C'est normal, avec l'âge, les goûts changent.
Re: Declare Generator
Publié : dim. 02/mai/2021 11:23
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

)
Ouep j'ai vue ça sur youtube

J'ai d'ailleurs poster un message à une de tes vidéos
@++
Re: Declare Generator
Publié : dim. 02/mai/2021 12:08
par Zorro
Merci
