Ir ao conteúdo

Posts recomendados

Postado

Boa tarde, gente!
No meu programa eu estou lendo um arquivo txt e preciso separar cada coisa para colocar em Edits diferentes na minha tela principal. Dentro do meu arquivo tenho palavras e números separadas por tabulação. Já estou obtendo exito em relação as strings, entretanto, não sei e não encontrei uma forma de fazer o mesmo com os números. Irei mandar o código abaixo, quem puder me ajudar ficarei extremamente grata!

Desde já, meus agradecimentos!!
--------------------------

begin
Readln(txt,linha);
if contador <> 0 then
begin
Splitted := linha.Split([#9], 2); 
setlength(dados,contador); 
dados[contador-1].Cliente:=Splitted[0];
dados[contador-1].Marca:=Splitted[1];
end;


inc(contador);
end;
Edit17.Text:= dados[0].Cliente;
Edit2.Text:= dados[1].Marca;

end;
end.


---------------------
Nesse caso, tanto meu cliente e marca são strings, mas minhas outras variáveis que estou com dificuldade são do tipo real, como o número, a data de fabricação e a potência. Obrigada novamente!

  • Curtir 1
  • 2 semanas depois...
Postado

Olá. E se você tentar ler caracter por caracter até encontrar o #9? Se você souber a sequencia dos itens numa linha do arquivo então fica fácil:

var
 {suas vars...}
 acumulador: string;
 i: integer;
 ind_dado;
begin
  while not Eof(txt) do
  begin
    ReadLn(txt,linha);
    acumulador:= ''; //reseta o acumulador a cada nova linha
    ind_dado:= 0; //zera o indice de dados da linha a cada nova linha
    //faz uma varredura em todos os caracteres em "linha"
    for i:= 1 to length(linha) do
    begin
      if(linha[i] <> #9)then //
       acumulador:= acumulador + linha[i]
      else
      begin
        case ind_dado of
          0: //indice 0 é cliente
             begin
               SetLength(cliente,length(cliente)+1);
               cliente[length(cliente)-1]:= acumulador;
               inc(ind_dado);
             end;
          1: //indice 1 é Marca
             begin
               SetLength(Marca,length(Marca)+1);
               Marca[length(Marca)-1]:= acumulador;
               inc(ind_dado);
             end;
          2: //indice 2 é um campo de valor numerico com casas decimais
             begin
               SetLength(Floats,length(Floats)+1);
               TryStrToFloat(acumulador,Floats[length(Floats)-1]);
               inc(ind_dado);
             end;
          3: //indice 3 é um campo de valor numerico sem casas decimais
             begin
               SetLength(Words,length(Words)+1);
               TryStrToInt(acumulador,Words[length(Words)-1]);
               ind_dado:= 0;
             end;
        end;
        acumulador:= ''; //reseta o acumulador pra pegar o proximo dado
      end;
    end;
  end;
 end;

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...