Const Sym As String = "/\!·$%&/()='""¡¿?<>., :;-_*+" 'Simbolos
Const Num As String = "0123456789" 'Numeros
Const Min As String = "abcdefghijklmnopqrstuvwxyz" 'Letras Minusculas
Const May As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 'Letras Mayusculas
Const SpL As String = "áéíóúàèìòùâêîôûäëïöüçñ" 'Letras Especiales Minusculas
Const SpU As String = "ÁÉÍÓÚÀÈÌÒÙÊÎÔÛÄËÏÖÜÇÑ" 'Letras Especiales Mayusculas
Dim Cad As String 'Cadena entera de caracteres
Dim X As Long 'Para los Bucles
Private Sub Inicio()
Dim Letras() As String
Dim Posiciones() As Long
Dim Palabras() As String
Dim a As Long
Dim CT As Long
Dim CantPos As Long
Dim CantLet As Long
Letras = CharSplit7913(Cad)
CantLet = UBound(Letras)
Open "C:\Dic7913.txt" For Output As #1
Close #1
ReDim Palabras(1000)
For a = 0 To Val(MinMaxL(1).Text) - Val(MinMaxL(0).Text)
CantPos = MinMaxL(0) + a - 1
ReDim Posiciones(CantPos)
Do
For X = 0 To CantPos
Palabras(CT) = Palabras(CT) & Letras(Posiciones(X))
Next
CT = CT + 1
Posiciones(0) = Posiciones(0) + 1
For X = 0 To CantPos - 1
If Posiciones(X) > CantLet Then Posiciones(X) = 0: Posiciones(X + 1) = Posiciones(X + 1) + 1
Next
If CT = 1001 Then
Open "C:\Dic7913.txt" For Append As #1
For X = 0 To 1000
Print #1, Palabras(X)
Next
Close #1
ReDim Palabras(1000)
CT = 0
End If
If Posiciones(CantPos) = CantLet + 1 Then GoTo Terminado
Loop
Terminado:
Next
If CT <> 0 Then
Open "C:\Dic7913.txt" For Append As #1
For X = 0 To CT
Print #1, Palabras(X)
Next
Close #1
CT = 0
End If
MsgBox "Terminado", vbInformation, "Atencion"
End Sub
Private Sub Caracteres_Click(Index As Integer)
'Limita el checkbox de los caracteres extra si el cuadro de texto esta vacio
If Index = 6 And Len(ExtraCHR.Text) = 0 Then Caracteres(6).Value = 0: MsgBox "El cuadro de texto de caracteres extra debe tener al menos un caracter", vbCritical, "Error"
End Sub
Private Sub Go_Click()
Dim FlagCheck As Boolean
'Comprobacion de los minimos y maximos de longitud
If Val(MinMaxL(0).Text) = 0 Then MsgBox "El minimo de longitud no puede ser cero", vbCritical, "Error": Exit Sub
If Val(MinMaxL(1).Text) = 0 Then MsgBox "El maximo de longitud no puede ser cero", vbCritical, "Error": Exit Sub
If Val(MinMaxL(0).Text) - Val(MinMaxL(1).Text) > 0 Then MsgBox "El maximo de longitud no puede ser menor que el minimo", vbCritical, "Error": Exit Sub
'Comprobacion de los checkboxes, minimo uno debe estar tildado
For X = 0 To 6
If Caracteres(X).Value = 1 Then FlagCheck = True
Next
If FlagCheck = False Then MsgBox "Seleccione primero con que caracteres quiere hacer el diccionario", vbCritical, "Error": Exit Sub
Cad = vbNullString 'Vacio el string Cad por si estaba lleno
'Lleno cad con la seleccion del usuario
If Caracteres(0).Value = 1 Then Cad = Num
If Caracteres(1).Value = 1 Then Cad = Cad & Sym
If Caracteres(2).Value = 1 Then Cad = Cad & Min
If Caracteres(3).Value = 1 Then Cad = Cad & Max
If Caracteres(4).Value = 1 Then Cad = Cad & SpL
If Caracteres(5).Value = 1 Then Cad = Cad & SpU
If Caracteres(6).Value = 1 Then Cad = Cad & ExtraCHR.Text
MsgBox "El Proceso esta por Comenzar, esto podria tardar mucho tiempo para frenarlo presione Ctrl+Shift+Esc y termine el proceso, el diccionario quedara incompleto (este se guarda en c:\Dic7913.txt)", vbInformation, "Atencion - Por Comenzar"
Call Inicio ' llamo al inicio de proceso
End Sub
Private Sub MinMaxL_KeyPress(Index As Integer, KeyAscii As Integer)
If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0 'Verifica que solo se ingresen numeros en el desde hasta.
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