ESTATISTICA E COMPARACAO
Pessoal, um cliente solicitou-me um sistema para fazer analize de estatistica e comparação de resultados.
Tenho as seguintes informações :
1 - ARQUIVO TEXTO(cartoes.txt) COM 15 DEZENAS POR LINHA, DELIMITADO POR ESPAÇOS, PODENDO TER ATé 2 MILHOES DE LINHAS A SEREM COMPARADAS.
exemplo do conteudo.
01 03 06 08 09 10 14 16 17 18 20 21 23 24 25
02 03 05 06 07 08 09 11 12 13 14 15 21 22 24
01 02 04 05 07 08 09 12 14 16 17 18 20 22 25
01 03 05 06 11 12 13 14 16 17 19 20 21 23 24
02 03 05 06 07 09 11 15 16 18 20 21 22 23 25
01 02 03 06 07 08 09 10 12 14 15 16 21 24 25
01 05 06 07 08 10 11 13 14 17 18 19 20 22 23
02 03 04 08 10 12 13 14 16 17 20 21 22 23 25
01 04 05 06 07 08 09 10 11 12 15 16 19 21 24
2 - ARQUIVO TEXTO(condições.txt) COM 5 / 10 OU 15 DEZENAS POR LINHA, DELIMITADO POR ESPAÇOS< PODENDO TER ATÈ2 milhos de linhas.
exemplo do conteudo do arquivo :
01 06 11 16 21
02 07 12 17 22
03 08 13 18 23
04 09 14 19 24
05 10 15 20 25
Baseado nessas informações, oque preciso desenvolver é :
Comparar a primeira linha do cartões.txt com todas as linhas de condições.txt.
Para cada coicidência na linha, será feito uma contagem, conforme exemplo abaixo :
Primeira linha do cartoes.txt Primeira linha de condições.txt
01 03 06 08 09 10 14 16 17 18 20 21 23 24 25 <<<----->>> 01 06 11 16 21 = 4
Primeira linha do cartoes.txt Segunda linha de condições.txt
01 03 06 08 09 10 14 16 17 18 20 21 23 24 25 <<<----->>> 02 07 12 17 22 = 1
Partindo desse principio se no arquivo condições.txt tiver 100 linhas irei fazer 100 comparações para cada linha do arquivo cartões.txt realizando a contagem das coicidências.
Amigos, alguém aqui tem noção de como fazer isso, minha área eh outra, mas a crise ta braba, naum posso rejeitar serviços.......rsrsrsrsrs
Tenho as seguintes informações :
1 - ARQUIVO TEXTO(cartoes.txt) COM 15 DEZENAS POR LINHA, DELIMITADO POR ESPAÇOS, PODENDO TER ATé 2 MILHOES DE LINHAS A SEREM COMPARADAS.
exemplo do conteudo.
01 03 06 08 09 10 14 16 17 18 20 21 23 24 25
02 03 05 06 07 08 09 11 12 13 14 15 21 22 24
01 02 04 05 07 08 09 12 14 16 17 18 20 22 25
01 03 05 06 11 12 13 14 16 17 19 20 21 23 24
02 03 05 06 07 09 11 15 16 18 20 21 22 23 25
01 02 03 06 07 08 09 10 12 14 15 16 21 24 25
01 05 06 07 08 10 11 13 14 17 18 19 20 22 23
02 03 04 08 10 12 13 14 16 17 20 21 22 23 25
01 04 05 06 07 08 09 10 11 12 15 16 19 21 24
2 - ARQUIVO TEXTO(condições.txt) COM 5 / 10 OU 15 DEZENAS POR LINHA, DELIMITADO POR ESPAÇOS< PODENDO TER ATÈ2 milhos de linhas.
exemplo do conteudo do arquivo :
01 06 11 16 21
02 07 12 17 22
03 08 13 18 23
04 09 14 19 24
05 10 15 20 25
Baseado nessas informações, oque preciso desenvolver é :
Comparar a primeira linha do cartões.txt com todas as linhas de condições.txt.
Para cada coicidência na linha, será feito uma contagem, conforme exemplo abaixo :
Primeira linha do cartoes.txt Primeira linha de condições.txt
01 03 06 08 09 10 14 16 17 18 20 21 23 24 25 <<<----->>> 01 06 11 16 21 = 4
Primeira linha do cartoes.txt Segunda linha de condições.txt
01 03 06 08 09 10 14 16 17 18 20 21 23 24 25 <<<----->>> 02 07 12 17 22 = 1
Partindo desse principio se no arquivo condições.txt tiver 100 linhas irei fazer 100 comparações para cada linha do arquivo cartões.txt realizando a contagem das coicidências.
Amigos, alguém aqui tem noção de como fazer isso, minha área eh outra, mas a crise ta braba, naum posso rejeitar serviços.......rsrsrsrsrs
FOXMAN,
Não é difÃÂÂcil, o que você precisa é de dois "FOR"s concatenados (um dentro do outro) para poder colocar dentro disto um contador dizendo quantos números estão coincidentes ... precisa ler os registros possÃÂÂvelmente usando o comando "SPLIT" ... se quiser posso montar para você ...
[]'s,
Tunusat.
Não é difÃÂÂcil, o que você precisa é de dois "FOR"s concatenados (um dentro do outro) para poder colocar dentro disto um contador dizendo quantos números estão coincidentes ... precisa ler os registros possÃÂÂvelmente usando o comando "SPLIT" ... se quiser posso montar para você ...
[]'s,
Tunusat.
FOXMAN,
Segue amostra grátis:
'===================================
'===================================
[]'s,
Tunusat.
Segue amostra grátis:
'===================================
Private Sub Command1_Click()
Dim strTexto1 As String
Dim strTexto2 As String
Dim i As Integer
Dim x As Integer
Dim contador As Integer
Dim strPedaco1
Dim strPedaco2
strTexto1 = "01 02 03 04 05 06 07 08 09 10"
strTexto2 = "01 05 26 17 09"
strPedaco1 = Split(strTexto1)
strPedaco2 = Split(strTexto2)
For i = 0 To UBound(strPedaco1)
For x = 0 To UBound(strPedaco2)
If strPedaco1(i) = strPedaco2(x) Then contador = contador + 1
Next
Next
MsgBox "Os números iguais são: " & contador
End Sub
'===================================
[]'s,
Tunusat.
TUNUSAT, ja da par começar a entender, agora como eu disse, para cada linha do arq cartões.txt eu vou ter q fazer esta verificação, ou seja mais um FOR.
Pensei em carregar o arquivo todo de uma vez...mas eh muito grande.......
Ae eu pergunto : para um arquivo txt de 10mb é viável jogoa-lo em uma variável ? e que tipo de variàvel suporta esse tamanho.....
Ou é melhor abrir o arquivo e ler linha por linha, e apos concluido fechar o mesmo ?.
Bem vou testar o exemplo, e volto aki para esclarecer mais duvidas....pois tenho ceteza que as mesmas surgirão.....
Obrigado por enquanto TUNUSAT
Pensei em carregar o arquivo todo de uma vez...mas eh muito grande.......
Ae eu pergunto : para um arquivo txt de 10mb é viável jogoa-lo em uma variável ? e que tipo de variàvel suporta esse tamanho.....
Ou é melhor abrir o arquivo e ler linha por linha, e apos concluido fechar o mesmo ?.
Bem vou testar o exemplo, e volto aki para esclarecer mais duvidas....pois tenho ceteza que as mesmas surgirão.....
Obrigado por enquanto TUNUSAT
TUNUSAT, lógica da comparação eh isso mesmo q vc colocou, apenas acrescentei um EXIT FOR no segundo for, para qdo ele encontrar ja sair do FOR, agilizando assim o processo.
Continuo com os testes aqui......agora preciso carregar o arquivo gigantesco, ou ler linha por linha para ir fazendo o tratamento dos dados.
Continuo com os testes aqui......agora preciso carregar o arquivo gigantesco, ou ler linha por linha para ir fazendo o tratamento dos dados.
mas, se vc colocar o exit for e existir outro numero igual mais pra frente?
Citação:ACG1574 escreveu:
mas, se vc colocar o exit for e existir outro numero igual mais pra frente?
Alex, naum vai existir, pois saum numeros unicos em cada linha....ou seja se achar um naum haverá outro
TUNUSAT, ja consegui fazer a verificação em um arq de 100.000 linhas(com 15 dezenas) x outro arquivo com 20 linhas (com 5 dezenas)....
O resultado ?.....affff.....
eh so calcular 100.000 x 20 = KKKKKKKKKKKKKKKKKK
gerei um arquivo para ver o tamanho da criança, cada contagem do segundo FOR gera uma linha.....
O tamanho do arquivo txt gerado com apenas uma coluna = 10mb
agora vou fazer a estatistica, vou deixar o topico aberto, pois havendo alguma duvida eu posto aki....
O trem ta andando.....
FOXMAN,
Beleza!
Eu estava montando o código abaixo ... parece que funciona beleza ...
=======================================
=======================================
Fiquei na duvida da repetição ... mas vc disse que não repete, beleza!
Qualquer problema é só escrever!
[]'s,
Tunusat.
Beleza!
Eu estava montando o código abaixo ... parece que funciona beleza ...
=======================================
Private Sub cmdExemploSplit_Click()
Dim strTexto1 As String
Dim strTexto2 As String
Dim i As Integer
Dim x As Integer
Dim contador As Integer
Dim strPedaco1
Dim strPedaco2
Open "C:\condicoes.txt" For Input As #1
Open "C:\cartoes.txt" For Input As #2
Do While Not EOF(1)
Line Input #1, strTexto1
strPedaco1 = SPLIT(strTexto1)
Do While Not EOF(2)
Line Input #2, strTexto2
strPedaco2 = SPLIT(strTexto2)
For i = 0 To UBound(strPedaco1)
For x = 0 To UBound(strPedaco2)
If strPedaco1(i) = strPedaco2(x) Then contador = contador + 1
Next
Next
Loop
Loop
Close #1
Close #2
MsgBox "Os números iguais são: " & contador
End Sub
=======================================
Fiquei na duvida da repetição ... mas vc disse que não repete, beleza!
Qualquer problema é só escrever!
[]'s,
Tunusat.
TUNUSAT, a primeira parte esta ok....Inclusive eu fiz muito parecido com o seu codigo....
agora eh o seguinte....ja contei e gravei um arquivo com o resultado das comparações. Ficou assim....
ISSO PARA APENAS UMA LINHA(DAS 100.000) DO ARQUIVO CARTOES.TXT E TODAS AS LINHAS(20) DE CONDIÇÃO.TXT
2
2
5
4
3
2
4
3
4
3
4
4
3
4
5
4
0
2
4
5
Cada linha dessa representa um linha comparada e cada valor representa quantas dezenas foram encontradas na comparação.
Vou prosseguir com o codigo.....na duvida volto aki...ok...brigado por enquanto....
agora eh o seguinte....ja contei e gravei um arquivo com o resultado das comparações. Ficou assim....
ISSO PARA APENAS UMA LINHA(DAS 100.000) DO ARQUIVO CARTOES.TXT E TODAS AS LINHAS(20) DE CONDIÇÃO.TXT
2
2
5
4
3
2
4
3
4
3
4
4
3
4
5
4
0
2
4
5
Cada linha dessa representa um linha comparada e cada valor representa quantas dezenas foram encontradas na comparação.
Vou prosseguir com o codigo.....na duvida volto aki...ok...brigado por enquanto....
FOXMAN,
Okay.
Valew!
[]'s,
Tunusat.
Okay.
Valew!
[]'s,
Tunusat.
Pessoal, como eu havida dito, na duvida eu retornaria aki.....
Conteudo do arquivo eh esse :
2
2
4
4
3
2
4
3
3
3
3
3
2
3
4
3
0
1
3
4
3
0
1
3
4
3
2
4
3
3
3
3
3
2
3
4
3
0
1
3
Resultado q eu tenho eh esse :
Nº = OCORRENCIA
0 = 3
1 = 3
2 = 6
3 = 20
4 = 8
5
6
7
8
.
.
.
40
preciso contar qtas vezes cada algarismo apareceu e jogar num listview, apenas os q apareceram....
No entanto no listview aparece 40 linhas, que eh o total de linhas do arquivo.....
Public Function Processa()
'contar arquivo
Dim iARQ3 As Integer
Dim sArquivo As String
Dim sTexto As String
Dim aDados As Variant
Dim strPedaco2 As String
iARQ3 = FreeFile
sArquivo = "C:\Documents and Settings\xxxxxxx\Desktop\programaesultado.txt"
Open sArquivo For Input As iARQ3
sTexto = Input(LOF(iARQ3), iARQ3)
Close iARQ3
aDados = Split(sTexto, vbCrLf)
For i = LBound(aDados) To UBound(aDados)
strPedaco2 = aDados(i)
Set nodex2 = lstResultado.ListItems.Add(, , i)
For x = 1 To UBound(aDados) - 1
If i = Int(aDados(x)) Then
contador = contador + 1
nodex2.SubItems(1) = contador
End If
If x = UBound(aDados) Then: Exit For
Next x
contador = 0
Next i
End Function
Conteudo do arquivo eh esse :
2
2
4
4
3
2
4
3
3
3
3
3
2
3
4
3
0
1
3
4
3
0
1
3
4
3
2
4
3
3
3
3
3
2
3
4
3
0
1
3
Resultado q eu tenho eh esse :
Nº = OCORRENCIA
0 = 3
1 = 3
2 = 6
3 = 20
4 = 8
5
6
7
8
.
.
.
40
preciso contar qtas vezes cada algarismo apareceu e jogar num listview, apenas os q apareceram....
No entanto no listview aparece 40 linhas, que eh o total de linhas do arquivo.....
Tópico encerrado , respostas não são mais permitidas