 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qua Fev 12, 2020 5:30 pm Assunto: Ajuda na leitura TXT |
|
|
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 _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Editado pela última vez por adriano_servitec em Qui Fev 13, 2020 9:20 am, num total de 1 vez |
|
Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Qui Fev 13, 2020 9:03 am Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qui Fev 13, 2020 9:19 am Assunto: |
|
|
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. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Qui Fev 13, 2020 9:33 am Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|