{"id":2276,"date":"2016-01-07T14:17:05","date_gmt":"2016-01-07T18:17:05","guid":{"rendered":"http:\/\/linguagemprisma.br4.biz\/blog\/?p=2276"},"modified":"2016-04-13T21:06:02","modified_gmt":"2016-04-14T01:06:02","slug":"biblioteca-reg","status":"publish","type":"post","link":"https:\/\/linguagemprisma.br4.biz\/blog\/uncategorized\/biblioteca-reg\/","title":{"rendered":"Biblioteca Reg"},"content":{"rendered":"<p>Feliz ano de 2016 a todos e desculpe pela demora. Enquanto n\u00e3o concluo a biblioteca igsqlite3, e falta pouco, vou postar aqui uma biblioteca que criei j\u00e1 a algum tempo e aperfei\u00e7oei.<\/p>\n<p><strong>PS. A biblioteca sqlite3 foi conclu\u00edda, veja <a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/tutorial-banco-de-dados-sqlite3-prisma\/\" target=\"_blank\">&lt;aqui&gt;<\/a><\/strong><\/p>\n<p>Imagine que voc\u00ea defina valores de configura\u00e7\u00e3o em seu programa, como cores, fontes, vari\u00e1veis etc. e queira que esses valores fiquem gravados para outra vez que o programa for executado.<\/p>\n<p>Bem, trata-se de salvar vari\u00e1veis em um arquivo e depois l\u00ea-las novamente ao reabrir o programa, para ser mais espec\u00edfico trata-se de salvar tabelas, constituindo um poderoso recurso para cria\u00e7\u00e3o de banco de dados nativos em prisma.<\/p>\n<p>Baixe aqui &lt;<a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2016\/04\/lib_reg_instal.zip\" target=\"_blank\">\u00a0lib_reg_instal\u00a0<\/a>&gt; (com corre\u00e7\u00f5es feitas 12\/04\/2016) \u00a0 , descompacte e execute o setup.pbrexe<\/p>\n<p>exemplo m\u00ednimo de uso:<\/p>\n<pre class=\"lang:prisma decode:true\">local reg = inclua'reg.ini'\r\n\r\nreg.grave('teste',{ cidade = 'Diamantino' , estado = \"MT\" };\r\n\/\/para ler:\r\ndados = reg.leia('teste');\r\nimprima( dados.cidade , dados.estado)\r\n\/\/ou \r\nimprima(dados['cidade'], dados['estado']);\r\nleia();<\/pre>\n<p>&nbsp;<\/p>\n<p>simples exemplo:<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/primeiro inclua a biblioteca\r\n\r\nlocal reg = inclua'reg'; \/\/retorne para uma variavel reg\r\n\r\n\/\/depois basta gravar as vari\u00e1veis:\r\n\r\nreg.grave( 'teste.txt' , { nome = 'Arial', tam = 12 , estilo = 'negrito' } );\r\n\r\n\/\/pode conferir o arquivo gerado teste.txt e veja as vari\u00e1veis gravadas l\u00e1.\r\n\r\n\/\/agora vamos ler o que foi gravado:\r\n\r\ntab = reg.leia('teste.txt'); \/\/n\u00e3o erre o nome do arquivo!\r\n\/\/todas as vari\u00e1veis foram lidas e armazenadas na tabela tab.\r\n\r\n\/\/dois modos de acessar:\r\n\r\n\/\/modo 1:\r\nimprima( tab.nome, tab.tam , tab.estilo ); \r\n\/\/veja que usei tab + ponto + nome da vari\u00e1vel gravada.\r\n\r\n\/\/modo 2:\r\nimprima( tab['nome'] , tab['tam'] , tab['estilo'] );\r\n\/\/note que usei agora tab + [ + nome_var entre apas + ]\r\n\/\/isso \u00e9 muito \u00fatil quando for criar campos dinamicamente.\r\n\r\n\/\/bem os dois modos o resultado \u00e9 o mesmo.\r\n\/\/ a sa\u00edda ser\u00e1: &gt;  Arial    12     negrito\r\n\r\nleia();\r\n\r\n<\/pre>\n<p>Se voc\u00ea abrir o arquivo criado teste.txt ver\u00e1 o seguinte:<\/p>\n<pre class=\"lang:prisma highlight:0 decode:true \">nome=\"Arial\";\r\nestilo=\"negrito\";\r\ntam=12;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<p>Podemos gravar tabelas dentro de tabelas (tabelas aninhadas) sem problemas:<\/p>\n<pre class=\"lang:prisma decode:true\">local reg = inclua'reg';\r\n\r\n\/\/podemos criar a tabela padr\u00e3o antes:\r\n\r\nlocal tabconf = {\r\n\r\nfonte = { nome = 'Arial', tam = 12, cor = {244,0,255,prof=200} } ,\r\njanela = { alt = 200 , larg = 350 , cor = { r = 255 , g = 0 , b = 100 , d = 244} },\r\neditor = { numLinhas = verdadeiro, ling = 'prismabr', compilador = 'C:\\\\Prisma\\\\1.0\\\\bin\\\\prismac.exe' , historico = 'C:\\\\Prisma\\\\1.0\\\\bin\\\\prismacod_\\\\historico\\\\' };\r\n\r\n}\r\n\r\n\/\/e grav\u00e1-la:\r\nreg.grave('prisma.config', tabconf );\r\n\r\n\/\/para ler, nao tem segredo:\r\nlocal dados = reg.leia('prisma.config');\r\n\/\/por exemplo para ler o nome da fonte, cor da janela e caminho do compilador em editor:\r\nimprima(\"nome da fonte:\" , dados.fonte.nome , 'ou' , dados['fonte']['nome'] );\r\nimprima('cor da janela:' , dados.janela.cor.r, dados.janela.cor.g , dados.janela.cor.b );\r\nimprima('Caminho compilador:' , dados.editor.compilador );\r\n\r\n\/\/para alterar algum valor, basta mudar diretamente na tabela lida e depois gravar de novo:\r\n\/\/mudando o numLinhas:\r\ndados.editor.numLinhas = falso; \/\/ou dados['editor']['numLinhas'] = falso;\r\nreg.grave('prisma.config', dados ); \/\/pronto regravando a tabela j\u00e1 modificada.\r\n\r\n\/\/esse foi s\u00f3 um exemplo, voc\u00ea pode alterar todos os valores se quiser.\r\nleia(); \/\/para o programa n\u00e3o ser fechado antes de ver os resultados.<\/pre>\n<p>Ao abrir o arquivo prisma.config ver\u00e1 algo assim:<\/p>\n<pre class=\"lang:prisma highlight:0 decode:true \">janela={alt=200,cor={r=255,d=244,g=0,b=100,};larg=350,};\r\neditor={ling=\"prismabr\",numLinhas=falso,compilador=\"C:\\\\Prisma\\\\1.0\\\\bin\\\\prismac.exe\",historico=\"C:\\\\Prisma\\\\1.0\\\\bin\\\\prismacod_\\\\historico\\\\\",};\r\nfonte={nome=\"Arial\",cor={244,0,255,prof=200,};tam=12,};\r\n<\/pre>\n<p>e o resultado do programa acima ser\u00e1:<\/p>\n<pre class=\"lang:prisma highlight:0 decode:true \">nome da fonte:\tArial\tou\tArial\r\ncor da janela:\t255\t0\t100\r\nCaminho compilador:\tC:\\Prisma\\1.0\\bin\\prismac.exe\r\n<\/pre>\n<hr \/>\n<p>Compilando o arquivo de registro:<\/p>\n<p>Em alguns casos voc\u00ea vai preferir compilar o registro em c\u00f3digo bytes prisma, da mesma forma que se compila um programa prisma.<\/p>\n<p>Para isso existe uma fun\u00e7\u00e3o pronta na lib reg:<\/p>\n<p>reg.compile(&#8216;nome_arquivo&#8217;, { vars\u00a0} );<\/p>\n<p>e para ler use:<\/p>\n<p>dados = reg.carregue(&#8216;nome_arquivo&#8217;);<\/p>\n<p>dados.vars &#8230; ou dados[&#8216;vars&#8217;]<\/p>\n<p>Pequeno exemplo:<\/p>\n<pre class=\"lang:prisma decode:true \">local reg = inclua'reg';\r\n\r\nreg.compile('testecomp' , { senha = 12345679, usuario='admin' } );\r\n\r\n  local dados = reg.carregue('testecomp');\r\n  imprima( dados.senha , dados.admin);\r\n  imprima( dados['senha'] , dados['admin'] );\r\n<\/pre>\n<p>Sempre use reg.carregue depois de usar reg.compile\u00a0e reg.leia somente ap\u00f3s usar reg.grave.<\/p>\n<p>Note que o n\u00famero da senha n\u00e3o aparece pois \u00e9 n\u00famero, j\u00e1 a string usuario aparece. Logo para camuflar uma string, basta transform\u00e1-la em uma tabela de n\u00fameros usando os comandos tab = tabela.empacote( cod(str , 1 , -1 ) \u00a0);<\/p>\n<p>-1 um \u00e9 o \u00faltimo elemento. Portanto cod retorna um n\u00famero variado de n\u00fameros correspondente ao n\u00famero cod de cada letra de str e depois empacote em uma tabela tab. Lembre-se cada letra \u00e9 um n\u00famero ex.: a = 97, b = 98 etc.<\/p>\n<p>experimente na tela de comando:<\/p>\n<pre class=\"lang:prisma highlight:0 decode:true\">&gt;&gt;&gt; imprima( cod(\"abcdefg\" , 1,-1) );\r\n97 98 99 100 101 102 103\r\n&gt;&gt;&gt;<\/pre>\n<p>Compilar pode ser muito \u00fatil quando for armazenar uma imagem, \u00e1udio, v\u00eddeo ou outro arquivo.<\/p>\n<p>\u00e9 isso mesmo, essa biblioteca permite armazenar arquivos com duas \u00f3timas fun\u00e7\u00f5es:<\/p>\n<p>reg.leiaArquivo(&#8220;arquivo&#8221;); e reg.graveArquivo(&#8220;arquivo&#8221;);<\/p>\n<p>Vamos a um exemplo, baixe uma imagem qualquer na sua pasta de teste e execute o seguinte programa prisma:<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/gravaimagem.prisma\r\n\r\nlocal reg = inclua'reg';\r\n\r\n\/\/lendo a imagem e armazenando na variavel img:\r\nlocal img = reg.leiaArquivo('imagem.jpg'); \r\n\r\nse img entao \/\/caso haja erro, img \u00e9 nulo e n\u00e3o completa esta condi\u00e7\u00e3o.\r\n\r\n\/\/poderia ser qualquer outro arquivo inclusive um v\u00eddeo ou exe\r\n\/\/quanto maior o arquivo mais demorado para gravar, lembre-se;\r\n\r\n\/\/gravando:\r\n local ret, msg = reg.compile('imagem.txt' , { imagem = img } );\r\n se nao ret entao erro(msg) fim;\/\/emite o erro e fecha o programa.\r\n\/\/lendo o arquivo:\r\n local dados = reg.carregue('imagem.txt');\r\n \r\n se dados entao \r\n   ret = reg.graveArquivo('imagem2.jpg', dados.imagem );\r\n   se ret entao poe'imagem gravada com sucesso';\r\n   senao poe'erro ao salvar imagem2';\r\n   fim\r\n senao\r\n   imprima'erro ao carregar arquivo';\r\n fim\r\n\r\nfim\r\n\r\n\r\n<\/pre>\n<p>\u00c9 poss\u00edvel gravar v\u00e1rias imagens em um mesmo arquivo, basta dar nomes diferentes ou use uma matriz com \u00edndices num\u00e9ricos mesmo assim: \u00a0<strong>reg.compile(&#8216;arquivo&#8217; , { img1 , img2 , img3 , img4 } );<\/strong><\/p>\n<p>para ler: <strong>\u00a0 <\/strong><\/p>\n<p><strong>local dados = reg.carregue(&#8216;arquivo&#8217;) ;\/\/ dados[1] , dados[1], dados[3] \u00a0e dados[4] correspondem \u00e0s imagens.<\/strong><\/p>\n<p>Bom, por enquanto \u00e9 isso, espero que tenha sido \u00fatil. Veja os exemplos dentro da pasta lib_reg_install;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Feliz ano de 2016 a todos e desculpe pela demora. Enquanto n\u00e3o concluo a biblioteca igsqlite3, e falta pouco, vou postar aqui uma biblioteca que criei j\u00e1 a algum tempo e aperfei\u00e7oei. PS. A biblioteca sqlite3 foi conclu\u00edda, veja &lt;aqui&gt; Imagine que voc\u00ea defina valores de configura\u00e7\u00e3o em seu programa, como cores, fontes, vari\u00e1veis etc&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2276","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/2276","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/comments?post=2276"}],"version-history":[{"count":11,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/2276\/revisions"}],"predecessor-version":[{"id":2510,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/2276\/revisions\/2510"}],"wp:attachment":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/media?parent=2276"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/categories?post=2276"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/tags?post=2276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}