Importação de arquivo txt - delimitador ‘;’

24/06/2008

4

Boa tarde..


Estou fazendo um código de importação de arquivo txt para o banco de dados, o mesmo já está pronto e até funciona, estou separando os campos com um delimitador ‘;’ o problema e que nos campos onde possui nome separado com espaço vazio ele esta considerando como ‘;’ jogando os valores nos campos errados e desta forma gerando erro.


Agradeço se poder me ajudar..



Segue o código :



procedure TfrmImportacao.btnImportaClick(Sender: TObject);
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
sl_linha:TStringList;
begin
Caminho := editArquivo.Text; //Variavel vai receber os dados do edit
AssignFile(fArq, Caminho);
ReSet(fArq);
mTexto := TStringList.Create;
sl_linha:=TStringList.create;
sl_linha.Delimiter:=´;´;
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
sl_linha.DelimitedText := linha;
frmImportacao.Caption := ´Lendo Linha: ´ + IntToStr(i) + ´ de: ´ + IntToStr(ProgressBar1.Max);
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 :=sl_linha[0];
DM.cdsImportacaonome.AsString :=sl_linha[1];
DM.cdsImportacaocontato.AsString :=sl_linha[2];
DM.cdsImportacaoddi.AsString :=sl_linha[3];
DM.cdsImportacaoddd.AsString :=sl_linha[4];
DM.cdsImportacaofone.AsString :=sl_linha[5];
DM.cdsImportacaoddd_2.AsString :=sl_linha[6];
DM.cdsImportacaofone_2.AsString :=sl_linha[7];
DM.cdsImportacaoddd_3.AsString :=sl_linha[8];
DM.cdsImportacaofone_3.AsString :=sl_linha[9];
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!!!´);
btnImporta.Enabled:=False;

end;





Layout de importação


3351781;MARIA DA PENHA CAUS;69601640797;055;021;46671479;015;46687415;013;48879253;
3351451;jose DA PENHA CAUS;64601640797;056;022;46644479;045;46447415;043;44149253;
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;
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;


Responder

Posts

24/06/2008

Joaoshi

Colega, já tive este problema e a solução foi colocar aspas.

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

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

Não sei se tem outra solução. Espero ter ajudado.


Responder

24/06/2008

Ita

Boa tarde.. primeiramente muito obrigado pela dica..

Mais se entendir bem você está sugerindo que eu mude o layout do arquivo txt?
este arquivo txt e um aquivo que não e gerado por mim, eu apenas estou lendo ele, você teria uma outra solução?

mais vou tentar mudar o layout e verificar.

Agradeço!!


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


Responder

24/06/2008

Ita

Boa tarde

Alterei o layout do arquivo de importação acrescentando “; agora o código consegue fazer a gravação corretamente dos dados.
Mais ao concluir a importação gera a seguinte mensagem de erro:
Exception class EstringListError with message ‘List index out of bounds (0).

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

Agradeço a ajuda


Responder

24/06/2008

Joaoshi

Colega, após a instrução:

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


faça uma verificação se a linha não esta em branco

if Trim(linha) = ´´ then Exit; // este é só um exemplo.

Pode ser que esteja pegando uma linha em branco, causando este problema.

Espero ter ajudado.


Responder