CARACTERE REPETIDO VB6

DRHOUSE 12/08/2009 00:51:51
#319630
Olá amigos estou com uma duvida a dias e não encontro a resposta já pesquisei na net e não encontro algo que satisfaça a minha duvida:

Veja o exemplo:

if Len( text1.text) < 5 then
Erro.visible = true
end if

a minha duvida e que quero adicionar neste if uma validação caso o usuario passe dos 5 caracteres não digite o mesmo caracter numa sequencia algo como
[Ô]1111111111111111[Ô] ou [Ô]aaaaaaaaaaaaaaaaa[Ô] o numero de sequencia de caracteres no maximo seria de 10 a ser digitado e o minimo 5.

Obrigado e ate mais pessoal.
ROBIU 12/08/2009 09:29:29
#319647
Não encontrei nada sobre isso, então montei essa rotina para você:
Option Explicit
Dim Contador As Integer

Private Sub Text1_GotFocus()
Text1.Text = [Ô][Ô]
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)

If Len(Text1.Text) < 1 Then Exit Sub

If Mid(Text1.Text, Len(Text1.Text)) = Chr(KeyAscii) Then
Contador = Contador + 1
Else
Contador = 0
End If
If Contador > 4 Then
MsgBox [Ô]Máximo de 5 caracteres em sequencia[Ô]
KeyAscii = 0
Erro.visible = true
End If
End Sub

Isso é o principal para obter o resultado esperado. Pode até cancelar sua rotina.
RCMRO 12/08/2009 10:57:45
#319651
DrHouse,

Não sei se entendi mas talvez isto resolva:

if Len( text1.text) < 5 then
Erro.visible = true
else
if text1.text = strreverse(text1.text) then
Erro2.visible = true
end if
end if

Este código só fura se a sua string for de tamanho impar e no meio estiver um char diferente:
Ex.: [Ô]aaaabaaaa[Ô]
DRHOUSE 12/08/2009 12:56:26
#319670
Bem agradesço muito pela ajuda, deixa explicar melhor as resposta, no caso o minimo de caracteres seria 5 tenho o teste para caso digite 5 repetidos como 11111 or 22222 or 33333 or 44444... no caso seria se no campo passase dos 5 e a pessoa digitar exemplo 1111111111 passaria pela validação e não posso fazer todas as possibilidades para caracteres repetidos assim seria um codigo grande

Pensei algo com o codigo do RCMRO vejá o exemplo:

1° teste
Digitação: 1111111

verificação:
if text1.text = strreverse(text1.text) or Len(text1.text) < 5 or text1.text = [Ô]00000[Ô] or text1.text = [Ô]11111[Ô] or text1.text = [Ô]22222[Ô] or ... then
Erro2.visible = true
end if

resultado: passou dos 5 caracteres e a verificação dos numeros repetidos tambem passou agora [Ô]strreverse[Ô] inverte a string e verifica que o codigo e igual ou sejá 1111111 digitado e igual á 1111111 invertido então ele da o erro para uma nova digitação, a usuario pode passar dos 5 ou ate o limite de caracteres que no caso é 10 se ela digitar sempre repetidos os caracteres vai retorna o erro com o [Ô]strreverse[Ô] incluido na veirifcação me parece que não vai ser preciso usar text1.text = [Ô]00000[Ô] or text1.text = [Ô]11111[Ô] or text1.text = [Ô]22222[Ô] or ...

2° teste
Digitado: 0002000

verificação:
if text1.text = strreverse(text1.text) or Len(text1.text) < 5 or text1.text = [Ô]00000[Ô] or text1.text = [Ô]11111[Ô] or text1.text = [Ô]22222[Ô] or ... then
Erro2.visible = true
end if

resultado: a pessoa digitou mais que 5 caracteres como pedido e não repetiu nisto ao [Ô]strreverse[Ô] verificar vai inverter a string e mostrar que ela e repetida por ser impar e sua caracter 2 esta no ponto onde invertida torna ela como valida na verificação e retorna o erro.

neste ponto ela sendo impar vai da o erro

Teria alguma ideia de como solucionar este problema?

Ate mais pessoal
MAUMAU 12/08/2009 13:33:56
#319674
Coloca um text e um botao e testa esse código:

Private Sub Command1_Click()
If Validatexto(Text1) = False Then
MsgBox [Ô]Erro[Ô]
Exit Sub
End If
End Sub

Function Validatexto(vararg As String) As Boolean
Dim ct1 As Integer
Dim ct2 As Integer
Dim Contador As Integer
Dim VarAtual As String

For ct1 = 1 To Len(vararg)
VarAtual = Mid(vararg, ct1, 1)
For ct2 = ct1 To Len(vararg)
If VarAtual = Mid(vararg, ct2, 1) Then
Contador = Contador + 1
End If
Next
If Contador > 5 Then Exit For
Next

If Contador > 5 Then
Validatexto = False
Else
Validatexto = True
End If


End Function

Abraços
DRHOUSE 12/08/2009 14:51:53
#319687
MAUMAU e possivel você me explicar o funcionamento do Validatexto?
MAUMAU 12/08/2009 15:05:55
#319692
Function Validatexto(vararg As String) As Boolean
Dim ct1 As Integer [ô]Controla o laço principal
Dim ct2 As Integer [ô]Controla o laço interno
Dim Contador As Integer [ô] guarda a qtde de caracteres repetidos
Dim VarAtual As String [ô]guarda a letra atual para o teste

