ESTATISTICA E COMPARACAO

LCSD 25/05/2007 01:31:54
#218194
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








TUNUSAT 25/05/2007 07:50:50
#218196
Resposta escolhida
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.
TUNUSAT 25/05/2007 08:18:45
#218200
FOXMAN,

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.
LCSD 25/05/2007 10:24:52
#218228
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



LCSD 25/05/2007 10:36:39
#218230
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.
USUARIO.EXCLUIDOS 25/05/2007 10:52:54
#218234
mas, se vc colocar o exit for e existir outro numero igual mais pra frente?
LCSD 25/05/2007 12:22:35
#218250
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.....
TUNUSAT 25/05/2007 14:09:09
#218258
FOXMAN,

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.
LCSD 25/05/2007 15:11:27
#218273
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....

TUNUSAT 27/05/2007 09:33:48
#218399
FOXMAN,

Okay.
Valew!

[]'s,
Tunusat.
LCSD 02/06/2007 13:36:00
#219467
Pessoal, como eu havida dito, na duvida eu retornaria aki.....

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