perdendo pedaço do aquivo

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

clebervn
Usuário Nível 3
Usuário Nível 3
Mensagens: 286
Registrado em: 12 Jun 2007 10:49
Localização: Florianópolis/SC

perdendo pedaço do aquivo

Mensagem por clebervn »

Estou lendo um arquivo XML, contendo 388 itens, ele ta lendo até o 385 e despresando o resto, segue abaixo pedaõ do código referente a leitura do mesmo :

Código: Selecionar todos

    //  PEGA O NOME DO ARQUIVO A SER PROCESSADO DA MATRIZ
    xArquivo:= xDiretorio+aMatXml[jk]
    nHandle := FOPEN(xArquivo,2)
    nFim    := FSEEK(nHandle,0,2)
    FCLOSE(nHandle)

    //  LEITURA DO ARQUIVO XML
    xTexto   := MEMOREAD(xArquivo)
tem algo errado ou limitação ????
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: perdendo pedaço do aquivo

Mensagem por Toledo »

Olá Cleber, campo memo tem um limite de 64 Kb. Mas dê uma olhada nesta função do Pablo, pode ser que lhe ajude:

https://pctoledo.org/forum/viewto ... 848#p41848

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
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: perdendo pedaço do aquivo

Mensagem por alxsts »

Olá!

Explore os recursos da ferramenta. Veja o que consegue com o objetoTXmlDocument() e outros associados.

Boa sorte!
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: perdendo pedaço do aquivo

Mensagem por Toledo »

Só complementando a mensagem do Alexandre, segue um exemplo:

Código: Selecionar todos

Private aProds:={}
cNFe:="C:\PASTA\ARQUIVO.XML"

oXmlDoc:= TXmlDocument():new()
oXMlDoc:read( Memoread( cNFe ) )

oXmlNode:= oXmlDoc:findFirst( "det" )
e=1
DO WHILE oXmlNode <> NIL
    oXmlDetPro := TXmlIteratorScan():new( oXmlNode )

    vCod:= STRTRAN(oXmlDetPro:find( 'cProd' ):cData," ","")
    vDesc:= oXmlDetPro:find( 'xProd' ):cData
    AADD(aProds,{vCod,vDesc,"","","",0,0,0,0,0,0,0,0,""})

    aProds[e,4]:= oXmlDetPro:find( 'CFOP' ):cData
    aProds[e,5]:= oXmlDetPro:find( 'uCom' ):cData
    aProds[e,6]:= VAL(oXmlDetPro:find( 'qCom' ):cData)
    aProds[e,7]:= VAL(oXmlDetPro:find( 'vUnCom' ):cData)
    aProds[e,8]:= VAL(oXmlDetPro:find( 'vProd' ):cData)

    if valtype(oXmlDetPro:find( 'infAdProd' ))!="U"
     aProds[e,14]:= oXmlDetPro:find( 'infAdProd' ):cData
    endif

    oXmlNode := oXmlDoc:findNext()
    e+=1
ENDDO
Bom, estou apenas dando um exemplo de como usar o objeto TXmlDocument(), mas como neste exemplo estou usando a função MEMOREAD() (ver linha 5), acho que não vai resolver o problema do Cleber.

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
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: perdendo pedaço do aquivo

Mensagem por alxsts »

Olá!

O método :read() aceita como parâmetros uma string ou um file handler. Assim, o limite de 64Kb pode ser superado:

Código: Selecionar todos

#include "fileio.ch"

   LOCAL nHandle

   Private aProds:={}

   cNFe:="C:\PASTA\ARQUIVO.XML"

   oXmlDoc:= TXmlDocument():new()
   //oXMlDoc:read( Memoread( cNFe ) )

   IF nHandle := ( FOPEN( cNFe, FO_READ ) ) == 0
      oXMlDoc:read( nHandle )
   
      oXmlNode:= oXmlDoc:findFirst( "det" )
      e=1
      DO WHILE oXmlNode <> NIL
         oXmlDetPro := TXmlIteratorScan():new( oXmlNode )
      
         vCod:= STRTRAN(oXmlDetPro:find( 'cProd' ):cData," ","")
         vDesc:= oXmlDetPro:find( 'xProd' ):cData
         AADD(aProds,{vCod,vDesc,"","","",0,0,0,0,0,0,0,0,""})
      
         aProds[e,4]:= oXmlDetPro:find( 'CFOP' ):cData
         aProds[e,5]:= oXmlDetPro:find( 'uCom' ):cData
         aProds[e,6]:= VAL(oXmlDetPro:find( 'qCom' ):cData)
         aProds[e,7]:= VAL(oXmlDetPro:find( 'vUnCom' ):cData)
         aProds[e,8]:= VAL(oXmlDetPro:find( 'vProd' ):cData)
      
         if valtype(oXmlDetPro:find( 'infAdProd' ))!="U"
            aProds[e,14]:= oXmlDetPro:find( 'infAdProd' ):cData
         endif
      
         oXmlNode := oXmlDoc:findNext()
         e+=1
      ENDDO
   ELSE
      Alert( "Arquivo não encontrato." )
   ENDIF   
