Contar quantiade de digitos em um arquivo txt
Bom dia, Vou tentar explicar:
Vou abrir um arquivo txt.
04 11 13 37 41 56 = 0,1,3,4,5,6,7 (7 digitos)
04 13 15 23 42 57 = 0,1,2,3,4,5,7 (7 digitos)
13 22 23 27 37 57 = 1,2,3,5,7 (5 digitos)
11 22 23 27 42 56 = 1,2,3,4,5,6,7 (7 digitos)
11 15 22 27 37 41 = 1,2,3,4,7 (5 digitos)
Abri o arquivo e pesquisa e contar a quantidade de dígitos e separar os que tem 7 a lógica eh essa,
alguém pode me dar uma ideia ou montar algum aplicativo.
Saudações
Grato
Vou abrir um arquivo txt.
04 11 13 37 41 56 = 0,1,3,4,5,6,7 (7 digitos)
04 13 15 23 42 57 = 0,1,2,3,4,5,7 (7 digitos)
13 22 23 27 37 57 = 1,2,3,5,7 (5 digitos)
11 22 23 27 42 56 = 1,2,3,4,5,6,7 (7 digitos)
11 15 22 27 37 41 = 1,2,3,4,7 (5 digitos)
Abri o arquivo e pesquisa e contar a quantidade de dígitos e separar os que tem 7 a lógica eh essa,
alguém pode me dar uma ideia ou montar algum aplicativo.
Saudações
Grato
Josenyl Cesar
Curtidas 0
Melhor post
Raylan Zibel
06/01/2016
Mesmo codigo, com alguns comentários:
procedure TForm1.btn1Click(Sender: TObject); var arq: TStrings; lidos: array of Byte; lidosStr: string; lido: Boolean; x, y, z, i: integer; begin try // abrindo o arquivo arq := TStringList.Create; arq.LoadFromFile('numeros.txt'); // lendo as linhas for x := 0 to arq.Count - 1 do begin z := 0; SetLength(lidos, 0); // lendo os digitos for y := 1 to Length(arq[x]) do begin // lendo digitos entre 0 e 9 if StrToIntDef(arq[x][y], -1) in [0..9] then begin lido := False; // verificando se o digito ja foi lido for i := 0 to Length(lidos) - 1 do if StrToInt(arq[x][y]) = lidos[i] then begin lido := True; Break; end; // guardando digito lido pra não ler novamente if not lido then begin SetLength(lidos, Length(lidos) + 1); lidos[Length(lidos) - 1] := StrToInt(arq[x][y]); // incrementando quantidade de digitos diferentes Inc(z); end; end; end; lidosStr := ''; // jogando digitos lidos em string pra exibir apenas for i := 0 to Length(lidos)-1 do lidosStr := lidosStr + IntToStr(lidos[i]) + ';'; arq[x] := arq[x] + ' = ' + IntToStr(z) + ' digitos ('+lidosStr+')'; end; ShowMessage(arq.Text); finally arq.Free; end; end;
GOSTEI 1
Mais Respostas
Douglas
18/12/2015
Olá Josenyl, tudo bem?
Certo, mas ao abrir o arquivo digamos que tenha o exemplo abaixo:
04 11 13 37 41 59 = 0,1,3,4,5,7 (6 dígitos)
Neste caso, seriam 6 dígitos, pois o nove está fora da faixa de 0 à 7? Outra coisa, poderia exemplificar como o teu arquivo txt é montado?
Certo, mas ao abrir o arquivo digamos que tenha o exemplo abaixo:
04 11 13 37 41 59 = 0,1,3,4,5,7 (6 dígitos)
Neste caso, seriam 6 dígitos, pois o nove está fora da faixa de 0 à 7? Outra coisa, poderia exemplificar como o teu arquivo txt é montado?
GOSTEI 0
Josenyl Cesar
18/12/2015
Não ele conta e somariam 7 digitos totais,
se fosse assim exemplo: 04 11 13 37 41 57 = 0,1,3,4,5,7 (6 digitos)
Deu pra entender,
Qualquer duvida
Estou aqui na area.
abraço
se fosse assim exemplo: 04 11 13 37 41 57 = 0,1,3,4,5,7 (6 digitos)
Deu pra entender,
Qualquer duvida
Estou aqui na area.
abraço
GOSTEI 0
Wazowski
18/12/2015
Joga todos os numeros pra dentro de um StringList. Sempre que for adicionar um verifica se já foi adicionado ou não. Depois disso é só dar um stringlist.count. Se for igual a 7 tu joga pra dentro de outro StringList e tu vai ter o que tu quer.
GOSTEI 0
Josenyl Cesar
18/12/2015
Infelizmente sou iniciante e nem sei por onde vai.
Saudações
Saudações
GOSTEI 0
Raylan Zibel
18/12/2015
Olá.
Você quer saber a quantidade de dígitos diferentes em cada linha?
Você quer saber a quantidade de dígitos diferentes em cada linha?
GOSTEI 0
Josenyl Cesar
18/12/2015
Isso mesmo, pois exemplo numero 11 eh so um digito certo
Grato
Grato
GOSTEI 0
Raylan Zibel
18/12/2015
Teste isso aqui:
Dá pra melhorar, claro...
procedure TForm1.btn1Click(Sender: TObject); var arq: TStrings; lidos: array of Byte; lidosStr: string; lido: Boolean; x, y, z, i: integer; begin try arq := TStringList.Create; arq.LoadFromFile('numeros.txt'); for x := 0 to arq.Count - 1 do begin z := 0; SetLength(lidos, 0); for y := 1 to Length(arq[x]) do begin if StrToIntDef(arq[x][y], -1) in [0..9] then begin lido := False; for i := 0 to Length(lidos) - 1 do if StrToInt(arq[x][y]) = lidos[i] then begin lido := True; Break; end; if not lido then begin SetLength(lidos, Length(lidos) + 1); lidos[Length(lidos) - 1] := StrToInt(arq[x][y]); Inc(z); end; end; end; lidosStr := ''; for i := 0 to Length(lidos)-1 do lidosStr := lidosStr + IntToStr(lidos[i]) + ';'; arq[x] := arq[x] + ' = ' + IntToStr(z) + ' digitos ('+lidosStr+')'; end; ShowMessage(arq.Text); finally arq.Free; end; end;
Dá pra melhorar, claro...
GOSTEI 0
Josenyl Cesar
18/12/2015
Valeu muito obrigado, vou testar.
Grato amigo
Grato amigo
GOSTEI 0