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

como verificar espaços em aquivo txt


Guest --itasouza --

Pergunta

Guest --itasouza --

Bom dia a todos..

Tenho um código que ler um aquivo txt e grava os dados no banco, estava contando os espaços e gravando de acordo com os mesmos.

O problema e que quando tem algum registro que a sequencia de campos não contem a mesma quantidade de espaços gera erro, então precisava separa por ‘;’ . Alterei o codigo com a ajuda do que achei no forum, mais quando chega no registro

DM.cdsImportacaonome.AsString :=sl_linha[1];

O nome da pessoa possui espaços, então ele esta separando como se fosse ‘;’ jogando o resultado em outros campos gerando erro.

Agradeço a ajuda!!

Tenho o layout

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;

Codigo funcionando

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!!!');

end;

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Acho que o seu maior problema é a estrutura da base de dados. Será que não seria melhor você tentar modificar essa base de dados?! Tente colocar um "_" (underline) entre o nome e os sobrenomes, por exemplo. Acho que assim vai ficar mais fácil pra importar.

Link para o comentário
Compartilhar em outros sites

  • 0

Com esse codigo do exemplo abaixo, acredito que resolva seu problema, note que é usado um "Seperadador" onde é especificado ";" então ele vai identifica-lo e passa para o outro campo.

const
  Separador = ';';
var
  CSVFile: TextFile;
  szLine: String;
begin
  AssignFile(CSVFile, 'C:\Treinamento.txt');
  Reset(CSVFile);
  while not EOF(CSVFile) do
  begin
    Readln(CSVFile, szLine);
    table1.Append;
    table1codigo.Value := StrtoInt(Copy(szLine, 1, Pos(Separador, szLine) -1));
    Delete(szLine, 1, Pos(Separador, szLine));
    table1nomecurso.Value := StrtoInt(Copy(szLine, 1, Pos(Separador, szLine) -1));
    Delete(szLine, 1, Pos(Separador, szLine));
    table1.Post;
  end;

ver se isso ajuda.

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,3k
×
×
  • Criar Novo...