[]´s
Alexandre Santos (AlxSts)
clebervn
Usuário Nível 3
Usuário Nível 3
Mensagens: 286
Registrado em: 12 Jun 2007 10:49
Localização: Florianópolis/SC

Re: perdendo pedaço do aquivo

Mensagem por clebervn »

vlw pela dica pessoal.

vou procurar usar e ver se resolve meu problema

obg
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: perdendo pedaço do aquivo

Mensagem por Toledo »

Alexandre, muito bem observado!
alxsts escreveu:IF nHandle := ( FOPEN( cNFe, FO_READ ) ) == 0
Mas fiz um teste aqui e com a linha acima não estava funcionando, então alterei para:

Código: Selecionar todos

#include "fileio.ch"

FUNC MAIN()
LOCAL nHandle

Private aProds:={}

cNFe:="135100017434998_v1.10-procNFe.xml"
nHandle:=FOPEN( cNFe, FO_READ )

IF FError() == 0
  oXmlDoc:= TXmlDocument():new()

  oXMlDoc:read( nHandle )
   
  oXmlNode:= oXmlDoc:findFirst( "det" )
  e=1
  DO WHILE oXmlNode <> NIL
    oXmlDetPro := TXmlIteratorScan():new( oXmlNode )
      
    vCod:= STRTRAN(oXmlDetPro:find( 'cProd' ):cData," ","")
    vDesc:= oXmlDetPro:find( 'xProd' ):cData
    AADD(aProds,{vCod,vDesc,"","","",0,0,0,0,0,0,0,0,""})
      
    aProds[e,4]:= oXmlDetPro:find( 'CFOP' ):cData
    aProds[e,5]:= oXmlDetPro:find( 'uCom' ):cData
    aProds[e,6]:= VAL(oXmlDetPro:find( 'qCom' ):cData)
    aProds[e,7]:= VAL(oXmlDetPro:find( 'vUnCom' ):cData)
    aProds[e,8]:= VAL(oXmlDetPro:find( 'vProd' ):cData)
      
    if valtype(oXmlDetPro:find( 'infAdProd' ))!="U"
      aProds[e,14]:= oXmlDetPro:find( 'infAdProd' ):cData
    endif
      
    oXmlNode := oXmlDoc:findNext()
    e+=1
  ENDDO
  FOR i=1 TO LEN(aProds)
   ? aProds[i,1], aProds[i,2], aProds[i,4], aProds[i,5], aProds[i,8]
  NEXT
ELSE
  Alert( "Arquivo não encontrato." )
ENDIF
RETU NIL
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
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: perdendo pedaço do aquivo

Mensagem por alxsts »

Olá!

Eu errei. O código teria que ser:

Código: Selecionar todos

IF ( nHandle := FOPEN( cNFe, FO_READ ) ) > 0
ao invés de

Código: Selecionar todos

IF ( nHandle := FOPEN( cNFe, FO_READ ) ) == 0
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Re: perdendo pedaço do aquivo

Mensagem por ANDRIL »

Pessoal, tenho quase certeza que li em algum tópico que a função MEMOREAD, MEMOEDIT e outros MEMOs, não tinha o limite de 64k no [x]harbour. Voces já comprovaram isso?

Não estou com [x]harbour aqui instalado para fazer o teste, mais já estava contente em saber que este limite tinha sido extinto.

Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: perdendo pedaço do aquivo

Mensagem por fladimir »

Andril, eu migrei a poucos dias para o Harbour e no meu editor de relatorios (texto) eu abri um arquivo de 0,99MB (1020KB) sem problemas não houve perca de dados do arquivo, isto via MemoEdit.

Sds.

Sucesso!!!

:)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: perdendo pedaço do aquivo

Mensagem por Toledo »

Andril, bem lembrado... no Harbour não existe este limite em campos memos.

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
Paredes01
Usuário Nível 2
Usuário Nível 2
Mensagens: 52
Registrado em: 20 Mai 2012 11:22
Localização: Mérida, Yucatán, México

perdendo pedaço do aquivo

Mensagem por Paredes01 »

hola a todos

Puedes checar este link:
http://forums.fivetechsupport.com/viewtopic.php?t=4116

Saludos
Ariel
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

perdendo pedaço do aquivo

Mensagem por JoséQuintas »

Teste assim:

Código: Selecionar todos

xArquivo := xDiretorio + aMatXml[ jk ]
cXml := MemoRead( xArquivo )
? Len( cXml )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder