ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Ajuda na leitura TXT

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17352

MensagemEnviada: Qua Fev 12, 2020 5:30 pm    Assunto: Ajuda na leitura TXT Responder com Citação

Tenho um arquivo txt e estou tentando gravar na tabela assim


Código:
procedure TFrmDldInsUpdCEP.Button4Click(Sender: TObject);
var
  arq : String;
  Caminho: String; // armazena o caminho
  txt : TextFile;
  D: string;
  I: Integer;
  mTexto: TStringList;
begin
  DmCep.TableGravarCorreios.TableName := 'UF';
  DmCep.TableGravarCorreios.Active := True;
  Caminho := EditPathUFCorreio.Text; // variavel recebe os dados do edit
  AssignFile(txt, Caminho);
  Reset(txt);
  mTexto := TStringList.Create;
  mTexto.LoadFromFile(Caminho);
  gauge1.MaxValue := mTexto.Count - 1;
  mTexto.Free;

  while not Eof(txt)do
  begin
    Application.ProcessMessages;
    ReadLn (txt, arq);
    /// Só quem for do TIPO DE REGISTRO = "D" de dados
    D := copy(arq, 1, 1);
    if D = 'D' then
    begin
      /// Incrementa o gauge
      Gauge1.AddProgress(1);
      DmCep.TableGravarCorreios.Insert;
      DmCep.TableGravarCorreios.FieldByName('UF_PAIS').Value := Trim(Copy(AnsiUpperCase(arq), 2, 2));
      DmCep.TableGravarCorreios.FieldByName('UF_SIGLA').Value := Trim(Copy(AnsiUpperCase(arq), 4, 2));
      DmCep.TableGravarCorreios.FieldByName('UF_CODIGO').Value := StrToInt(Copy(arq, 8, 2));
      DmCep.TableGravarCorreios.FieldByName('UF_DESCRICAO').Value := Trim(Copy(AnsiUpperCase(arq), 10, 119));
      DmCep.TableGravarCorreios.FieldByName('FLAG_CORREIOS').Value := 'S';
      DmCep.TableGravarCorreios.Post;
    end;
  end;

  MessageBeep(65);
  ShowMessage('Processo Concluído com êxito');
  Gauge1.Progress := 0;

  CloseFile(txt);
  DmCep.TableGravarCorreios.Active := False;
end;


O arquivo TXT é esse
Código:
C UNIDADES DA FEDERAÇÃO                                   
DBRAC  01Acre                                                                                                                                                                           
DBRAL  02Alagoas                                                                                                     
DBRAP  03Amapá                                                                                                       
DBRAM  04Amazonas                                                                                                     
DBRBA  05Bahia                                                                                                       
DBRCE  06Ceará                                                                                                       
DBRDF  07Distrito Federal                                                                                             
DBRES  08Espírito Santo                                                                                               
DBRGO  10Goiás                                                                                                       
DBRMA  11Maranhão                                                                                                     
DBRMT  12Mato Grosso                                                                                                 
DBRMS  13Mato Grosso do Sul                                                                                           
DBRMG  14Minas Gerais                                                                                                 
DBRPA  15Pará                                                                                                         
DBRPB  16Paraíba                                                                                                     
DBRPR  17Paraná                                                                                                       
DBRPE  18Pernambuco                                                                                                   
DBRPI  19Piauí                                                                                                       
DBRRJ  20Rio de Janeiro                                                                                               
DBRRN  21Rio Grande do Norte                                                                                         
DBRRS  22Rio Grande do Sul                                                                                           
DBRRO  23Rondônia                                                                                                     
DBRRR  09Roraima                                                                                                     
DBRSC  25Santa Catarina                                                                                               
DBRSP  26São Paulo                                                                                                   
DBRSE  27Sergipe                                                                                                     
DBRTO  24Tocantins                                                                                                   
#


Mais toda hora que passo no loop do while
vem assim
Citação:
DBRAC 01Acre
DBRAL 02Alagoas
DBRAM 04Amazonas
DBRAM 04Amazonas


Pulando o estado do Amapá, porque será que esta assim?

Outra coisa
Aqui nesta linha
Código:
gauge1.MaxValue := mTexto.Count - 1;

Ta contando 32 tem como contat 27 que é o que preciso?

Obrigado
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum


Editado pela última vez por adriano_servitec em Qui Fev 13, 2020 9:20 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 8954
Localização: Sinop-MT

MensagemEnviada: Qui Fev 13, 2020 9:03 am    Assunto: Responder com Citação

se vc esta carregando o arquivo no TStringList, pq nao usa ele mesmo?

Código:
procedure TFrmDldInsUpdCEP.Button4Click(Sender: TObject);
var
  txt : String;
  Caminho: String; // armazena o caminho
  D: string;
  I: Integer;
  mTexto: TStringList;
begin
  DmCep.TableGravarCorreios.TableName := 'UF';
  DmCep.TableGravarCorreios.Open;
  Caminho := EditPathUFCorreio.Text; // variavel recebe os dados do edit
  mTexto := TStringList.Create;
  mTexto.LoadFromFile(Caminho);
  gauge1.MaxValue := mTexto.Count - 1;

  for i := 0 to  do
  begin
   
   txt := mTexto[i];
   
   /// Só quem for do TIPO DE REGISTRO = "D" de dados
    D := copy(txt, 1, 1);
    if D = 'D' then
    begin
      /// Incrementa o gauge
      DmCep.TableGravarCorreios.Insert;
      DmCep.TableGravarCorreios.FieldByName('UF_PAIS').Value := Trim(Copy(AnsiUpperCase(txt), 2, 2));
      DmCep.TableGravarCorreios.FieldByName('UF_SIGLA').Value := Trim(Copy(AnsiUpperCase(txt), 4, 2));
      DmCep.TableGravarCorreios.FieldByName('UF_CODIGO').Value := StrToInt(Copy(txt, 8, 2));
      DmCep.TableGravarCorreios.FieldByName('UF_DESCRICAO').Value := Trim(Copy(AnsiUpperCase(txt), 10, 119));
      DmCep.TableGravarCorreios.FieldByName('FLAG_CORREIOS').Value := 'S';
      DmCep.TableGravarCorreios.Post;
    end;
    Gauge1.AddProgress(1);
   if (i div 10) = 0 then
      Application.ProcessMessages;
  end;
  mTexto.Clear;
  mTexto.Free;

  MessageBeep(65);
  ShowMessage('Processo Concluído com êxito');
  Gauge1.Progress := 0;

  DmCep.TableGravarCorreios.Close;
end;

_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17352

MensagemEnviada: Qui Fev 13, 2020 9:19 am    Assunto: Responder com Citação

joemil escreveu:
se vc esta carregando o arquivo no TStringList, pq nao usa ele mesmo?

Código:
procedure TFrmDldInsUpdCEP.Button4Click(Sender: TObject);
var
  txt : String;
  Caminho: String; // armazena o caminho
  D: string;
  I: Integer;
  mTexto: TStringList;
begin
  DmCep.TableGravarCorreios.TableName := 'UF';
  DmCep.TableGravarCorreios.Open;
  Caminho := EditPathUFCorreio.Text; // variavel recebe os dados do edit
  mTexto := TStringList.Create;
  mTexto.LoadFromFile(Caminho);
  gauge1.MaxValue := mTexto.Count - 1;

  for i := 0 to  do
  begin
   
   txt := mTexto[i];
   
   /// Só quem for do TIPO DE REGISTRO = "D" de dados
    D := copy(txt, 1, 1);
    if D = 'D' then
    begin
      /// Incrementa o gauge
      DmCep.TableGravarCorreios.Insert;
      DmCep.TableGravarCorreios.FieldByName('UF_PAIS').Value := Trim(Copy(AnsiUpperCase(txt), 2, 2));
      DmCep.TableGravarCorreios.FieldByName('UF_SIGLA').Value := Trim(Copy(AnsiUpperCase(txt), 4, 2));
      DmCep.TableGravarCorreios.FieldByName('UF_CODIGO').Value := StrToInt(Copy(txt, 8, 2));
      DmCep.TableGravarCorreios.FieldByName('UF_DESCRICAO').Value := Trim(Copy(AnsiUpperCase(txt), 10, 119));
      DmCep.TableGravarCorreios.FieldByName('FLAG_CORREIOS').Value := 'S';
      DmCep.TableGravarCorreios.Post;
    end;
    Gauge1.AddProgress(1);
   if (i div 10) = 0 then
      Application.ProcessMessages;
  end;
  mTexto.Clear;
  mTexto.Free;

  MessageBeep(65);
  ShowMessage('Processo Concluído com êxito');
  Gauge1.Progress := 0;

  DmCep.TableGravarCorreios.Close;
