Contar quantiade de digitos em um arquivo txt

18/12/2015

0

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
Josenyl Cesar

Josenyl Cesar

Responder

Post mais votado

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;

Raylan Zibel

Raylan Zibel
Responder

Mais Posts

04/01/2016

Douglas

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?
Responder

05/01/2016

Josenyl Cesar

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
Responder

05/01/2016

Wazowski

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.
Responder

05/01/2016

Josenyl Cesar

Infelizmente sou iniciante e nem sei por onde vai.


Saudações
Responder

06/01/2016

Raylan Zibel

Olá.
Você quer saber a quantidade de dígitos diferentes em cada linha?
Responder

06/01/2016

Josenyl Cesar

Isso mesmo, pois exemplo numero 11 eh so um digito certo

Grato
Responder

06/01/2016

Raylan Zibel

Teste isso aqui:

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...
Responder

06/01/2016

Josenyl Cesar

Valeu muito obrigado, vou testar.

Grato amigo
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar