Página 1 de 1

append from nao funciona

Enviado: 09 Ago 2010 14:18
por joselimatb
Tenho um arquivo XML e tenho que passar pra DBF mas usando o exemplo abaixo ele so grava o primeiro registro.


a estrutura do DBF é : Linhas com caracter 250
O arquivo Diops.XML esta en axexo.
i nicio dele é ":

<?xml version="1.0" encoding="ISO-8859-1" ?>
- <ans:diopsFinanc xmlns:ans="http://www.ans.gov.br/padroes/diops/schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ans.gov.br/padroes/diops/schemas http://www.ans.gov.br/padroes/diops/sch ... xTypes.xsd">
- <ans:identificador>
<ans:registroANS>416827</ans:registroANS>
<ans:razaoSocial>LIMA - PLANO DE SAUDE ODONTOLOGICO LTDA</ans:razaoSocial>
<ans:CNPJ>10289532000144</ans:CNPJ>
<ans:periodo>2010-06-30</ans:periodo>
<ans:transacao>ENVIO_DIOPS_FINANCEIRO</ans:transacao>
<ans:hashPwd>6A35047FD209DE7B3328729390EE16A7</ans:hashPwd>
<ans:apTrans>AR33</ans:apTrans>
</ans:identificador>
- <ans:balancete>
<ans:inicioPeriodo>2010-06-30</ans:inicioPeriodo>
- <ans:ativo>
- <ans:lancamento>
<ans:conta>1</ans:conta>
<ans:saldoAnterior>30000.0</ans:saldoAnterior>
<ans:debitos>2239.0</ans:debitos>
<ans:creditos>2239.0</ans:creditos>
<ans:saldoFinal>30000.0</ans:saldoFinal>
<ans:descricao>ATIVO</ans:descricao>
</ans:lancamento>
- <ans:lancamento>
<ans:conta>12</ans:conta>
<ans:saldoAnterior>4576.85</ans:saldoAnterior>
<ans:debitos>0.0</ans:debitos>
<ans:creditos>2239.0</ans:creditos>
<ans:saldoFinal>2337.85</ans:saldoFinal>
<ans:descricao>ATIVO CIRCULANTE</ans:descricao>
</ans:lancamento>
- <ans:lancamento>
<ans:conta>121</ans:conta>
<ans:saldoAnterior>4576.85</ans:saldoAnterior>
<ans:debitos>0.0</ans:debitos>
<ans:creditos>2239.0</ans:creditos>
<ans:saldoFinal>2337.85</ans:saldoFinal>
<ans:descricao>DISPONIVEL</ans:descricao>
</ans:lancamento>
- <ans:lancamento>
<ans:conta>1211</ans:conta>
<ans:saldoAnterior>4576.85</ans:saldoAnterior>
<ans:debitos>0.0</ans:debitos>
<ans:creditos>2239.0</ans:creditos>
<ans:saldoFinal>2337.85</ans:saldoFinal>
<ans:descricao>CAIXA</ans:descricao>
</ans:lancamento>




Alguem pode me ajudar

VAleu

use caddiop new
zap
append from diops.xml delimited with ("<ans")

Re: append from nao funciona

Enviado: 09 Ago 2010 15:55
por ANDRIL
Do jeito que voce especificou acima, entendo que o APPEND utilizado não tera o efeito que deseja, tente assim:

Código: Selecionar todos

use caddiop new
zap
append from diops.xml SDF
O metodo SDF vai pegar cada linha do arquivo xml e coloca-la em cada linha do seu dbf com 256 carateres.

Ate+

Re: append from nao funciona

Enviado: 09 Ago 2010 16:26
por joselimatb
ANDRIL.

o tamanho maximo da structure é : 254

NAO funcionou, so salvao primeiro registro com o seguinte registro :

<?xml version="1.0" encoding="ISO-8859-1" ?><ans:diopsFinanc xmlns:ans="http://www.ans.gov.br/padroes/diops/schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ans.gov.br/padroes/diops/schemas http://www.ans.

Re: append from nao funciona

Enviado: 09 Ago 2010 16:41
por Toledo
joselimatb, eu fiz um teste aqui, copiei o conteúdo do xml que você passou acima e usei o código do Andril, todo o arquivo foi copiado para o DBF. A única coisa que notei, foi que como o campo do DBF tem apenas 250 caracteres, não copiou completamente a segunda linha do arquivo xML, pois ela tem mais de 260 caracteres.

Só uma observação: tente abrir este seu arquivo xML com o Bloco de Notas e verifique se o conteúdo do arquivos está como você passou acima. Pelo que parece, o conteúdo do arquivos está em uma linha só... e não em várias linhas como você passou acima.

Abraços,

Re: append from nao funciona

Enviado: 09 Ago 2010 16:51
por ANDRIL
Fiz aqui um teste com esse XML da sua postagem e foi importado corretamente.
Anexei o arquivo DBF porem esta como TXT, basta renomea-lo.

