Salut les mecs,

Juste pour vous mettre le cerveau en ébulition, je vous propose aujourd'hui un code de convertion de code vb.net en vbScript de ma conception.

Après avoir créer un système de macro dans mon nouvel éditeur, j'ai intégré parmi ses macros cette fonction de convertion,  que j'ai pris beaucoup de plaisir à coder.

Bien évidemment elle ne convertis pour l'instant que les principes généraux du langage, pas encore les fonctions intégrées. Cela dit, ça me fait gagner un temps fou, à moi qui ait pas mal de code vb.net que je migre en vbScript, le langage de scripting de la plupart de mes applications scriptables.

Une autre précision avant que je ne vous colle le code, c'est du vbScript, et, et vous ne pourrez malheureusement pas l'exécuter directement chez vous, à moins que vous ne recodiez les fonctions RegSearch et RegReplace qui ma foi sont assez simples à comprendre.

Attention voici le code:

Début du code vbScript

Function ConvertVBNetToVBScript(s)
' convert a vb.net code into vbScript
dim i
dim m
dim pt
dim ss
dim sss
dim found
on error resume next
with VisuPad
' we remove blank spaces at begining of lines
pt = "^[ \t]+"
s = .RegReplace(s, pt, "", true, true, true)
' we remove all the option strict and option explicit
pt = "^[ \t]*option[ \t]+(strict|explicit)[ \t]+[^\r\n]+"
s = .RegReplace(s, pt, "", true, true, true)
' we  place the inherit line into a comment
pt = "^[ \t]*(Inherits[ \t]+[^\r\n]+)"
s = .RegReplace(s, pt, "' $1", true, true, true)
' we remove all the byval and byref
pt = "[ \t]*((optional[ \t]+)*byval|byref)[ \t]+"
s = .RegReplace(s, pt, "", true, true, false)
' we transform protected into private
pt = "^([ \t]*)protected([ \t]+)"
s = .RegReplace(s, pt, "$1Private ", True, true, true)
' we remove all the overloads, readonly, shadows, Overrides
pt = "[ \t]+(overloads|readonly|shadows|Overrides)[ \t]+"
s = .RegReplace(s, pt, " ", true, true, false)
' we remove all the  variable's types precisions
pt = "[ \t]+as[ \t]+[a-z\d_\.]+[ \t]*"
s = .RegReplace(s, pt, "", true, true, false)
' we transform object declaration with immediat assignation on the same line
pt = "^[ \t]*(public|private|dim)[ \t]+([a-z\d_]+)[ \t]*\=[ \t]*new[ \t]+([^\r\n]+)"
s = .RegReplace(s, pt, "$1 $2: Set $2 = New $3", true, true, true)
' we transform variables declaration with immediat assignation on the same line
pt = "^[ \t]*(public|private|dim)[ \t]+([a-z\d_]+)[ \t]*\=[ \t]*([^\r\n]+)"
s = .RegReplace(s, pt, "$1 $2: $2 = $3", true, true, true)
' we transform object declarations
pt = "([a-z\d_]+)[ \t]*\=[ \t]*new[ \t]+([a-z\d_]+)"
s = .RegReplace(s, pt, "Set $1 = New $2", true, true, false)
' we replace the class constructor declaration
pt = "[\r\n]+[ \t]*(public[ \t]+)*sub[ \t]+new[ \t]*\([\w\W]+?([\r\n]+[ \t]*end[ \t]+sub[^\r\n]*)"
set found = .RegSearch(s, pt, true, true, false)
for each m in found
ss = m.Value
pt = "sub[ \t]+new[ \t]*\("
ss = .RegReplace(ss, pt, "Sub Class_Initialize(", false, true, false)
s = Replace(s, m.Value, ss)
next
' we replace the class destructor declaration
pt = "[\r\n]+[ \t]*((public|private)[ \t]+)*sub[ \t]+Finalize[ \t]*\([\w\W]+?([\r\n]+end[ \t]+sub[^\r\n]*)"
set found = .RegSearch(s, pt, true, true, false)
for each m in found
ss = m.Value
pt = "sub[ \t]+Finalize[ \t]*\("
ss = .RegReplace(ss, pt, "Sub Class_Terminate(", false, true, false)
s = Replace(s, m.Value, ss)
next

