[TUTORIAL] Generador de diccionarios.

Iniciado por 79137913, Mayo 19, 2014, 02:39:12 PM

Tema anterior - Siguiente tema

0 Miembros y 2 Visitantes están viendo este tema.

HOLA!!!

Este tutorial lo arme para explicar como hacer un generador de diccionarios como mi You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Empecemos...

Suponiendo que tenes esta cadena de posibles caracteres:
Código:

"ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxyz0123456789"

Es la mas comun y tiene 26+26+10 osea 62 caracteres correcto?
Eso yo recomendaria guardarlo en un Vector (array).

Para eso yo uso la funcion:
Código

Código: vb
Private Function CharSplit7913(expression As String) As String()
    Dim lExp     As Long
    Dim ExpB()   As Byte
    Dim AuxArr() As String
    ExpB = expression
    lExp = UBound(ExpB)
    ReDim AuxArr(lExp)
    For X = 0 To lExp Step 2
        AuxArr(X / 2) = ChrW(ExpB(X))
    Next
    ReDim Preserve AuxArr(Int(lExp / 2))
    CharSplit7913 = AuxArr
End Function



El vector resultante suponete que lo llamamos Chars() queda compuesto asi:
Chars(0 to 61) : "A","B","C",...,"7","8","9".
Espero que hasta ahi me sigas.

En este punto solo tenemos en un Vector (array) guardados todos los caracteres que vamos a usar.

Ahora, solicitamos la longitud en este caso la guardaremos en la variable Tam (de tamaño)

Ahora vamos a crear un vector donde guardaremos la cadena actual, su index maximo sera tam-1.

Suponiendo que tam = 3

hacemos asi:

Código

Dim Palabra() as integer
'dentro del proceso de creacion de diccionario
Redim Palabra(Tam-1)


Aca lo que hicimos es hacer que Palabra quedara (0 to 2) inicializandose asi:
Palabra(0 to 2): 0,0,0

aca empieza el proceso de creacion de strings...

Código

Código: vb
Dim AuxPalabra As String
Do
    AuxPalabra = 0
    For X = 0 To tam - 1
        AuxPalabra = AuxPalabra & chars(palabra(X)) ' aca concatenamos todas las letras
    Next
    Print AuxPalabra ' aca imprimo la palabra resultante.
    palabra(0) = palabra(0) + 1 ' aca muevo un caracter
    For X = 0 To UBound(palabra) - 1
        If palabra(X) = UBound(chars) + 1 Then
            'aca verificamos que ninguna casilla quede con un numero mayor a los
            'caracteres que hay y si pasa eso aumenta la siguiente casilla
            'y la actual se vuelve a 0
            palabra(X + 1) = palabra(X + 1) + 1
            palabra(X) = 0
        End If
        'esto de abajo es para ver cuando se termino el proceso
        'osea cuando se han hecho todas las combinaciones.
        If palabra(UBound(palabra)) = UBound(chars) + 1 Then Exit Do
    Next
Loop


Entonces como te quedaria todo el codigo completo...

Código

Código: vb
Dim Diccionario As String
Dim chars() As String
Dim Tam As Integer
Dim Palabra() As Integer
Private Sub Form_Load()
'aca en diccionario pone lo que quieras
Diccionario = "ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxyz0123456789"
chars = CharSplit7913(Diccionario)
Tam = InputBox("inserte cantidad de caracteres")
ReDim Palabra(Tam - 1)
End Sub


Private Sub InicioDeProceso()
Dim AuxPalabra As String
    Do
        AuxPalabra = 0
        For X = 0 To Tam - 1
            AuxPalabra = AuxPalabra & chars(Palabra(X)) ' aca concatenamos todas las letras
        Next
        Debug.Print AuxPalabra ' aca imprimo la palabra resultante.
        Palabra(0) = Palabra(0) + 1 ' aca muevo un caracter
        For X = 0 To UBound(Palabra) - 1
            If Palabra(X) = UBound(chars) + 1 Then
                'aca verificamos que ninguna casilla quede con un numero mayor a los
                'caracteres que hay y si pasa eso aumenta la siguiente casilla
                'y la actual se vuelve a 0
                Palabra(X + 1) = Palabra(X + 1) + 1
                Palabra(X) = 0
            End If
            'esto de abajo es para ver cuando se termino el proceso
            'osea cuando se han hecho todas las combinaciones.
            If Palabra(UBound(Palabra)) = UBound(chars) + 1 Then Exit Do
        Next
    Loop
    MsgBox "Proceso Terminado"
End Sub

Private Function CharSplit7913(expression As String) As String()
    Dim lExp     As Long
    Dim ExpB()   As Byte
    Dim AuxArr() As String
        ExpB = expression
        lExp = UBound(ExpB)
        ReDim AuxArr(lExp)
        For X = 0 To lExp Step 2
            AuxArr(X / 2) = ChrW(ExpB(X))
        Next
        ReDim Preserve AuxArr(Int(lExp / 2))
        CharSplit7913 = AuxArr
End Function


GRACIAS POR LEER!!!
"Algunos creen que soy un bot, puede que tengan razon"
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

*Shadow Scouts Team*                                                You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login