end;
Bom dia Joemil, obrigado, mais ja resolvi usando o clientdataset e verificando se é insert ou update, que não tinha me atentando a isso também

Ficou assim agora
Código:
procedure TFrmDldInsUpdCEP.Button4Click(Sender: TObject);
var
  fArq: TextFile;  /// tipo texto
  Caminho: String; /// armazena o caminho
  Linha: String;   /// lê a linha do tipo texto
  mTexto: TStringList;
  D: String;
begin
  Caminho := EditPathUFCorreio.Text; // variavel recebe os dados do edit
  AssignFile(fArq, Caminho);
  Reset(fArq);
  mTexto := TStringList.Create;
  mTexto.LoadFromFile(Caminho);
  gauge1.MaxValue := mTexto.Count - 2;
  mTexto.Free;

  /// fecha a tabela e atribui a instrução sql
  DmCep.ClientDataSetUF.Close;
  DmCep.ClientDataSetUF.CommandText := 'SELECT * FROM UF WHERE UF_CODIGO = :PCODIGO ';

  while not Eof(fArq)do
  begin
    Application.ProcessMessages;
    Readln(fArq, Linha); // lê a linha e joga o conteúdo na variável linha

    /// Só quem for do TIPO DE REGISTRO = "D" de dados
    D := Copy(Linha, 1, 1);
    if D = 'D' then
    begin
      /// Vamos verificar se ja existe o UF_DESCRICAO
      /// buscando pelo parâmetro código
      DmCep.ClientDataSetUF.Close;
      DmCep.ClientDataSetUF.Params.ParamByName('PCODIGO').AsString := Trim(copy(Linha, 8, 2));
      DmCep.ClientDataSetUF.Open;

      /// Aqui defino se é um inser ou update depois do resultado acima
      if DmCep.ClientDataSetUF.IsEmpty then // se a tabela estiver vazia
        DmCep.ClientDataSetUF.Append
      else
        DmCep.ClientDataSetUF.Edit;

      DmCep.ClientDataSetUF.FieldByName('UF_PAIS').AsString := Trim(Copy(AnsiUpperCase(Linha), 2, 2));
      DmCep.ClientDataSetUF.FieldByName('UF_SIGLA').AsString := Trim(Copy(AnsiUpperCase(Linha), 4, 2));
      DmCep.ClientDataSetUF.FieldByName('UF_CODIGO').AsString := Trim(Copy(Linha, 8, 2));
      DmCep.ClientDataSetUF.FieldByName('UF_DESCRICAO').AsString := Trim(Copy(AnsiUpperCase(Linha), 10, 119));
      DmCep.ClientDataSetUF.FieldByName('FLAG_CORREIOS').AsString := 'S';
      DmCep.ClientDataSetUF.Post;
      DmCep.ClientDataSetUF.ApplyUpdates(0); /// Atualiza no banco
      /// Incrementa o gauge
      Gauge1.AddProgress(1);
    end;
  end;

  MessageBeep(65);
  ShowMessage('Processo Concluído com êxito');
  Gauge1.Progress := 0;

  CloseFile(fArq);
  DmCep.ClientDataSetUF.Close;
end;


Agora esta como preciso.

Valeu amigo.
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 8954
Localização: Sinop-MT

MensagemEnviada: Qui Fev 13, 2020 9:33 am    Assunto: Responder com Citação

mesmo assim, vc ta usando um TextFile e um TStringList pra fazer a mesma coisa. tira o TextFile e usa somente o TStringList
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB