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

Ler Arquivo Txt


Pirambu!

Pergunta

Eu estou com um problema para ler um aruivo TXT, que estar dando erro na hora de importa para o paradox

o campo que estar dando erro é de data, eu tentei assim:

procedure TForm1.BitBtn4Click(Sender: TObject);
var
arq:textfile;
linha:string;
begin
assignfile(arq,'C:\Treinamento.txt');
reset(arq);
while not eof(arq) do
  begin
    readln(arq,linha);
    table1.Append;
    table1codigofunc.Value := copy(linha,1,6);
    table1nomecurso.Value := copy(linha,8,17);
    table1periodo.Value := copy(linha,19,34);
    table1datatermino.Value := copy(linha,35,44);
    table1.Post;
  end;

end;

no TXT a data Estar Assim " 15/02/2007"

na tabela estar como "D"

Alguém sabe como resolver este problema?

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Opa

Na hora de você ler os campos de data você deve converte-la de String

para o formato DateTime

StrtoDate

Exemplo:

table1datatermino.Value := StrtoDate(copy(linha,35,44));

Mas você não está usando delimitadores de campo no arquivo de texto, creio

então que você está preenchendo com espaço em branco pra completar o

mesmo tamanho do Registro correto?

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

churc, eu tentei mais continua dando erro talvez seja isso

Mas você não está usando delimitadores de campo no arquivo de texto, creio

então que você está preenchendo com espaço em branco pra completar o

mesmo tamanho do Registro correto?

quando eu crio o TXT eu preencho os espaços com a função abaixo:

function Espaco(linha:string;QTD:integer):String;
var
Tam:integer;
begin
  Tam:=Length(linha);
  While Tam <= QTD do
    begin
      Linha:=Linha + ' ';
      Tam:= Tam + 1;
    end;
    Result:= linha;
    end;

eu preciso usar também para ler o TXT?

ou seria outra forma?

Link para o comentário
Compartilhar em outros sites

  • 0

Estou fazendo assim:

function Espaco(linha:string;QTD:integer):String;
var
Tam:integer;
begin
  Tam:=Length(linha);
  While Tam <= QTD do
    begin
      Linha:=Linha + ' ';
      Tam:= Tam + 1;
    end;
    Result:= linha;
    end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
arq:textfile;
begin
try
assignfile(arq,'C:\treinamento.txt');
rewrite(arq);
adotable1.First;
WHILE NOT ADOTABLE1.Eof DO
BEGIN
    writeln(arq,Espaco(intTostr(adotable1funcionarioID.Value),6)
  ,espaco(intTostr(adotable1cursoID.value),10)
   ,espaco(adotable1Periodo.value,15)
   ,dateTostr(adotable1Datatermino.value),
   adotable1.Next;
end;
closefile(arq);
except
Showmessage('Não Disponivel');
end;
end;

pronto churc

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Tendo por base que esta tabela tem os seguintes campos:

funcionarioID - Integer

CursoID - Integer

Periodo - String

Datatermino - Date

Para gravar no arquivo de texto:

const
  Separator = '»';
var
  CSVFile: TextFile;
begin
  try
    AssignFile(CSVFile, 'C:\Treinamento.txt');
    Rewrite(CSVFile);
    adotable1.First;
    while not ADOTABLE1.Eof do
    begin
      Writeln(CSVFile, adotable1funcionarioID.AsString + Separator +
      adotable1funcionarioID.AsString + Separator + adotable1cursoID.AsString + Separator +
      adotable1Periodo.AsString + Separator + adotable1Datatermino.AsString);
      adotable1.Next;
    end;
    closefile(CSVFile);
  except
    Showmessage('Não Disponivel');
  end;
Para ler do arquivo de texto:
const
  Separator = '»';
var
  CSVFile: TextFile;
  szLine: String;
begin
  AssignFile(CSVFile, 'C:\Treinamento.txt');
  Reset(CSVFile);
  while not EOF(CSVFile) do
  begin
    Readln(CSVFile, szLine);
    table1.Append;
    table1codigofunc.Value := StrtoInt(Copy(szLine, 1, Pos(Separator, szLine) -1));
    Delete(szLine, 1, Pos(Separator, szLine));
    table1nomecurso.Value := StrtoInt(Copy(szLine, 1, Pos(Separator, szLine) -1));
    Delete(szLine, 1, Pos(Separator, szLine));
    table1periodo.Value := Copy(szLine, 1, Pos(Separator, szLine) -1);
    Delete(szLine, 1, Pos(Separator, szLine));
    table1datatermino.Value := StrtoDate(Copy(szLine, 1, Length(szLine)));
    Delete(szLine, 1, Length(szLine));
    table1.Post;
  end;

Da pra se fazer funções pra não ficar utilizando o Copy mas estou sem o Delphi aqui então

nem vou arriscar a fazer

Qualquer coisa posta ai, capaz que tenha erros tipo faltando fechar parenteses e tal rsr

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Churc, dá uma olhada, e diz o que estar errado pois eu consigo gerar TXT com tres campos mais para ler só consigo ler apenas dois:

procedure TForm1.BitBtn6Click(Sender: TObject);
const
  Separator = '»';
var
  CSVFile: TextFile;
begin
  try
    AssignFile(CSVFile, 'C:\Treinamento1.txt');
    Rewrite(CSVFile);
    adotable1.First;
    while not ADOTABLE1.Eof do
    begin
      Writeln(CSVFile, adotable1funcionarioID.AsString + Separator +
      adotable1cursoID.AsString + Separator +   adotable1Periodo.AsString);
      adotable1.Next;
    end;
    closefile(CSVFile);
  except
    Showmessage('Não Disponivel');
  end;

end;

procedure TForm1.BitBtn7Click(Sender: TObject);
const
  Separator = '»';
var
  CSVFile: TextFile;
  szLine: String;
begin
  AssignFile(CSVFile, 'C:\Treinamento1.txt');
  Reset(CSVFile);
  while not EOF(CSVFile) do
  begin
    Readln(CSVFile, szLine);
    table1.Append;
    table1codigofunc.Value := Copy(szLine, 1, Pos(Separator, szLine)-1);
    Delete(szLine, 1, Pos(Separator, szLine));
    table1nomecurso.Value := Copy(szLine, 1, Pos(Separator, szLine) -1);
    Delete(szLine, 1, Pos(Separator, szLine));
    table1periodo.Value := Copy(szLine, 1, Pos(Separator, szLine) -1);
    Delete(szLine, 1, Pos(Separator, szLine));
    table1.Post;
  end;
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Pirambu!, basta que você copie direto o resto do texto para seu último campo! Não esqueça que você não gravou no fim da linha o caracter delimitador, então Pos(Separator, szLine) -1 resultará em -1, logo nada será copiado para seu último campo.

você grava: campo1 + ";" + campo2 + ";" + campo3

E quer ler:

- campo1 até ";"

- campo2 até ";"

- campo3 até ";"

Percebeu?!

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Ahh verdade Micheus agora que fui ver que ele modificou o código...

Pirambu, como o Micheus falou no meu código repare que para o último campo

eu usei:

Copy(szLine, 1, Length(szLine));

Para funcionar do jeito que você está fazendo, você teria que no WriteLn colocar

+ Separator pro último campo...

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

eu não observei o detalhe no código , a gora funcionou direitinho, agora você pode me explica o codigo, porque o negócio só de copiar e colar não é minha praia. :huh:

Copy(szLine, 1, Pos(Separator, szLine) -1);

Este codigo dentro do primeiro ( szline,...,(...)...) estar identificando o valor a ser copiado?

e o ( ...,1,...,(...)...) o que seguinifica este "1"?

e o (...,...,pos(separador,szline),...) estar identificando o separador e valor a ser copiado?

e o (...,...,(...),-1) o que siguinifica "-1"?

mas valeu pela ajuda.:rolleyes:

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Este codigo dentro do primeiro ( szline,...,(...)...) estar identificando o valor a ser copiado?
Exato.
e o ( ...,1,...,(...)...) o que seguinifica este "1"?
Significa a posição (Index) em que vai começar a ser copiado, ou seja, a partir de qual Index vai começar a copiar, o 1 significa que começa da primeira letra... se fosse 2 da segunda letra...
e o (...,...,pos(separador,szline),...) estar identificando o separador e valor a ser copiado?

e o (...,...,(...),-1) o que siguinifica "-1"?

O Pos retorna a posição de um caracter que é passado no parametros dele, então Pos(Separator, szLine) ele acha o Separador que seria o » mas não queremos copiar o separador então usamos o -1, ou seja, copia até o separador mais não copia o separador...

Da uma olhada neste post.

abraço

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...