VB Script : Générer toutes les combinaisons avec répétition

Résolu
Manudu44 Messages postés 2 Statut Membre -  
Manudu44 Messages postés 2 Statut Membre -
L'objectif est de coder un script, sauvegardé au format .vbs, qui est capable d'énumérer toutes les combinaisons avec répétition d'une liste de caractères, en pouvant choisir la longueur des combinaisons.

Le résultat doit pouvoir être exploité sans le sauvegarder dans un fichier log.txt, afin, par exemple, de créer des dossiers qui serviront à ranger des documents (dans ce cas là, il est conseillé que la liste de caractère ne soit pas volumineuse).

1 réponse

  1. Manudu44 Messages postés 2 Statut Membre
     
    Sujet résolu !
    Const ForWriting = 2
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set WshShell = WScript.CreateObject("WScript.Shell")
    
    
    txt_File_Location = fso.GetParentFolderName(wscript.ScriptFullName) + "\Permutations avec répétition.txt" 'Emplacement du fichier .txt de sauvegarde des résultat
    If fso.FileExists(txt_File_Location) Then fso.DeleteFile txt_File_Location 'S'il existe déjà, le supprimer pour vider la liste de résultat
    Set txt_File = fso.OpenTextFile(txt_file_location, ForWriting, true)
    
    Longueur = InputBox("Entrez la longueur du résultat" + vbNewLine + vbNewLine + "Pour des raisons de code et de temps de calcul, vous êtes limité à 10 caratères." + vbNewLine + vbNewLine + vbNewLine + "Les caractères en trop seront tout simplement ignorés des opérations", "Entrée de la longueur du résultat", "3")
    If Longueur = "" OR Longueur = "0" Then Erreur = WshShell.Popup("Veuillez entrer une valeur au dessus de 0", 5, "ERROR", 0 + 64) : WScript.Quit 'Si la variable n'a pas de valeur, quitter
    Elements = Trim(InputBox("Entrez vos éléments, séparés par des virgules" + vbNewLine + vbNewLine + "Pour des raisons de code et de temps de calcul, vous êtes limité à 10 éléments." + vbNewLine + vbNewLine + vbNewLine + "Les éléments en trop seront tout simplement ignorés des opérations", "Entrée des éléments", "A, B, C"))
    If Elements = "" Then Erreur = WshShell.Popup("Veuillez entrer une liste d'éléments" + vbNewLine + "comportant entre 1 et 10 caractères", 5, "ERROR", 0 + 64) : WScript.Quit 'Si la variable n'a pas de valeur, quitter
    
    Elements = Replace(Elements, " ", "")
    Cut = Split(Elements, ",")
    
    If Len(Elements) = 1 Then txt_File.WriteLine Cut(0) : WScript.Quit 'S'il n'y a qu'un élément, l'écrire et quitter
    Chaine = Cut(0) + Cut (0) + Cut (0) + Cut (0) + Cut (0) + Cut (0) + Cut (0) + Cut (0) + Cut (0) + Cut (0)
    Chaine = Left(Chaine, Longueur)
    
    For i = 1 to (UBound(Cut) + 1) ^ Longueur
    
       txt_File.WriteLine Chaine 'Ecrire le résultat
    
       If Left(Chaine, 1) = Cut(UBound(Cut)) Then
          Number_Left_1 = 0
          If Mid(Chaine, 2, 1) = Cut(UBound(Cut)) Then
             Number_Left_2 = 0
             If Mid(Chaine, 3, 1) = Cut(UBound(Cut)) Then
                Number_Left_3 = 0
                If Mid(Chaine, 4, 1) = Cut(UBound(Cut)) Then
                   Number_Left_4 = 0
                   If Mid(Chaine, 5, 1) = Cut(UBound(Cut)) Then
                      Number_Left_5 = 0
                      If Mid(Chaine, 6, 1) = Cut(UBound(Cut)) Then
                         Number_Left_6 = 0
                         If Mid(Chaine, 7, 1) = Cut(UBound(Cut)) Then
                            Number_Left_7 = 0
                            If Mid(Chaine, 8, 1) = Cut(UBound(Cut)) Then
                               Number_Left_8 = 0
                               If Mid(Chaine, 9, 1) = Cut(UBound(Cut)) Then
                                  Number_Left_9 = 0
                                  If Mid(Chaine, 10, 1) = Cut(UBound(Cut)) Then
                                     Number_Left_10 = 0
                                  Else
                                     Number_Left_10 = Number_Left_10 + 1
                                     Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                                     Chaine = Left(Chaine, Longueur)
                                  End If
                               Else
                                  Number_Left_9 = Number_Left_9 + 1
                                  Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                                  Chaine = Left(Chaine, Longueur)
                               End If
                            Else
                               Number_Left_8 = Number_Left_8 + 1
                               Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                               Chaine = Left(Chaine, Longueur)
                            End If
                         Else
                            Number_Left_7 = Number_Left_7 + 1
                            Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                            Chaine = Left(Chaine, Longueur)
                         End If
                      Else
                         Number_Left_6 = Number_Left_6 + 1
                         Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                         Chaine = Left(Chaine, Longueur)
                      End If
                   Else
                      Number_Left_5 = Number_Left_5 + 1
                      Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                      Chaine = Left(Chaine, Longueur)
                   End If
                Else
                   Number_Left_4 = Number_Left_4 + 1
                   Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                   Chaine = Left(Chaine, Longueur)
                End If
             Else
                Number_Left_3 = Number_Left_3 + 1
                Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                Chaine = Left(Chaine, Longueur)
             End If
          Else
             Number_Left_2 = Number_Left_2 + 1
             Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
             Chaine = Left(Chaine, Longueur)
          End If
       Else
          Number_Left_1 = Number_Left_1 + 1
          Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
          Chaine = Left(Chaine, Longueur)
       End If
    
    Next
    
    
    
    Fin = WshShell.Popup("Fin des opérations", 5, "Traitement", 0 + 64)
    0