' we replace the properties declarations
pt = "([\r\n]+)[ \t]*((public|private)[ \t]+)*property[ \t]+([a-z\d_]+)[\w\W]+?([\r\n]+end[ \t]+property[^\r\n]*)"
set found = .RegSearch(s, pt, true, true, false)
for each m in found
ss = ""
' first we treat the property get
sss = m.Value
pt = "[\r\n]+[ \t]*get[ \t]*([\w\W]+?)([\r\n]+end[ \t]+get)"
sss = .RegSearch(sss, pt, false, true, false)(0).SubMatches(0)
' we remove return at the begening and the end
sss = .RegReplace(sss, "^[\r\n]+", "", false, true, false)
sss = .RegReplace(sss, "[\r\n]+$", "", false, true, false)
' we complete the property get
sss = m.Submatches(0) & "Public Property Get " & m.Submatches(3) & "()" & vbLF & sss & vbLF & "End Property"
ss = sss
' now we treat the property set
sss = m.Value
pt = "[\r\n]+[ \t]*set[ \t]*\([^\)]+\)([\w\W]+?)([\r\n]+end[ \t]+set)"
sss = .RegSearch(sss, pt, false, true, false)(0).Value
if sss <> m.Value then
' we remove return at the begening and the end
sss = .RegReplace(sss, "^[\r\n]+", "", false, true, false)
sss = .RegReplace(sss, "[\r\n]+$", "", false, true, false)
' we make some replacement
sss = .RegReplace(sss, "^[ \t]*set[ \t]*\(([^\r\n]+)", "Public Property Let " & m.Submatches(3) & "($1", false, true, true) sss = .RegReplace(sss, "^[ \t]*end[ \t]+set(|[^\r\n]+)", "End Property", false, true, true)
ss = ss & vbLF & sss
end if ' property set found
' we replace in the text
s = Replace(s, m.Value, ss)
next

' we find all the sub or property let and replace their return
pt = "[\r\n]+[ \t]*((public|private)[ \t]+)*(sub|property[ \t]+let|property[ \t]+set)[ \t]+[\w\W]+?([\r\n]+end[ \t]+sub[^\r\n]*)"
set found = .RegSearch(s, pt, true, true, false)
for each m in found
ss = m.Value
pt = "^[ \t]*return([ \t]+[^\r\n]+|[ \t]+|)$"
ss = .RegReplace(ss, pt, "Exit Sub$1", true, true, true)
s = Replace(s, m.Value, ss)
next
' we find all the functions and replace their return
pt = "[\r\n]+[ \t]*((public|private)[ \t]+)*function[ \t]+([a-z\d_]+)[\w\W]+?([\r\n]+end[ \t]+function[^\r\n]*)"
set found = .RegSearch(s, pt, true, true, false)
for each m in found
ss = m.Value
pt = "^[ \t]*return[ \t]+([^\r\n]+)$"
ss = .RegReplace(ss, pt, m.Submatches(2) & " = $1" & vbLF & "Exit Function", true, true, true)
s = Replace(s, m.Value, ss)
next
' we find all the property get and replace their return
pt = "[\r\n]+[ \t]*((public|private)[ \t]+)*property[ \t]+get[ \t]+([a-z\d_]+)[\w\W]+?([\r\n]+end[ \t]+function[^\r\n]*)"
set found = .RegSearch(s, pt, true, true, false)
for each m in found
ss = m.Value
pt = "^[ \t]*return[ \t]+([^\r\n]+)$"
ss = .RegReplace(ss, pt, m.Submatches(2) & " = $1" & vbLF & "Exit Property", true, true, true)
s = Replace(s, m.Value, ss)
next
end with
' we return the value
ConvertVBNetToVBScript = s
' liberation
set m = nothing
set found = nothing
end function

Fin du code vbScript

Puisse cela inspirer quelqu'un !

Yannick Daniel Youalé
La programmation est une religion. Aimez-la, ou quittez-la.
www.visuweb.net


Progliste :
Pour se d�sinscrire de la liste : 
mailto:progliste-requ...@ml.free.fr?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/progliste@ml.free.fr/       

Je vous rappelle que les pièces jointe sont activés leur taille est limité à 2 MO
Pour acc�der aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je 
vous r�pondrez en priv�.
        
        

Répondre à