For ct1 = 1 To Len(vararg) [ô]varre a string até o fim
VarAtual = Mid(vararg, ct1, 1) [ô]guarda a letra atual
For ct2 = ct1 To Len(vararg) [ô]varre a posicao atual até o fim da string
If VarAtual = Mid(vararg, ct2, 1) Then [ô]verifica se existe a letra atual
Contador = Contador + 1 soma um no contador caso encontre a letra igual
End If
Next
If Contador > 5 Then Exit For [ô] se a ate for maior q 5 sai do loop pq a string já não é mais valida
Next

If Contador > 5 Then
Validatexto = False [ô] retorna false pois tem mais de 5 caracteres repetidos
Else
Validatexto = True [ô]retorna true pois tem menos de 5 caracteres repetidos
End If


End Function
DRHOUSE 12/08/2009 22:56:08
#319734
Pessoal fiquei testando o codigo tentando uma possibilidade so que ele vai so no primeiro if e verifica não esta passando no segundo esta pulando se o campo mesmo vazio ele passa sei que e uma coisa simples mais comentei o codigo que o MAUMAU passou e coloquei ao oque estou precisando se puder dar uma olhada e ver o por que do erro que ele não verifica os 2 campos e ver se ele vai verificar se o usuario não digitou uma sequencia de caracteres repetidos acima ou menor que 6 e se não digitou somente numero obrigado pela ajuda.

Private Sub bntLogin_Click()
On Error Resume Next
If Validatexto(Text12) = False Or IsNumeric(Text12.Text) Then
[ô] campo Usuarios
[ô]ira validar se o usuario não digitou todos os caracteres iguais
[ô]ou se não digitou somente numeros tem que digitar letras e numeros
TelaErro.Visible = True
Text12.Text = [Ô][Ô]
Text12.SetFocus
Exit Sub
End If

If Validatexto(senha) = False Or IsNumeric(senha.Text) Then
[ô]Campo senha
[ô]ira validar se o usuario não digitou todos os caracteres iguais
[ô]ou se não digitou somente numeros tem que digitar letras e numeros
TelaErro.Visible = True
senha.Text = [Ô][Ô]
senha.SetFocus
Exit Sub
End If

If Text12.Text = senha.Text Then
TelaErro.Visible = True
Text12.Text = [Ô][Ô]
senha.Text = [Ô][Ô]
Text12.SetFocus
Exit Sub
End If

[ô]Caso as compra estejá ok seque.
Picture2.Visible = True
End Sub


Function Validatexto(vararg As String) As Boolean
Dim ct1 As Integer [ô]Controla o laço principal
Dim ct2 As Integer [ô]Controla o laço interno
Dim Contador As Integer [ô] guarda a qtde de caracteres repetidos
Dim VarAtual As String [ô]guarda a letra atual para o teste

For ct1 = 1 To Len(vararg) [ô]varre a string até o fim
VarAtual = Mid(vararg, ct1, 1) [ô]guarda a letra atual
For ct2 = ct1 To Len(vararg) [ô]varre a posicao atual até o fim da string
If VarAtual = Mid(vararg, ct2, 1) Then [ô]verifica se existe a letra atual
Contador = Contador + 1 [ô]soma um no contador caso encontre a letra igual
End If
Next
If Contador < 6 Then Exit For [ô] se a string for menor q 6 sai do loop pq a string já não é mais valida a ser verificada
Next

If Contador = Len(vararg) Then [ô]Na verificação coloquei o contador que conta quantos
[ô]caracteres estão repetidos com o numero de caracteres na string
[ô]para comparar se o susuario digito o mesmo numero de caracteres repetidos
[ô]onde sendo verdadeiro vai da o erro e pedir novamente a digitcao
[ô]EX: digitou 1111110 já vai passar pois contador de numeros repetidos vai ser [Ô]contador = 6[Ô] e
[ô]o numero de caracteres contados na string e [Ô]Len(vararg) = 7[Ô] então o usuario não digito todos os
[ô]caracteres iguais
Validatexto = False [ô] retorna false pois o numero de caracteres repetidos e o mesmo da string recebida
Else
Validatexto = True [ô]retorna true pois o numero de caracteres repetidos e menor o do que da string recebida
End If


End Function
RCMRO 13/08/2009 00:14:00
#319736
Resposta escolhida
DrHouse,

Testa este código.... Ele é pequeno e muito rápido e resolve todos os casos.

IF NOT VALIDATEXTO(text1.text) THEN
ERRO
ENDIF

Function VALIDATEXTO(X as strint) as Boolean
Dim F as Integer
Dim G as integer
Dim H as Integer

if len(X) < 5 then
VALIDATEXTO = False
else
G = asc(left(X,1))
H = 0
For F = 2 to len(X)
H = H + (G - asc(mid(X,F,1)))
Next
If H = 0 and X = strreverse(X) Then
VALIDATEXTO = False
else
VALIDATEXTO = True
End If
end If
End Function
DRHOUSE 13/08/2009 00:29:46
#319737
Deu certo era isto mesmo vou adaptando ele com o tempo obrigado pessoal, espero poder ajudar aqui também.
Tópico encerrado , respostas não são mais permitidas