Extraire nombre décimaux d'un chaîne pour versioning
Bonjour,
Je fait un programme qui met à jour les versions d'un fichier. Mon programme actuel ne prend pas en compte les nombres à virgules. Autrement dit, si mon fichier se nomme Excel-Pratique23 Il va le renommer en Excel-Pratique_v23. Je voudrais ajouter à ça une virgule tel que mon programme renomme en Excel-Pratique_v2.3
Morceau de mon programme actuel :
Function RenameFile(chemin As String)
Dim RegEx As VBScript_RegExp_55.RegExp
Dim Matches As VBScript_RegExp_55.MatchCollection
Dim Match As VBScript_RegExp_55.Match
Dim Result As String
Dim Filename As String
Dim Repertoire As String
Filename = Right(chemin, InStr(1, StrReverse(chemin), "\") - 1) ' Récupère le nom du fichier dans repertoire grâce à la fonction strreverse qui trouve la position du \ avant le nom du fichier
Repertoire = Replace(chemin, Filename, "") ' Filename = nom avec et sans chemin
Set RegEx = New VBScript_RegExp_55.RegExp
Filename = Replace(Filename, "-v", "_v") ' On remplace les - par _ dans le Filename
RegEx.Pattern = "^(.+)(_V[0-9]+)\.(.+)$" ' Teste si le nom est formalisé
If Not RegEx.Test(Filename) Then ' Si il n'est pas formalisé :
RegEx.Pattern = "^([^0-9|\.|_]+)_*([0-9]*)\.(.+)$" ' Découpe le nom pour récupérer les parties à réassembler en excluant le underscore
Set Matches = RegEx.Execute(Filename) ' Vérifie si le nom correspond avec me formalisme
If (Matches(0).SubMatches(1)) = "" Then ' Si ça match ;
Result = Repertoire & RegEx.Replace(Filename, "$1_v0.1.$3") ' réassemble avec les morceaux trouvés et v0.1 car pas de numérotation
Else ' Si ça match pas ;
Result = Repertoire & RegEx.Replace(Filename, "$1_v$2.$3") ' Réassemble les morceaux en insérant le _v
End If
Name chemin As Result ' Nommer le nouveau chemin
End If
End FunctionJ'ai tenté quelques modifications mais je ne maîtrise pas très bien le pattern. Si quelqu'un peut m'aider s'il vous plaît !
RegEx.Pattern = "^(.+)(_V[0-9]{1,2}(.)[0-9]+)\.(.+)$"
If Not RegEx.Test(Filename) Then
RegEx.Pattern = "^([^[0-9]{1,2}(.)[0-9]|\.|_]+)_*([0-9]{1,2}(.)[0-9]*)\.(.+)$" Bonjour,
Outre les soucis de compatibilité possibles, l'objet regex est assez lourd et son utilisation tend parfois à complexifier la résolution de problèmes pas si compliqués.
Il faut donc essayer de l'utiliser à bon escient...
Pouvez-vous donner tous les cas de figure possibles et le résultat à obtenir à chaque fois ? Par exemple, avec EP123, doit-on obtenir EP1.2.3, EP12.3 ou EP1.23 ?
Par ailleurs, je ne comprends pas cette ligne :
Result = Repertoire & RegEx.Replace(Filename, "$1_v0.1.$3")A quoi correspondent les $1 et $3 et le 0.1. ? Ce sont les matches et sous-matches ?
Cdlt,