Ir para conteúdo
Fórum Script Brasil
  • 0

Importação de dados em TXT


itasouza

Pergunta

Bom dia..

Conseguir contar os espaços deu certo a inserção dos dados, mais só gravou a primeira linha, debugei o código e não encontrei problemas, verifiquei que estava usando o comando "Next;" não gerava erro mais só gravava a primeira linha, substituir por "Readln" e agora gera o erro:

Project SysSam.exe raised exception class EInOutError with

message 'I/O error 6'. Process stopped. Use Step or Run to continue.

Como usar o comando POS ou Readln, para que grave todas as linhas?

Layout de importação:

3351781;MARIA DA PENHA CAUS;69601640797;055;021;46671479;015;46687415;013;48879253;

3351781;MARIA DA PENHA CAUS;69601640797;055;021;46671479;015;46687415;013;48879253;

3351781;MARIA DA PENHA CAUS;69601640797;055;021;46671479;015;46687415;013;48879253;

3351781;MARIA DA PENHA CAUS;69601640797;055;021;46671479;015;46687415;013;48879253;

Código com os espaços corretos:

while not Eof(fArq) do //Enquanto não chegar ao fim do arquivo

begin

Application.ProcessMessages;

Readln(farq, linha); //Lê a linha e posiciona o cursor na próxima

frmImportacao.Caption := 'Lendo Linha: ' + IntToStr(i) + ' de: ' + IntToStr(ProgressBar1.Max);

//Buscando pelo Parâmetro codigo, para verificar se já existe na tabela

//DM.cdsImportacao.Params.ParamByName('codigo').asString := Trim(Copy(Linha, 1, 8));

DM.cdsImportacao.Open; //Abre o CDS

//

if DM.cdsImportacao.IsEmpty then //Se Não existir o registro

DM.cdsImportacao.Append //Insira os dados da linha atual

else //Senão, se o registro já existir

DM.cdsImportacao.Edit; //Coloca em modo de edição para atualizar os campos

//Aqui os campos recebem as linhas lidas

DM.cdsImportacaocod_integracao.AsString :=Trim(Copy(Linha, 1, 7 ));

DM.cdsImportacaonome.AsString :=Trim(Copy(Linha, 9, 19 ));

DM.cdsImportacaocontato.AsString :=Trim(Copy(Linha, 31, 9 ));

DM.cdsImportacaoddi.AsString :=Trim(Copy(Linha, 41, 3 ));

DM.cdsImportacaoddd.AsString :=Trim(Copy(Linha, 45, 3 ));

DM.cdsImportacaofone.AsString :=Trim(Copy(Linha, 49, 8 ));

DM.cdsImportacaoddd_2.AsString :=Trim(Copy(Linha, 58, 3 ));

DM.cdsImportacaofone_2.AsString :=Trim(Copy(Linha, 62, 8 ));

DM.cdsImportacaoddd_3.AsString :=Trim(Copy(Linha, 71, 3 ));

DM.cdsImportacaofone_3.AsString :=Trim(Copy(Linha, 75, 8 ));

DM.cdsImportacao.Post; //Salve o registro em memória

DM.cdsImportacao.ApplyUpdates(0); //Aplica as atualizações em memória no banco

DM.cdsImportacao.Close; //Fecha o CDS }

Inc(i);

ProgressBar1.Position := ProgressBar1.Position + 1;

Next;

end;

Agradeço a ajuda

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
Guest --itasouza --

Bom dia amigo.

Fiz o código e me gerou um erro, tenho o layout e o código a cima que não gerava erros mais só copiava a primeira linha, mais tinha o problema do ‘;’ em relação ao tamanho dos campos que caso estivesse errados gerava erro, então fiz da forma que você me passou o link e esta me gerando um erro.

Project SysSam.exe raised class EconvertError with message ‘is not a valid integer value’ process stopped.

Segue o código:

procedure TfrmImportacao.btnImportaClick(Sender: TObject);

const

Separator = '»';

var

CSVFile: TextFile;

szLine: String;

Caminho: string; //Variável que armazenará o caminho

i: integer; //variável utilizada no contador de linhas Importadas

mTexto: TStringList; //Utilizada para contar as linhas a importar

begin

Caminho := editArquivo.Text; //Variavel vai receber os dados do edit

AssignFile(CSVFile, Caminho);

ReSet(CSVFile);

mTexto := TStringList.Create;

try

mTexto.LoadFromFile(Caminho);

ProgressBar1.Max := mTexto.Count - 1;

i := 0;

finally

mTexto.Free;

end;

while not Eof(CSVFile) do //Enquanto não chegar ao fim do arquivo

begin

Application.ProcessMessages;

Readln(CSVFile,szLine); //Lê a linha e posiciona o cursor na próxima

frmImportacao.Caption := 'Lendo Linha: ' + IntToStr(i) + ' de: ' + IntToStr(ProgressBar1.Max);

