Página 1 de 2

Importar data com Append

Enviado: 21 Jun 2007 20:21
por Grings
Preciso importar com Append uma data de um arquivo TXT que se encontra no formato 31122006 para um DBF campo cujo campo é data. Não estou conseguindo, é possível fazer isso com o Append ??
Nota de Moderação:
por [url=https://pctoledo.org/forum/memberlist.php?mode=viewprofile&u=100899][color=#00AA00]Pablo César[/color][/url]: Mensagem recuperada através de citações de outros usuários. Pois esta mensagem foi re-editada pelo próprio autor apagando o seu conteúdo e prejudicando o entendimento do tópico. Esta prática não é aceita no fórum.

Enviado: 21 Jun 2007 21:32
por sygecom
Tche, abaixo segue um exemplo completo....

Código: Selecionar todos

cls
vARQ:={}
aadd( vARQ, {"data","D",8,0} )
DBcreate("TESTE.DBF", vARQ)

use teste alias teste shared new
hand=FOPEN("c:\teste.txt")
xdata=FREADSTR(hand,8)
FCLOSE(hand)
xDATA1=left(xdata,2)
xDATA2=left(xdata,4)
xDATA3=RIGHT(xdata2,2)
xDATA4=RIGHT(xdata,4)
xDATA4=xDATA1+"/"+xDATA3+"/"+xDATA4

@ 10,10 SAY XDATA        COLOR("B/W*")
@ 11,10 SAY XDATA4       COLOR("B/W*")
@ 12,10 SAY CTOD(XDATA4) COLOR("B/W*")

sele teste
append blank
repl data with xdata4
return
Qualquer duvida prende o grito....

Abraços
Leonardo Machado

Enviado: 21 Jun 2007 22:45
por Maligno
Leonardo,
De onde foi que você tirou que a data em questão reside nas primeiras 8 posições do arquivo texto?
E que jeito esdrúxulo é esse de converter o texto em DATE? Não seria mais fácil algo do tipo:

Código: Selecionar todos

set date british
set century on // não é essencial
cData := "31122006"
dData := CtoD(Transf(cData,"@R 99/99/9999"))

Re: Importar data com Append

Enviado: 21 Jun 2007 22:52
por Maligno
Grings escreveu:Preciso importar com Append uma data de um arquivo TXT que se encontra no formato 31122006 para um DBF campo cujo campo é data. Não estou conseguindo, é possível fazer isso com o Append ??
Não me lembro exatamente dessa parte (nunca usei e não vi o NG) mas acredito que não, pois o APPEND provavelmente espera que a data esteja no formato ANSI (YYYYMMDD). Então, você terá que fazer (+/-) como o Leonardo sugeriu: abrir o arquivo texto e capturar a porção que registra essa data. Daí é converter e importar da forma que precisar.

Enviado: 21 Jun 2007 22:57
por sygecom
De onde foi que você tirou que a data em questão reside nas primeiras 8 posições do arquivo texto?
Tche, ele disse que esta em um TXT , eu não disse se sabe abrir ou localizar algo no TXT....ele não detalhou pq não esta conseguindo...
E que jeito esdrúxulo é esse de converter o texto em DATE?
Maligno....acho que vossa senhoria deveria medir as palavras antes de Postar...sou postei uma ajuda a um colega....
Não seria mais fácil algo do tipo:
Código:
set date british
set century on // não é essencial
cData := "31122006"
dData := CtoD(Transf(cData,"@R 99/99/9999"))
Seu exemplo não esta pegando de um TXT.....alias de onde vc tirou que essa DATA esta vindo de uma variavel fixa.......?

Abraços
Leonardo Machado

Enviado: 22 Jun 2007 00:31
por Maligno

Código: Selecionar todos

xDATA1=left(xdata,2) 
xDATA2=left(xdata,4) 
xDATA3=RIGHT(xdata2,2) 
xDATA4=RIGHT(xdata,4) 
xDATA4=xDATA1+"/"+xDATA3+"/"+xDATA4
Se fosse um iniciante, até nem me preocuparia. Mas esse código, pra um sujeito com a sua experiência, não só é uma forma bem esdrúxula como um desperdício. Refatorando fica com uma só linha. Não fica melhor usar a única linha abaixo?

Código: Selecionar todos

CtoD(Transf(xdata,"@R 99/99/9999"))
E é óbvio que eu sei que você postou seu exemplo pra ajudar o colega. Não precisava nem se dar ao trabalho de dizer isso. Gastou o verbo à toa. :\
Seu exemplo não esta pegando de um TXT.....alias de onde vc tirou que essa DATA esta vindo de uma variavel fixa.......?
Meu código é um exemplo simples que trata apenas da conversão. Por isso "inventei" uma variável. Agora, de onde o cara vai pegar a data é problema dele. Além do que, a pergunta dele foi "é possível fazer isso com o Append ??". E dei minha resposta. Ele não pediu código exemplo pra ler um TXT.

Inclusive, o exemplo de conversão que dei foi mais direcionado à você, que me deixou surpreso. Imagino que você devia estar bem distraído para compor aquilo.

Mas, por favor, atente para o fato de que minha crítica não é ofensiva, mas construtiva.

Enviado: 22 Jun 2007 09:14
por Eolo
Maligno,
Faltou um SET DATE BRIT...

xdata="31122006"
?CtoD(Transf(xdata,"@R 99/99/9999")) -> data vazia...

xdata="31122006"
set date brit
?CtoD(Transf(xdata,"@R 99/99/9999")) -> 31/12/2006

Enviado: 22 Jun 2007 09:30
por Maligno
Eolo escreveu:Maligno,
Faltou um SET DATE BRIT...
Não faltou, Eolo. Está na minha primeira mensagem. Veja lá.

Enviado: 22 Jun 2007 09:38
por Eolo
Ops, é vero, Maligno. Peguei pela citação, no seu último post, e falei besteira...

Enviado: 22 Jun 2007 09:47
por Maligno
Distraiu-se. Tudo bem. Acontece comigo o tempo todo. :)
Mas se você reparar bem, faltou sim um SET DATE BRITISH, mas no exemplo do Leonardo, em sua primeira mensagem. O código dele sempre gravará uma data vazia no DBF.

