Clipper On Line • Ver Tópico - Pra quem embute schemas como resource

Pra quem embute schemas como resource

Projeto hbNFe (Nota Fiscal Eletronica/Danfe) para [x]Harbour

Moderador: Moderadores

 

Pra quem embute schemas como resource

Mensagempor JoséQuintas » 19 Dez 2016 12:25

É só um gerador de fonte pra não ter que digitar cada coisa.

#include "directry.ch"
#include "set.ch"

PROCEDURE Main

   LOCAL acPath, oPath, cSrc1 := "", cSrc2 := ""

   cSrc1 += [PROCEDURE Test] + hb_Eol()
   cSrc1 += hb_Eol()
   cSrc1 += [   oFiles := SchemaFiles()] + hb_Eol()
   cSrc1 += [   FOR EACH cFile IN oFiles] + hb_Eol()
   cSrc1 += [      hb_MemoWrit( cFile, FileContent( cFile ) )] + hb_Eol()
   cSrc1 += [   NEXT] + hb_Eol()
   cSrc1 += hb_Eol()
   cSrc1 += [   RETURN] + hb_Eol()
   cSrc1 += hb_Eol()
   cSrc1 += [FUNCTION SchemaFiles()] + hb_Eol()
   cSrc1 += hb_Eol()
   cSrc2 := [FUNCTION FileContent( cFile )] + hb_Eol()
   cSrc2 += hb_Eol()
   cSrc2 += [   DO CASE] + hb_Eol()
   acPath := Directory( "*.*", "D" )
   FOR EACH oPath IN acPath
      IF oPath[ F_NAME ] <> "." .AND. oPath[ F_NAME ] <> ".." .AND. oPath[ F_ATTR ] == "D"
         GeraPath( oPath[ F_NAME ], @cSrc1, @cSrc2 )
      ENDIF
   NEXT
   cSrc1 += hb_Eol()
   cSrc1 += [   RETURN acFiles] + hb_Eol()
   cSrc1 += hb_Eol()
   cSrc2 += [   ENDCASE] + hb_Eol()
   cSrc2 += [   RETURN NIL]
   hb_MemoWrit( "x.prg", cSrc1 + cSrc2 )
   RETURN

