LISTBOX COMPARAR SEQUENCIA LINHA POR LINHA
Muito agradecido por lerem o tópico
[txt-color=#0000f0]Private Sub[/txt-color] Command1_Click()
[txt-color=#0000f0]For[/txt-color] x = 0 [txt-color=#0000f0]To[/txt-color] List1.ListCount - 1
a = List1.List(x)
[txt-color=#0000f0]For[/txt-color] y = 0 [txt-color=#0000f0]To[/txt-color] List1.ListCount + 1
b = List1.List(y)
[txt-color=#0000f0]If[/txt-color] a = b [txt-color=#0000f0]Then[/txt-color] MsgBox [Ô]=[Ô] & a & vbCrLf & b [txt-color=#0000f0]Else Exit For[/txt-color]
[txt-color=#0000f0]Next[/txt-color]
MsgBox [Ô]<>[Ô] & a & vbCrLf & b
[txt-color=#0000f0]Next[/txt-color]
[txt-color=#0000f0]End Sub
Private Sub Form_Load()[/txt-color]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]02[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]02[Ô]
List1.AddItem [Ô]03[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]09[Ô]
List1.AddItem [Ô]04[Ô]
List1.AddItem [Ô]02[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]07[Ô]
List1.AddItem [Ô]08[Ô]
List1.AddItem [Ô]02[Ô]
[txt-color=#0000f0]End Sub[/txt-color]
O que preciso e fazer uma comparação linha por linha
so que de duas ao mesmo tempo
enquanto um [txt-color=#0000f0]For[/txt-color] vai descendo lendo uma linha o outro vem atrás lendo a que ja foi lida
com isso eu comparo as duas, dae se forem iguais ele acusa a sequencia e continua lendo
nesse caso
[Ô]01[Ô]
[Ô]01[Ô]
[Ô]01[Ô]
ele acusaria a sequencia de 3 vezes
No exemplo que tentei fazer acima eu quase consegui mais chega um ponto que os dois [txt-color=#0000f0]For[/txt-color] se encontram rsrss
vlw ae galera. Obrigado!
[txt-color=#0000f0]Private Sub[/txt-color] Command1_Click()
[txt-color=#0000f0]For[/txt-color] x = 0 [txt-color=#0000f0]To[/txt-color] List1.ListCount - 1
a = List1.List(x)
[txt-color=#0000f0]For[/txt-color] y = 0 [txt-color=#0000f0]To[/txt-color] List1.ListCount + 1
b = List1.List(y)
[txt-color=#0000f0]If[/txt-color] a = b [txt-color=#0000f0]Then[/txt-color] MsgBox [Ô]=[Ô] & a & vbCrLf & b [txt-color=#0000f0]Else Exit For[/txt-color]
[txt-color=#0000f0]Next[/txt-color]
MsgBox [Ô]<>[Ô] & a & vbCrLf & b
[txt-color=#0000f0]Next[/txt-color]
[txt-color=#0000f0]End Sub
Private Sub Form_Load()[/txt-color]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]02[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]02[Ô]
List1.AddItem [Ô]03[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]09[Ô]
List1.AddItem [Ô]04[Ô]
List1.AddItem [Ô]02[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]07[Ô]
List1.AddItem [Ô]08[Ô]
List1.AddItem [Ô]02[Ô]
[txt-color=#0000f0]End Sub[/txt-color]
O que preciso e fazer uma comparação linha por linha
so que de duas ao mesmo tempo
enquanto um [txt-color=#0000f0]For[/txt-color] vai descendo lendo uma linha o outro vem atrás lendo a que ja foi lida
com isso eu comparo as duas, dae se forem iguais ele acusa a sequencia e continua lendo
nesse caso
[Ô]01[Ô]
[Ô]01[Ô]
[Ô]01[Ô]
ele acusaria a sequencia de 3 vezes
No exemplo que tentei fazer acima eu quase consegui mais chega um ponto que os dois [txt-color=#0000f0]For[/txt-color] se encontram rsrss
vlw ae galera. Obrigado!
mas qual é a saÃda do programa?
ele acha as linhas iguais e ai ele faz oq?, remove do list?
ele acha as linhas iguais e ai ele faz oq?, remove do list?
Eu vou explicar o principio, na realidade a lógica esta quase, você usará dois FOR, porém um será dentro do outro ou seja:
o for A lê a primeira linha, e dentro dele vai ter o for B que vai ler da segunda a ultima linha procurando valores iguais, e claro encontrando os valores iguais faz o que você deseja, vamos a um exemplo.
o for A lê a primeira linha, e dentro dele vai ter o for B que vai ler da segunda a ultima linha procurando valores iguais, e claro encontrando os valores iguais faz o que você deseja, vamos a um exemplo.
For A = 0 To List1.ListCount - 1
For B = 0 To List1.ListCount - 1
If B < > A Then
If List1.List(B) = List1.List(A) Then
[txt-color=#007100] [ô] faz o que você deseja[/txt-color]
End If
End If
Next B
Next A
O que o MARCELO-TREZE disse está certo, porém, isso é uma solução bem iniciante.
Imigine que seu banco de dados ou qualquer outro lugar tenha 1000(apenas mil) registros. Então sua rotina fará 1 milhão e mil vezes
Ou seja, for aninhado sempre será: (n² + n)
Acredito que você não esteja usando Banco de dados, caso contrário, com apenas um SELECT você faz isso...
O ideial é usar recursividade, usando o que chamamos de Merge Sort.
http://pt.wikipedia.org/wiki/Merge_sort
é um pouco complexo mas, vale a pena. No wiki tem exemplos....
Imigine que seu banco de dados ou qualquer outro lugar tenha 1000(apenas mil) registros. Então sua rotina fará 1 milhão e mil vezes
Ou seja, for aninhado sempre será: (n² + n)
Acredito que você não esteja usando Banco de dados, caso contrário, com apenas um SELECT você faz isso...
O ideial é usar recursividade, usando o que chamamos de Merge Sort.
http://pt.wikipedia.org/wiki/Merge_sort
é um pouco complexo mas, vale a pena. No wiki tem exemplos....
For a = 0 To List1.ListCount - 1
For b = 0 To List1.ListCount - 1
If b <> a Then
If List1.List(b) = List1.List(a) Then
MsgBox [Ô]repetiu[Ô] & [Ô] [Ô] & a & [Ô] [Ô] & b
Else
MsgBox [Ô]pulou[Ô] & [Ô] [Ô] & a & [Ô] [Ô] & b
End If
End If
Next b
Next a
MARCELO-TREZE
Não ta exatamente como preciso mais agradeço muito pela ajuda
Acabei [Ô]conseguindo[Ô] aqui depois que me encinaram pra que servia o [txt-color=#0000f0]Step[/txt-color]
For x = 0 To List1.ListCount Step 2
a = List1.List(x)
For y = 1 To List1.ListCount
b = List1.List(y)
MsgBox a & [Ô]a[Ô] & vbCrLf & b & [Ô]b[Ô]
a = b
Next
[txt-color=#0000f0]Next x[/txt-color]
Agora me falta condicionar isto dae, ja que minha intençao e diminuir linhas tipo:
01
01
01
01
vira uma linha só -> repetiu 5 vezes
Obrigado a todos!
For b = 0 To List1.ListCount - 1
If b <> a Then
If List1.List(b) = List1.List(a) Then
MsgBox [Ô]repetiu[Ô] & [Ô] [Ô] & a & [Ô] [Ô] & b
Else
MsgBox [Ô]pulou[Ô] & [Ô] [Ô] & a & [Ô] [Ô] & b
End If
End If
Next b
Next a
MARCELO-TREZE
Não ta exatamente como preciso mais agradeço muito pela ajuda
Acabei [Ô]conseguindo[Ô] aqui depois que me encinaram pra que servia o [txt-color=#0000f0]Step[/txt-color]
For x = 0 To List1.ListCount Step 2
a = List1.List(x)
For y = 1 To List1.ListCount
b = List1.List(y)
MsgBox a & [Ô]a[Ô] & vbCrLf & b & [Ô]b[Ô]
a = b
Next
[txt-color=#0000f0]Next x[/txt-color]
Agora me falta condicionar isto dae, ja que minha intençao e diminuir linhas tipo:
01
01
01
01
vira uma linha só -> repetiu 5 vezes
Obrigado a todos!
Existe uma maneira bem melhor ,que não precisa nada disso que nós falamos...
Você tem que saber quantos têm repetidos na lista certo?
Para você não fazer rotinas gigantes(que dependendo da lista faça [Ô]clocks[Ô] de 1 milhão de vezes), faça:
Crie um array com o tamanho da tabela ASCII se for para Caracteres
Se for apenas números crie um vetor de 0 a 10
Exemplo:
dim lista(256) as integer // para guardar tudo char
dim lista(10) as integer //para guardar os números(quantidades deles)
inicie eles com os valores = 0
faça apenas UM for do inicio ao fim da lista
Cada item da lista, vc converte o char para inteiro
e soma + 1 na lista....
No fim, você só mostra a lista que tiver maior que 0
Isso vai ser MUITO mais rápido e leve que as soluções acima.
Segue em anexo o exemplo
Você tem que saber quantos têm repetidos na lista certo?
Para você não fazer rotinas gigantes(que dependendo da lista faça [Ô]clocks[Ô] de 1 milhão de vezes), faça:
Crie um array com o tamanho da tabela ASCII se for para Caracteres
Se for apenas números crie um vetor de 0 a 10
Exemplo:
dim lista(256) as integer // para guardar tudo char
dim lista(10) as integer //para guardar os números(quantidades deles)
inicie eles com os valores = 0
faça apenas UM for do inicio ao fim da lista
Cada item da lista, vc converte o char para inteiro
e soma + 1 na lista....
No fim, você só mostra a lista que tiver maior que 0
Isso vai ser MUITO mais rápido e leve que as soluções acima.
Segue em anexo o exemplo
E maisomenos isso mesmo [txt-color=#0000f0]RACEMAN[/txt-color] so que a comparação e com 2 digitos mesmo como postei
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]02[Ô]
List1.AddItem [Ô]03[Ô]
List1.AddItem [Ô]04[Ô]
List1.AddItem [Ô]04[Ô]
List1.AddItem [Ô]04[Ô]
List1.AddItem [Ô]05[Ô]
List1.AddItem [Ô]05[Ô]
List1.AddItem [Ô]05[Ô]
List1.AddItem [Ô]06[Ô]
List1.AddItem [Ô]07[Ô]
List1.AddItem [Ô]08[Ô]
List1.AddItem [Ô]09[Ô]
List1.AddItem [Ô]10[Ô]
List1.AddItem [Ô]11[Ô]
List1.AddItem [Ô]12[Ô]
List1.AddItem [Ô]13[Ô]
List1.AddItem [Ô]14[Ô]
List1.AddItem [Ô]15[Ô]
e não com 0 to 9
to tentando adapta seu codigo aqui
Obrigadão!
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]02[Ô]
List1.AddItem [Ô]03[Ô]
List1.AddItem [Ô]04[Ô]
List1.AddItem [Ô]04[Ô]
List1.AddItem [Ô]04[Ô]
List1.AddItem [Ô]05[Ô]
List1.AddItem [Ô]05[Ô]
List1.AddItem [Ô]05[Ô]
List1.AddItem [Ô]06[Ô]
List1.AddItem [Ô]07[Ô]
List1.AddItem [Ô]08[Ô]
List1.AddItem [Ô]09[Ô]
List1.AddItem [Ô]10[Ô]
List1.AddItem [Ô]11[Ô]
List1.AddItem [Ô]12[Ô]
List1.AddItem [Ô]13[Ô]
List1.AddItem [Ô]14[Ô]
List1.AddItem [Ô]15[Ô]
e não com 0 to 9
to tentando adapta seu codigo aqui
Obrigadão!
Nada na vida é fácil é indiscutÃvel que os dois Laços com uma quantidade enorme de itens no listbox vai gerar uma demora, se formos falar do que é mais adequado eu indicaria que o colega informasse como preenche o list pois a partir dai ficaria até mais fácil, porém não sei se é manual ou através de uma consulta a um banco de dados.
porém verá no anexo como funciona:
cole isto no seu form e teste
porém verá no anexo como funciona:
cole isto no seu form e teste
Private Sub Command1_Click()
For A = 0 To List1.ListCount - 1
For b = 0 To List1.ListCount - 1
If b <> A Then
If List1.List(b) = List1.List(A) Then
List1.RemoveItem (b)
End If
End If
Next b
Next A
End Sub
Private Sub Form_Load()
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]01[Ô]
List1.AddItem [Ô]02[Ô]
List1.AddItem [Ô]03[Ô]
List1.AddItem [Ô]04[Ô]
List1.AddItem [Ô]04[Ô]
List1.AddItem [Ô]04[Ô]
List1.AddItem [Ô]05[Ô]
List1.AddItem [Ô]05[Ô]
List1.AddItem [Ô]05[Ô]
List1.AddItem [Ô]06[Ô]
List1.AddItem [Ô]07[Ô]
List1.AddItem [Ô]08[Ô]
List1.AddItem [Ô]09[Ô]
List1.AddItem [Ô]10[Ô]
List1.AddItem [Ô]11[Ô]
List1.AddItem [Ô]12[Ô]
List1.AddItem [Ô]13[Ô]
List1.AddItem [Ô]14[Ô]
List1.AddItem [Ô]15[Ô]
End Sub
Eu não posso remover MARCELO-TREZE
So preciso saber quantas vezes ele sequenciou
O exemplo do RACEMAN ta lindo, (Abriu um campo enorme pra eu viajar ) so não consegui ainda fazer ele trabalhar com 2 digitos
So preciso saber quantas vezes ele sequenciou
O exemplo do RACEMAN ta lindo, (Abriu um campo enorme pra eu viajar ) so não consegui ainda fazer ele trabalhar com 2 digitos
trabalhar com dois digitos é assim
For i = 0 To 100
List1.AddItem Format((Int(Rnd * 10)), [Ô]00[Ô])
Next i
MARCELO-TREZE, relendo o tópico,deu a impressão que eu disse que você era iniciante ou algo do tipo.
Mas é claro que eu não tive essa intenção. Pelo contrário, você é o que mais ajuda a galera!!!
Provavelmente um dos que mais tem conhecimento aqui...
Eu queria era atentar para o [Ô]problema[Ô] de usar for aninhado para certas ocasiões...
Pode parecer claro para a gente, mas, para muitos iniciantes não é...
Mas é claro que eu não tive essa intenção. Pelo contrário, você é o que mais ajuda a galera!!!
Provavelmente um dos que mais tem conhecimento aqui...
Eu queria era atentar para o [Ô]problema[Ô] de usar for aninhado para certas ocasiões...
Pode parecer claro para a gente, mas, para muitos iniciantes não é...
Tópico encerrado , respostas não são mais permitidas