Ate+

Re: append from nao funciona

Enviado: 09 Ago 2010 17:33
por joselimatb
ola, estou enviando em anexo o arquivo em anexo, veja como esta.

Obrigado

Re: append from nao funciona

Enviado: 09 Ago 2010 18:43
por Toledo
joselimatb, era o que eu estava imaginando, todo o conteúdo do arquivo está em uma linha só!

Bom, se este seu arquivo xML vier sempre com uma linha só, então não vai dar para usar o APPEND FROM. Neste caso você tem que usar função FOPEN() para ler o arquivo.... abaixo tem uma função do Pablo (https://pctoledo.org/forum/viewto ... 848#p41848) que fiz algumas alterações:

Código: Selecionar todos

use caddiop new
zap

cTextFile:="diops.xml"
nFileHandle = FOPEN( cTextFile )
nFileSize = FSEEK( nFileHandle, 0, 2 )
FSEEK( nFileHandle, 0, 0 )
nBytesRead = 0
cAccumText:=""
DO WHILE nBytesRead<=nFileSize
   cSingle = FREADSTR( nFileHandle, 1 )
   nBytesRead = nBytesRead + 1
   IF cSingle = ">"
      cSingle = FREADSTR( nFileHandle, 1 )
      nBytesRead = nBytesRead + 1
      IF cSingle = "<"
       APPEND BLANK
       REPL campo WITH cAccumText+">"
       cSingle = ""
       cAccumText = "<"
      ELSE
       cAccumText = cAccumText + ">" +cSingle
      ENDIF
   ELSE
      cAccumText = cAccumText + cSingle
   ENDIF
ENDDO
IF !EMPT(cAccumText)
   APPEND BLANK
   REPL campo WITH cAccumText
ENDIF
FCLOSE( nFileHandle )
retu
Abraços,

Re: append from nao funciona

Enviado: 09 Ago 2010 21:31
por ANDRIL
Como seu xml esta em uma unica linha, voce tera que separar os campos
por linha e depois importar para o DBF.

Veja se isto lhe serve.

Código: Selecionar todos

use caddiop new
zap

cTextFile:="diops.xml"
cTextRes:="diopsR.xml"
hand2=fcreate("&cTextRes",0)

nFileHandle = FOPEN( cTextFile )
nFileSize = FSEEK( nFileHandle, 0, 2 )
FSEEK( nFileHandle, 0, 0 )
nBytesRead = 0
cAccumText:=""

*--aqui primeiro arruma o xml
DO WHILE nBytesRead<=nFileSize
    cBuffer=space(1000)
    cSingle = FREAD( nFileHandle, @cBuffer, len(cBuffer) )
    cTexto=STRTRAN(cBuffer,"<a",chr(13)+chr(10)+"<a")
    nBytesRead = nBytesRead + len(cBuffer)
    fwrite(hand2,cTexto)
    
ENDDO

FCLOSE( nFileHandle )
fclose(hand2)

*--importa para o DBF
APPEND FROM "&cTextRes" SDF
retu
Ate+

Re: append from nao funciona

Enviado: 10 Ago 2010 02:35
por rochinha
Amiguinho,

Tenho certeza que ao inves de puxar todo o conteudo usando APPEND é que a melhor saida será manipular o arquivo externamente como ja foi dito.

Se sua intenção é pegar o conteudo deste arquivo para variáveis analise este post e use a função PegaDados(). Veja que no post existem correções da mesma.

Ao identar o arquivo XML percebi que o mesmo esta incompleto:

Código: Selecionar todos

<ans:diopsFinanc xmlns:ans="http://www.ans.gov.br/padroes/diops/schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ans.gov.br/padroes/diops/schemas http://www.ans.gov.br/padroes/diops/sch ... xTypes.xsd">
   <ans:identificador>
      <ans:registroANS>416827</ans:registroANS> 
      <ans:razaoSocial>LIMA - PLANO DE SAUDE ODONTOLOGICO LTDA</ans:razaoSocial> 
      <ans:CNPJ>10289532000144</ans:CNPJ> 
      <ans:periodo>2010-06-30</ans:periodo> 
      <ans:transacao>ENVIO_DIOPS_FINANCEIRO</ans:transacao> 
      <ans:hashPwd>6A35047FD209DE7B3328729390EE16A7</ans:hashPwd> 
      <ans:apTrans>AR33</ans:apTrans> 
   </ans:identificador>
   <ans:balancete>
      <ans:inicioPeriodo>2010-06-30</ans:inicioPeriodo> 
      <ans:ativo>
         <ans:lancamento>
Desta forma não fechando algumas tag como balancete, ativo etc.

Re: append from nao funciona

Enviado: 10 Ago 2010 09:47
por joselimatb
Ola, pessoal agora sim, valeu mesmo, muito obrigado a todos.

uma otima semana para todos.