QTDE DE CARACTER DENTRO DA UMA STRING

VPVJUNIOR 04/12/2006 12:19:34
#187791
Alguém saberia me dizer, se existe alguma funçao no VB que me retorne a quantidade de um determinado caracter que estar dentro de uma string. Tipo eu tenho uma string "programando em visual basic", e quero que a funçao me retorne com a quatidade de "a" que existe dentro dessa string, no caso o valor seria 4.
RODRIGOGBGOMES 04/12/2006 12:27:49
#187794
Dim Armazena As String

Private Sub Command1_Click()
Armazena = txtTeste.Text
Dim Count As Integer
For x = 1 To Len(Armazena)

If Mid(Armazena, x, 1) = "a" Then
Count = Count + 1
End If
Next x

MsgBox Count
End Sub

RODRIGOGBGOMES 04/12/2006 12:29:08
#187795
no caso ai.... a variavel é preenchida pelo conteudo da textbox ( q chamei de txtTeste)... agora é so vc adequar a sua necessidade;
VPVJUNIOR 04/12/2006 12:38:54
#187801
RODRIGOGBGOMES

Dessa forma funciona, mas se eu tiver uma string muito grande, vai demorar a percorrer toda a string ou não?
USUARIO.EXCLUIDOS 04/12/2006 12:44:22
#187806
Função do VB não tem, mas vc pode fazer uma função pra isso:


 

[c]Function gfContaCaracteres(ByVal pString As String, ByVal pCaracter As String) As Integer

Dim intContator As Integer
Dim intLoop As Integer

intContator = 0
For intLoop = 1 To Len(pString)

If UCase(Mid(pString, intLoop, 1)) = UCase(pCaracter) Then
intContator = intContator + 1
End If

Next intLoop

gfContaCaracteres = intContator

End Function



'Para chamar
MsgBox gfContaCaracteres("programando em Visual Basic", "a")

[/c]

PS: Essa função despreza maiúsculas de minúsculas
RODRIGOGBGOMES 04/12/2006 12:44:38
#187808
é claro q pode demorar um pouco mais....
mais axu q a nivel de usuario isso nao seria notado....
faça uns testes... coloque mais carecteres dentro da variavel... e note a diferença de tempo....

bom, mais de qualquer forma... vc vai ter q ler a variavel .;. do inicio ao fim para contar a qtd de vezes q certo caractere aparece.
CAIO.IN.DUST 04/12/2006 12:50:13
#187812
Resposta escolhida
Cara, uma vez eu fiz um P.O.G.(Programação Orientada a Gambiarra) da seguinte forma:


Private Sub Command1_Click()
Dim Memoria1 as String
Dim Armazena as String
Dim Count As Integer

Armazena = txtTeste.Text

Memoria1 = Replace(Armazena,"a", "")

Count = Len(Armazena) - Len(Memoria1)

Msgbox Count
End Sub



Fera, fiz mais ou menos... Não testei esse exemplo mais ja usei essa logica.
RODRIGOGBGOMES 04/12/2006 12:55:44
#187814
verdade... nao tinha me lembrado do replace.
bem mais pratico.... ja q é uma função do proprio vb.

agora vc tem ai 2 opções pra trabalhar.;... é so testar e ver ql fica melhor pra vc.
VPVJUNIOR 04/12/2006 12:59:02
#187816
Valeu galera pela ajuda, vou usar o replace.
Tópico encerrado , respostas não são mais permitidas