Importar arquivo TXT?

Delphi

30/04/2004

Olá pessoal!

Estou querendo importar um arquivo txt com a seguinte estrutura:

Nome
End
Cidade
Estado
CEP
linha em branco
linha em branco
linha em branco
Nome
End
Cidade
Estado
CEP
linha em branco
linha em branco
linha em branco

como faço para pegar esses dados e gravar por ex. a linha 1, linha 9, linha 17 e assim por diante... para o campo nome da minha tb?


E_marcello

E_marcello

Curtidas 0

Respostas

E_marcello

E_marcello

30/04/2004

Já tentei pesquisar no forum e nao achei nada igual!

Será que algém teria alguma dica?


GOSTEI 0
Beppe

Beppe

30/04/2004

var
  Dados: TextFile;
  Nome, End, Cidade, Estado, CEP: String;
begin
  AssignFile(Dados, ´C:\dados.txt´);
  Reset(Dados);
  try
    while not Eof(Dados) do
    begin
      Readln(Dados, Nome);
      Readln(Dados, End);
      Readln(Dados, Cidade);
      Readln(Dados, Estado);
      Readln(Dados, CEP);
      Readln(Dados);
      Readln(Dados);
      Readln(Dados);
      // faz algo com as variáveis
      // ex: Tabela.Adiciona(Nome);
    end;
  finally
    CloseFile(Dados);
  end;
end;



GOSTEI 0
E_marcello

E_marcello

30/04/2004

Acho que nao fui claro!

O arquivo está assim:

JOAO
RUAXXXX
CENTRO
RECIFE
53000000
Linha em branco
Linha em branco
Linha em branco
JOSE
AV. YYYYYY
CENTRO
50000000
Linha em branco
Linha em branco
Linha em branco

Obrigado!


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

30/04/2004

Colega,

Existem várias formas para se implementar isto, eu fiz da seguinte forma:

procedure TForm1.Button1Click(Sender: TObject);
type TRegistro = Record
Nome: String;
Endereco: String;
Cidade: String;
Estado: String;
CEP: String;
end;
var Arquivo: TStringList;
Registro: TRegistro;
    Laco, Linhas, Campos: Integer;
begin
  Arquivo := TStringList.Create;
  Arquivo.LoadFromFile(´c:\temp\arquivo.txt´);
Linhas := Arquivo.Count-1;

  Campos:= 0;
  For Laco := 0 to Linhas do
  begin
if Campos < 7 then
    begin
    Case Campos of
      0: Registro.Nome:= Arquivo.Strings[Laco];
        1: Registro.Endereco  := Arquivo.Strings[Laco];
        2: Registro.Cidade:= Arquivo.Strings[Laco];
        3: Registro.Estado:= Arquivo.Strings[Laco];
        4: Registro.CEP:= Arquivo.Strings[Laco];
      end;
    Inc(Campos)
    end else
    begin
    ShowMessage(Registro.Nome); // Faça algo com o registro
    Campos := 0;
    end;
  end;
  Arquivo.Free;
end;


Espelho do arquivo (arquivo.txt) em c:\temp:

Aroldo
End
Cidade
Estado
CEP
linha em branco
linha em branco
linha em branco
Zanela
End
Cidade
Estado
CEP
linha em branco
linha em branco
linha em branco



GOSTEI 0
Beppe

Beppe

30/04/2004

Acho que nao fui claro!

Claro vc foi, eu acho é q vc naum testou...

Compilou? Deu erro? Naum funcionou?


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

30/04/2004

[quote:8b8c9eac12=´e_marcello´]Acho que nao fui claro!

Claro vc foi, eu acho é q vc naum testou...

Compilou? Deu erro? Naum funcionou?[/quote:8b8c9eac12]
Beppe,

Ele não testou, pois teria notado o erro na declaração da variável end (endereço): [Error] Unit1.pas(29): Identifier expected but ´END´ found

O único problema no seu código é que ficou muito simples. :lol: :D


GOSTEI 0
E_marcello

E_marcello

30/04/2004

Prezados amigos,

Antecipadamente gostaria de agradecer as respostas, em relação ao código de Beppe eu testei só que ao invés de declarar a variável como End eu declarei como ende. Mas depois com a resposta do Aroldo fiz exatamente como está abaixo:

procedure TForm1.Button1Click(Sender: TObject);
type TRegistro = Record
   Nome: String; 
   Endereco: String; 
   Cidade: String; 
   Estado: String;
   CEP: String;
end; 
var Arquivo: TStringList;
      Registro: TRegistro;
    Laco, Linhas, Campos: Integer;
begin
  Arquivo := TStringList.Create;
  Arquivo.LoadFromFile(´c:\temp\medicos.txt´);
   Linhas    := Arquivo.Count-1;

  Campos   := 0;
  For Laco := 0 to Linhas do
  begin
      if Campos < 7 then
    begin
       Case Campos of
        0: Registro.Nome         := Arquivo.Strings[Laco];
        1: Registro.Endereco  := Arquivo.Strings[Laco];
        2: Registro.Cidade      := Arquivo.Strings[Laco];
        3: Registro.Estado      := Arquivo.Strings[Laco];
        4: Registro.CEP            := Arquivo.Strings[Laco];
      end;
       Inc(Campos) 
    end else 
    begin
       table1.Edit;
       table1nome.AsString:=registro.Nome;
       table1ende.AsString:=Registro.Endereco;
       table1cidade.AsString:=Registro.Cidade;
       table1estado.AsString:=Registro.Estado;
       table1estado.AsString:=Registro.CEP;
       table1.Post;
       //ShowMessage(Registro.Nome); // Faça algo com o registro
       Campos := 0; 
    end; 
  end; 
  Arquivo.Free; 
end;



O resultado de ambos os códigos é que só grava um registro onde no lugar do nome fica a cidade e no endereco o CEP. Sei que estou errando em algum lugar será que vocês poderim ajudar?


GOSTEI 0
Beppe

Beppe

30/04/2004

Perceba q vc disse q o formato era:
Nome End Cidade Estado CEP

mas o arquivo-exemplo está irregular, naum tem cidade, tem bairro, etc...

o problema q só grava um registro, é q vc deve adicionar novos registros, seus comandos estão modificando sempre o msm...


GOSTEI 0
POSTAR