Contar a repetição em um txt
Caros colegas, estou com a seguinte dúvida: Tenho um arquivo txt com dezenas de números e a maioria desses números se repetem por várias vz. Criei uma TStringList, agora gostaria de saber, como faço para poder contar a ocorrência de cada um dos números.
Ex: o número 5 se repetiu 10 vz, o 8 repetiu 6.
Agradeço a ajuda.
Fabiano.
Ex: o número 5 se repetiu 10 vz, o 8 repetiu 6.
Agradeço a ajuda.
Fabiano.
Fabiano_aprendiz
Curtidas 0
Respostas
Rômulo Barros
14/09/2004
procedure TfrmOpe5EstrelasMais.Button1Click(Sender: TObject); Var strLstTeste : TStrings; intC : Integer; vetValores : Arrayy[0..9] Of Integer; begin inherited; Try strLstTeste := TStringList.Create; strLstTeste.Add(´0´); strLstTeste.Add(´1´); strLstTeste.Add(´2´); strLstTeste.Add(´2´); strLstTeste.Add(´3´); strLstTeste.Add(´3´); strLstTeste.Add(´3´); strLstTeste.Add(´4´); strLstTeste.Add(´4´); strLstTeste.Add(´4´); strLstTeste.Add(´4´); strLstTeste.Add(´5´); strLstTeste.Add(´5´); strLstTeste.Add(´5´); strLstTeste.Add(´5´); strLstTeste.Add(´5´); For intC := 0 To strLstTeste.Count -1 Do Begin vetValores[StrToInt(strLstTeste[intC])] := vetValores[StrToInt(strLstTeste[intC])] + 1; End; For intC := 0 To Length(vetValores) -1 Do ShowMessage(´Total de "´ + IntToStr(intC) + ´" no TStrings: ´ + IntToStr(vetValores[intC])); Finally FreeAndNil(strLstTeste); End;
:wink: :wink: :wink: :wink: :wink:
GOSTEI 0
Fabiano_aprendiz
14/09/2004
Caro Colega,
Estou tentando testar sua solução, mas quando rodo a aplicação, o vetor já icializa com um monte de lixo (creio q seja da memória), como fazer para zerar um vetor ao iniciar a aplicação?
Estou tentando testar sua solução, mas quando rodo a aplicação, o vetor já icializa com um monte de lixo (creio q seja da memória), como fazer para zerar um vetor ao iniciar a aplicação?
GOSTEI 0
Rômulo Barros
14/09/2004
Também percebi isto, mas naum sei porque acontece. Para solucionar este problema, declar o Vetor na seção Public de seu formulário.
:wink: :wink: :wink: :wink: :wink:
:wink: :wink: :wink: :wink: :wink:
GOSTEI 0
Fabiano_aprendiz
14/09/2004
Funcionou, fico muito agradecido msmo!! Agora sem querer abusar muito to tentando dar uma sofisticada, tipo colocar os números q sairam em ordem decrescente, poderia me dar mais essa dica?
[]´s
Fabiano
[]´s
Fabiano
GOSTEI 0
Sandra
14/09/2004
Caro Colega,
Estou tentando testar sua solução, mas quando rodo a aplicação, o vetor já icializa com um monte de lixo (creio q seja da memória), como fazer para zerar um vetor ao iniciar a aplicação?
[quote:cfea99187c=´Undeclared Identifier´]Também percebi isto, mas naum sei porque acontece. Para solucionar este problema, declar o Vetor na seção Public de seu formulário.:wink: :wink: :wink: :wink: :wink:[/quote:cfea99187c]
Undeclared,
Não seria o caso de inicializar o vetor, antes da utilização? :roll:
Mais ou menos assim:
begin inherited; For IntC := 0 To 9 do vetValores[IntC] := 0; // zerar os elementos do array vetValores Try . . .
PS: Aproveitei o IntC do tipo inteiro. :mrgreen:
GOSTEI 0
Beppe
14/09/2004
Façam como a Sandra sugeriu. A diferença é que variáveis locais não são zeradas, então o programador necessita fazer isto explicitamente. Já campos de classes, e variáveis globais(sem atribuição do programador) são sempre inicializadas com zero.
Uma alternativa, sem precisar de loop´s é FillChar(Sua_Variavel, SizeOf(Sua_Variavel), 0)
Uma alternativa, sem precisar de loop´s é FillChar(Sua_Variavel, SizeOf(Sua_Variavel), 0)
GOSTEI 0
Fabiano_aprendiz
14/09/2004
Pessoal, consegui o q queria com a ajuda do nosso colega aí em cima, o código ficou assim:
begin
Try
Lista:= TStringList.Create;
Lista.LoadFromFile (ExtractFileName(´numeros.txt´));
For C := 0 To Lista.Count -1 Do
Begin
vetValores[StrToInt(Lista[C])] := vetValores[StrToInt(Lista[C])] + 1;
End;
For C := 0 to Length(vetValores) -1 Do
Begin
ListBox1.Items.Add(´Total de ´´ + IntToStr(C) + ´´ sorteados: ´ + IntToStr(vetValores[C]));
end;
Finally
FreeAndNil(Lista);
End;
end;
Da forma como foi implementado, o resultado está assim:
Total de ´1´ sorteados: 40
Total de ´2´ sorteados: 48
Total de ´3´ sorteados: 35
Agora to tentando ordenar isso por ordem decrescente, digo ordenar pelos números q sairam mais vz. Ex:
Total de ´13´ sorteados: 70
Total de ´20´ sorteados: 68
Total de ´48´ sorteados: 67
Alguem sabe como me ajudar?
Agradeço a todos,
Fabiano.
begin
Try
Lista:= TStringList.Create;
Lista.LoadFromFile (ExtractFileName(´numeros.txt´));
For C := 0 To Lista.Count -1 Do
Begin
vetValores[StrToInt(Lista[C])] := vetValores[StrToInt(Lista[C])] + 1;
End;
For C := 0 to Length(vetValores) -1 Do
Begin
ListBox1.Items.Add(´Total de ´´ + IntToStr(C) + ´´ sorteados: ´ + IntToStr(vetValores[C]));
end;
Finally
FreeAndNil(Lista);
End;
end;
Da forma como foi implementado, o resultado está assim:
Total de ´1´ sorteados: 40
Total de ´2´ sorteados: 48
Total de ´3´ sorteados: 35
Agora to tentando ordenar isso por ordem decrescente, digo ordenar pelos números q sairam mais vz. Ex:
Total de ´13´ sorteados: 70
Total de ´20´ sorteados: 68
Total de ´48´ sorteados: 67
Alguem sabe como me ajudar?
Agradeço a todos,
Fabiano.
GOSTEI 0