//Buscando pelo Parâmetro codigo, para verificar se já existe na tabela

//DM.cdsImportacao.Params.ParamByName('cod_integracao').asString := Trim(Copy(Linha, 1, 7));

DM.cdsImportacao.Open; //Abre o CDS

//

if DM.cdsImportacao.IsEmpty then //Se Não existir o registro

DM.cdsImportacao.Append //Insira os dados da linha atual

else //Senão, se o registro já existir

DM.cdsImportacao.Edit; //Coloca em modo de edição para atualizar os campos

//Aqui os campos recebem as linhas lidas

DM.cdsImportacaocod_integracao.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaonome.Value := (Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaocontato.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaoddi.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaoddd.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaofone.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaofone_2.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaoddd_3.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaofone_3.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacao.Post; //Salve o registro em memória

DM.cdsImportacao.ApplyUpdates(0); //Aplica as atualizações em memória no banco

DM.cdsImportacao.Close; //Fecha o CDS }

Inc(i);

ProgressBar1.Position := ProgressBar1.Position + 1;

end;

MessageBeep(65);

ShowMessage('Processo Concluído Com êxito!!!');

end;

Agradeço se poder ajuda!!

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --itasouza --

Bom dia

Alterei o código, e não estou conseguindo pega o erro mesmo debugando, minha tabela tem esta estrutura.

CREATE TABLE recebe_importacao (

cod_integracao INTEGER UNSIGNED NOT NULL,

nome VARCHAR(255) NULL,

contato INTEGER UNSIGNED NULL,

ddi INTEGER UNSIGNED NULL,

ddd INTEGER UNSIGNED NULL,

fone INTEGER UNSIGNED NULL,

ddd_2 INTEGER UNSIGNED NULL,

fone_2 INTEGER UNSIGNED NULL,

ddd_3 INTEGER UNSIGNED NULL,

fone_3 INTEGER UNSIGNED NULL

);

Segue o código alterado

if DM.cdsImportacao.IsEmpty then //Se Não existir o registro

begin

DM.cdsImportacao.Append //Insira os dados da linha atual

end;

//Aqui os campos recebem as linhas lidas

DM.cdsImportacaocod_integracao.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaonome.Value := (Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaocontato.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaoddi.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaoddd.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaofone.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaofone_2.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaoddd_3.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacaofone_3.Value := StrToInt(Copy(szLine, 1, Pos (Separator,szLine) -1));

Delete(szLine, 1, Pos(Separator, szLine));

//

DM.cdsImportacao.Post; //Salve o registro em memória

DM.cdsImportacao.ApplyUpdates(0); //Aplica as atualizações em memória no banco

DM.cdsImportacao.Close; //Fecha o CDS }

Inc(i);

ProgressBar1.Position := ProgressBar1.Position + 1;

end;

Agradeço se poder ajuda!!

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --itasouza --

Estou fazendo assim, mais o campo DM.cdsImportacaocod_integracao está vindo em branco.

agradeço se alguém poder ajudar

procedure TfrmImportacao.btnImportaClick(Sender: TObject);

const

Separator = '»';

var

fArq: TextFile; //Variável do Tipo Arquivo de Texto

Caminho: string; //Variável que armazenará o caminho

Linha: string; //Variável que vai armazenar cada linha

mTexto: TStringList; //Utilizada para contar as linhas a importar

i: integer; //variável utilizada no contador de linhas Importadas

begin

Caminho := editArquivo.Text; //Variavel vai receber os dados do edit

AssignFile(fArq, Caminho);

ReSet(fArq);

mTexto := TStringList.Create;

try

mTexto.LoadFromFile(Caminho);

ProgressBar1.Max := mTexto.Count - 1;

i := 0;

finally

mTexto.Free;

end;

while not Eof(fArq) do //Enquanto não chegar ao fim do arquivo

begin

Application.ProcessMessages;

Readln(farq, linha); //Lê a linha e posiciona o cursor na próxima

frmImportacao.Caption := 'Lendo Linha: ' + IntToStr(i) + ' de: ' + IntToStr(ProgressBar1.Max);

//Buscando pelo Parâmetro codigo, para verificar se já existe na tabela

//DM.cdsImportacao.Params.ParamByName('cod_integracao').asString := Trim(Copy(Linha, 1, 7));

DM.cdsImportacao.Open; //Abre o CDS

//

if DM.cdsImportacao.IsEmpty then //Se Não existir o registro

DM.cdsImportacao.Append //Insira os dados da linha atual

else //Senão, se o registro já existir

DM.cdsImportacao.Append; // mesmo ezistindo ele inseri

//Aqui os campos recebem as linhas lidas

DM.cdsImportacaocod_integracao.AsString :=(Copy(Linha, 1, Pos (Separator,Linha) -1));

Delete(Linha, 1, Pos(Separator, Linha));

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...