Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Leitura de arquivo e separação de variavéis


Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

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
Link para o comentário
Compartilhar em outros sites

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