append from nao funciona

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

joselimatb
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 28 Mai 2007 15:14
Localização: Tubarao-SC

append from nao funciona

Mensagem 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")
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: append from nao funciona

Mensagem 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+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
joselimatb
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 28 Mai 2007 15:14
Localização: Tubarao-SC

Re: append from nao funciona

Mensagem 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.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: append from nao funciona

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: append from nao funciona

Mensagem 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+
Anexos
teste.txt
Renomear teste.txt para teste.dbf
(11.61 KiB) Baixado 209 vezes
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
joselimatb
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 28 Mai 2007 15:14
Localização: Tubarao-SC

Re: append from nao funciona

Mensagem por joselimatb »

ola, estou enviando em anexo o arquivo em anexo, veja como esta.

Obrigado
Anexos
diops.zip
esta compactado
(12.85 KiB) Baixado 249 vezes
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: append from nao funciona

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: append from nao funciona

Mensagem 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+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: append from nao funciona

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
joselimatb
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 28 Mai 2007 15:14
Localização: Tubarao-SC

Re: append from nao funciona

Mensagem por joselimatb »

Ola, pessoal agora sim, valeu mesmo, muito obrigado a todos.

uma otima semana para todos.
Editado pela última vez por Toledo em 10 Ago 2010 10:20, em um total de 1 vez.
Razão: Mensagem editada para formatação de texto em letras minúsculas. Evite postar mensagens com texto EM LETRAS MAIÚSCULAS.<br>Veja as Regras do Fórum:<br>7 - Mensagens em letras MAIÚSCULAS poderão ser editadas sem aviso prévio.
Responder