[TUTORIAL] Generador de diccionarios.

Iniciado por 79137913, Mayo 28, 2013, 03:20:05 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

HOLA!!!

Este tutorial lo arme para explicar como hacer un generador de diccionarios como mi No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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*                                                No tienes permitido ver los links. Registrarse o Entrar a mi cuenta