Importar data com Append

Enviado: 22 Jun 2007 10:46
por Grings
De fato Maligno, Append From não aceita campos data em nenhum formato.
Nota de Moderação:
por [url=https://pctoledo.org/forum/memberlist.php?mode=viewprofile&u=100899][color=#00AA00]Pablo César[/color][/url]: Mensagem recuperada através de citações de outros usuários. Pois esta mensagem foi re-editada pelo próprio autor apagando o seu conteúdo e prejudicando o entendimento do tópico. Esta prática não é aceita no fórum.

Enviado: 22 Jun 2007 10:53
por sygecom
Se fosse um iniciante, até nem me preocuparia. Mas esse código, pra um sujeito com a sua experiência, não só é uma forma bem esdrúxula como um desperdício. Refatorando fica com uma só linha. Não fica melhor usar a única linha abaixo?
Toda vida ficaria melhor....não desmereci em momento algum o seu exemplo...apenas comentei.....coloquei um exemplo que veio na cabeça....na aquela hora...
Meu código é um exemplo simples que trata apenas da conversão. Por isso "inventei" uma variável. Agora, de onde o cara vai pegar a data é problema dele. Além do que, a pergunta dele foi "é possível fazer isso com o Append ??". E dei minha resposta. Ele não pediu código exemplo pra ler um TXT.

Inclusive, o exemplo de conversão que dei foi mais direcionado à você, que me deixou surpreso. Imagino que você devia estar bem distraído para compor aquilo
Realmente Maligno....vc tem razão...eu deveria esta bem distraido....talvez cansado....afinal jah era 21:30 da noite...eu tava desde cedo na luta....mas o que me deixa....as vezes com má impressão de vossa senhoria é que vc tenta tripudiar....em cima dos outros, acho que todos aqui no forum de uma certa maneira estão querendo colaborar.....seria muito mais simples.....vc postar seu codigo dando sua dica....e pronto..
Mas, por favor, atente para o fato de que minha crítica não é ofensiva, mas construtiva.
Obrigado e Igualmente.....
Mas se você reparar bem, faltou sim um SET DATE BRITISH, mas no exemplo do Leonardo, em sua primeira mensagem. O código dele sempre gravará uma data vazia no DBF.

Realmente esqueci do SET DATE BRITISH......




Abraços
Leonardo Machado
#$%#%%¨&%&#

Re: Importar data com Append

Enviado: 22 Jun 2007 10:55
por Maligno
Grings escreveu:De fato Maligno, Append From não aceita campos data em nenhum formato.
Mas aceita. Como eu disse, no formato ANSI. Se você ainda tivesse a data nesse formato e pudesse importar tudo, seria mais fácil. Mas se você tem a data no formato britânico e precisa importar apenas parte dos dados, só manualmente mesmo.
Aliás, nunca uso APPEND pra isso. Sempre faço manualmente.

Enviado: 22 Jun 2007 11:01
por Eolo
É, a gente se distrai mesmo. Deve ser por causa da 6a. feira... eheheh

Mas, voltando ao começo, se eu fosse você, Grings, esquecia o APPEND FROM (que é o que eu acho que você tem em mente quando diz "...preciso importar com Append..."). Eu já tentei usar esse comando, por achar que era a salvação da lavoura, e foi um saco: gastei muito tempo e não resolveu 100%.

Eu faria como já foi dito acima: ler linha a linha do TXT, isolar cada campo, testar a consistência de cada um (no caso das datas, por ex, confirmar que não tem nenhuma "vazia" ou incorreta), e depois fazer o APPE BLAN e REPL...

Enviado: 22 Jun 2007 11:07
por Maligno
sygecom escreveu:Realmente Maligno....vc tem razão...eu deveria esta bem distraido....talvez cansado....afinal jah era 21:30 da noite...eu tava desde cedo na luta....
A essa hora,... Sei bem como é. Estou trabalhando todos os dias até 3 ou 4 da manhã. Quando chega nesse ponto é fácil perder a concentração. Mais cedo ou mais tarde será você a me corrigir numa outra thread qualquer. E aceitarei sua intervenção humildemente.
mas o que me deixa....as vezes com má impressão de vossa senhoria é que vc tenta tripudiar....em cima dos outros
Não tripudiei coisa alguma. Foi impressão sua. Apenas estranhei um código desse tipo partindo de "Vossa Senhoria". Considere essa última observação um elogio. :)