Pirambu! Postado Abril 16, 2007 Denunciar Share Postado Abril 16, 2007 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Abril 16, 2007 Denunciar Share Postado Abril 16, 2007 OpaNa hora de você ler os campos de data você deve converte-la de Stringpara o formato DateTimeStrtoDateExemplo:table1datatermino.Value := StrtoDate(copy(linha,35,44));Mas você não está usando delimitadores de campo no arquivo de texto, creioentão que você está preenchendo com espaço em branco pra completar omesmo tamanho do Registro correto?abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pirambu! Postado Abril 17, 2007 Autor Denunciar Share Postado Abril 17, 2007 churc, eu tentei mais continua dando erro talvez seja issoMas você não está usando delimitadores de campo no arquivo de texto, creioentão que você está preenchendo com espaço em branco pra completar omesmo 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Abril 17, 2007 Denunciar Share Postado Abril 17, 2007 OpaFaz assim pra não ficar nenhum tipo de dúvida, mostra como é o códigoque você está gerando o arquivo de texto!Assim da pra montar pra você desde a criação do arquivo até a leitura...abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pirambu! Postado Abril 18, 2007 Autor Denunciar Share Postado Abril 18, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Abril 18, 2007 Denunciar Share Postado Abril 18, 2007 OpaTendo por base que esta tabela tem os seguintes campos:funcionarioID - IntegerCursoID - IntegerPeriodo - StringDatatermino - DatePara 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ãonem vou arriscar a fazerQualquer coisa posta ai, capaz que tenha erros tipo faltando fechar parenteses e tal rsrabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pirambu! Postado Abril 19, 2007 Autor Denunciar Share Postado Abril 19, 2007 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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Abril 19, 2007 Denunciar Share Postado Abril 19, 2007 OpaFaz o seguinte, depois de gerar o arquivo de texto, abra-o e cole aqui parte doque está nele, assim da pra saber se está saindo corretamente...abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Abril 19, 2007 Denunciar Share Postado Abril 19, 2007 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 + ";" + campo3E quer ler: - campo1 até ";" - campo2 até ";" - campo3 até ";"Percebeu?!Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Abril 19, 2007 Denunciar Share Postado Abril 19, 2007 OpaAhh 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 campoeu 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pirambu! Postado Abril 20, 2007 Autor Denunciar Share Postado Abril 20, 2007 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: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Abril 20, 2007 Denunciar Share Postado Abril 20, 2007 OpaEste 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pirambu! Postado Abril 20, 2007 Autor Denunciar Share Postado Abril 20, 2007 Churc, valeu pela explicação, tudo ficou claro.Até a próxima. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Pirambu!
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:
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
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.