Feliz ano de 2016 a todos e desculpe pela demora. Enquanto não concluo a biblioteca igsqlite3, e falta pouco, vou postar aqui uma biblioteca que criei já a algum tempo e aperfeiçoei.
PS. A biblioteca sqlite3 foi concluída, veja <aqui>
Imagine que você defina valores de configuração em seu programa, como cores, fontes, variáveis etc. e queira que esses valores fiquem gravados para outra vez que o programa for executado.
Bem, trata-se de salvar variáveis em um arquivo e depois lê-las novamente ao reabrir o programa, para ser mais específico trata-se de salvar tabelas, constituindo um poderoso recurso para criação de banco de dados nativos em prisma.
Baixe aqui < lib_reg_instal > (com correções feitas 12/04/2016) , descompacte e execute o setup.pbrexe
exemplo mínimo de uso:
1 2 3 4 5 6 7 8 9 |
local reg = inclua'reg.ini' reg.grave('teste',{ cidade = 'Diamantino' , estado = "MT" }; //para ler: dados = reg.leia('teste'); imprima( dados.cidade , dados.estado) //ou imprima(dados['cidade'], dados['estado']); leia(); |
simples exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//primeiro inclua a biblioteca local reg = inclua'reg'; //retorne para uma variavel reg //depois basta gravar as variáveis: reg.grave( 'teste.txt' , { nome = 'Arial', tam = 12 , estilo = 'negrito' } ); //pode conferir o arquivo gerado teste.txt e veja as variáveis gravadas lá. //agora vamos ler o que foi gravado: tab = reg.leia('teste.txt'); //não erre o nome do arquivo! //todas as variáveis foram lidas e armazenadas na tabela tab. //dois modos de acessar: //modo 1: imprima( tab.nome, tab.tam , tab.estilo ); //veja que usei tab + ponto + nome da variável gravada. //modo 2: imprima( tab['nome'] , tab['tam'] , tab['estilo'] ); //note que usei agora tab + [ + nome_var entre apas + ] //isso é muito útil quando for criar campos dinamicamente. //bem os dois modos o resultado é o mesmo. // a saída será: > Arial 12 negrito leia(); |
Se você abrir o arquivo criado teste.txt verá o seguinte:
1 2 3 |
nome="Arial"; estilo="negrito"; tam=12; |
Podemos gravar tabelas dentro de tabelas (tabelas aninhadas) sem problemas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
local reg = inclua'reg'; //podemos criar a tabela padrão antes: local tabconf = { fonte = { nome = 'Arial', tam = 12, cor = {244,0,255,prof=200} } , janela = { alt = 200 , larg = 350 , cor = { r = 255 , g = 0 , b = 100 , d = 244} }, editor = { numLinhas = verdadeiro, ling = 'prismabr', compilador = 'C:\\Prisma\\1.0\\bin\\prismac.exe' , historico = 'C:\\Prisma\\1.0\\bin\\prismacod_\\historico\\' }; } //e gravá-la: reg.grave('prisma.config', tabconf ); //para ler, nao tem segredo: local dados = reg.leia('prisma.config'); //por exemplo para ler o nome da fonte, cor da janela e caminho do compilador em editor: imprima("nome da fonte:" , dados.fonte.nome , 'ou' , dados['fonte']['nome'] ); imprima('cor da janela:' , dados.janela.cor.r, dados.janela.cor.g , dados.janela.cor.b ); imprima('Caminho compilador:' , dados.editor.compilador ); //para alterar algum valor, basta mudar diretamente na tabela lida e depois gravar de novo: //mudando o numLinhas: dados.editor.numLinhas = falso; //ou dados['editor']['numLinhas'] = falso; reg.grave('prisma.config', dados ); //pronto regravando a tabela já modificada. //esse foi só um exemplo, você pode alterar todos os valores se quiser. leia(); //para o programa não ser fechado antes de ver os resultados. |
Ao abrir o arquivo prisma.config verá algo assim:
1 2 3 |
janela={alt=200,cor={r=255,d=244,g=0,b=100,};larg=350,}; editor={ling="prismabr",numLinhas=falso,compilador="C:\\Prisma\\1.0\\bin\\prismac.exe",historico="C:\\Prisma\\1.0\\bin\\prismacod_\\historico\\",}; fonte={nome="Arial",cor={244,0,255,prof=200,};tam=12,}; |
e o resultado do programa acima será:
1 2 3 |
nome da fonte: Arial ou Arial cor da janela: 255 0 100 Caminho compilador: C:\Prisma\1.0\bin\prismac.exe |
Compilando o arquivo de registro:
Em alguns casos você vai preferir compilar o registro em código bytes prisma, da mesma forma que se compila um programa prisma.
Para isso existe uma função pronta na lib reg:
reg.compile(‘nome_arquivo’, { vars } );
e para ler use:
dados = reg.carregue(‘nome_arquivo’);
dados.vars … ou dados[‘vars’]
Pequeno exemplo:
1 2 3 4 5 6 7 |
local reg = inclua'reg'; reg.compile('testecomp' , { senha = 12345679, usuario='admin' } ); local dados = reg.carregue('testecomp'); imprima( dados.senha , dados.admin); imprima( dados['senha'] , dados['admin'] ); |
Sempre use reg.carregue depois de usar reg.compile e reg.leia somente após usar reg.grave.
Note que o número da senha não aparece pois é número, já a string usuario aparece. Logo para camuflar uma string, basta transformá-la em uma tabela de números usando os comandos tab = tabela.empacote( cod(str , 1 , -1 ) );
-1 um é o último elemento. Portanto cod retorna um número variado de números correspondente ao número cod de cada letra de str e depois empacote em uma tabela tab. Lembre-se cada letra é um número ex.: a = 97, b = 98 etc.
experimente na tela de comando:
1 2 3 |
>>> imprima( cod("abcdefg" , 1,-1) ); 97 98 99 100 101 102 103 >>> |
Compilar pode ser muito útil quando for armazenar uma imagem, áudio, vídeo ou outro arquivo.
é isso mesmo, essa biblioteca permite armazenar arquivos com duas ótimas funções:
reg.leiaArquivo(“arquivo”); e reg.graveArquivo(“arquivo”);
Vamos a um exemplo, baixe uma imagem qualquer na sua pasta de teste e execute o seguinte programa prisma:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
//gravaimagem.prisma local reg = inclua'reg'; //lendo a imagem e armazenando na variavel img: local img = reg.leiaArquivo('imagem.jpg'); se img entao //caso haja erro, img é nulo e não completa esta condição. //poderia ser qualquer outro arquivo inclusive um vídeo ou exe //quanto maior o arquivo mais demorado para gravar, lembre-se; //gravando: local ret, msg = reg.compile('imagem.txt' , { imagem = img } ); se nao ret entao erro(msg) fim;//emite o erro e fecha o programa. //lendo o arquivo: local dados = reg.carregue('imagem.txt'); se dados entao ret = reg.graveArquivo('imagem2.jpg', dados.imagem ); se ret entao poe'imagem gravada com sucesso'; senao poe'erro ao salvar imagem2'; fim senao imprima'erro ao carregar arquivo'; fim fim |
É possível gravar várias imagens em um mesmo arquivo, basta dar nomes diferentes ou use uma matriz com índices numéricos mesmo assim: reg.compile(‘arquivo’ , { img1 , img2 , img3 , img4 } );
para ler:
local dados = reg.carregue(‘arquivo’) ;// dados[1] , dados[1], dados[3] e dados[4] correspondem às imagens.
Bom, por enquanto é isso, espero que tenha sido útil. Veja os exemplos dentro da pasta lib_reg_install;