FUNCTION GeraPath( cPath, cSrc1, cSrc2 )

   LOCAL aFiles, oFile

   aFiles := Directory( cPath + "\*.*" )
   FOR EACH oFile IN aFiles
      cSrc1 += [   AAdd( acFiles, "] + cPath + "\" + oFile[ F_NAME ] + [" )]  + hb_Eol()
      cSrc2 += [   CASE cFile == "] + cPath + [\] + oFile[ F_NAME ] + [" ; #pragma __binarystreaminclude "] + cPath + "\" + oFile[ F_NAME ] + ["        | RETURN %s] + hb_Eol()
   NEXT

   RETURN NIL


O fonte acima gera o fonte abaixo.

PROCEDURE Test

   oFiles := SchemaFiles()
   FOR EACH cFile IN oFiles
      hb_MemoWrit( cFile, FileContent( cFile ) )
   NEXT

   RETURN

FUNCTION SchemaFiles()

   AAdd( acFiles, "PL_008i2_CFOP_EXTERNO\consReciNFe_v3.10.xsd" )
   AAdd( acFiles, "PL_008i2_CFOP_EXTERNO\consSitNFe_v3.10.xsd" )
   AAdd( acFiles, "PL_008i2_CFOP_EXTERNO\consStatServ_v3.10.xsd" )
   AAdd( acFiles, "PL_008i2_CFOP_EXTERNO\enviNFe_v3.10.xsd" )
   ...

   RETURN acFiles

FUNCTION FileContent( cFile )

   DO CASE
   CASE cFile == "PL_008i2_CFOP_EXTERNO\consReciNFe_v3.10.xsd" ; #pragma __binarystreaminclude "PL_008i2_CFOP_EXTERNO\consReciNFe_v3.10.xsd"        | RETURN %s
   CASE cFile == "PL_008i2_CFOP_EXTERNO\consSitNFe_v3.10.xsd" ; #pragma __binarystreaminclude "PL_008i2_CFOP_EXTERNO\consSitNFe_v3.10.xsd"        | RETURN %s
   CASE cFile == "PL_008i2_CFOP_EXTERNO\consStatServ_v3.10.xsd" ; #pragma __binarystreaminclude "PL_008i2_CFOP_EXTERNO\consStatServ_v3.10.xsd"        | RETURN %s
...
   ENDCASE
   RETURN NIL


Fazer como text ou outra coisa complica, porque eles usam UTF-8, e perderia formatação.

Mesmo assim, o mais prático é enviar um ZIP, caso tenha validação do lado do cliente.
Um intermediário seria embutir o ZIP no EXE, e descompactar pelo Harbour.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Pra quem embute schemas como resource

Mensagempor malcarli » 20 Dez 2016 09:22

Bom dia, José. Obrigado por mais este exemplo excelente.
No trecho:

CASE cFile == "PL_008i2_CFOP_EXTERNO\consReciNFe_v3.10.xsd" ; #pragma __binarystreaminclude "PL_008i2_CFOP_EXTERNO\consReciNFe_v3.10.xsd"        | RETURN %s


Cmo seria o comando para trocar o nome do arquivo na rotina em c?


#pragma __binarystreaminclude "PL_008i2_CFOP_EXTERNO\consReciNFe_v3.10.xsd"        | RETURN %s


exemplo:
#pragma __binarystreaminclude " + cfile | RETURN %s
malcarli
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 181
Data de registro: 20 Ago 2015 18:14
Cidade/Estado: marilia/sp
Curtiu: 81 vezes
Mens.Curtidas: 4 vezes

Pra quem embute schemas como resource

Mensagempor JoséQuintas » 20 Dez 2016 09:49

Isso é o resource do Harbour.
Precisa desse nome pra juntar o arquivo na linquedição.
Sem nome, sem arquivo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Pra quem embute schemas como resource

Mensagempor malcarli » 20 Dez 2016 10:28

Achei um exemplo na net, mas tentei fazer e não deu certo


#pragma -km+
   If !Hb_FileExists(PATHDADOS + cFile)
   #pragma __binarystreaminclude + '"' + hb_FNameNameExt( cFile ) + '"'  | RETURN %s
malcarli
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 181
Data de registro: 20 Ago 2015 18:14
Cidade/Estado: marilia/sp
Curtiu: 81 vezes
Mens.Curtidas: 4 vezes

Pra quem embute schemas como resource

Mensagempor JoséQuintas » 20 Dez 2016 13:09

Isso é do Harbour, vai incluir o conteúdo do schema em tempo de compilação

É algo como #include "conteúdo do arquivo de schema"

Se retirar o nome daí, como é que a COMPILAÇÃO vai saber o que acrescentar?

Acho que está confundindo compilação com execução.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Pra quem embute schemas como resource

Mensagempor malcarli » 20 Dez 2016 13:16

estaria enviando como parâmetro o cFile
malcarli
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 181
Data de registro: 20 Ago 2015 18:14
Cidade/Estado: marilia/sp
Curtiu: 81 vezes
Mens.Curtidas: 4 vezes

Pra quem embute schemas como resource

Mensagempor JoséQuintas » 20 Dez 2016 19:45

É... mas enviando como parâmetro pra quem????

Comparando, seria o mesmo que criar um arquivo RC, mas no próprio fonte.

### arquivo RC

iconex   ICON   "arquivo.ico"
schema1 FILE "schema\\nota.xsd"
schema2 FILE "schema\\nota2.xsd"


O Harbour permite que ao invés de usar RC seja usado o fonte, com aquele #pragma ....
Aquilo já é o modo econômico, não dá pra reduzir mais.
O mínimo necessário é o nome do arquivo a ser embutido no EXE.

Ainda não sei se é vantagem isso, mas está aí a opção.

Talvez mais econômico embutir um ZIP e descompactar depois.
Ou enviar separado mesmo, até mesmo baixando direto do site da Sefaz.
De repente o antivírus atrapalha o ZIP.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para Projeto hbNFe

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro